在之前没有使用spring框架的时候,如果我们某个类需要依赖其它类的方法的时候,通常是要new一个依赖类的对象,然后再去调用它的方法,这种开发的问题就是耦合性高。所以有了spring框架之后,在spring框架中有IOC和DI的思想,也就是利用控制反转和依赖注入的核心思想,这样依赖类不再由开发人员自己去实例化操作,而是通过spring框架帮我们完成实例化,并把实例化的对象放入到容器中,当我们需要这个对象时,通过注入的方式注入进来就可以了。
那么spring框架的注入方式有好几种方式,最为常用的主要有以下三种方式,分别是:
构造方法注入set方法注入注解注入接下来我们就分别说明这三种注入方式,学习如何实现注入操作。
1.构造方法注入
这种注入方式是通过构造方法来实现,类中必须提供构造方法,属性的set方法不需要。
下面通过例子来说明。
Car类
Spring-config.xml配置文件
可以用形参名字注入。
也可以根据构造方法形参的索引位置注入。
CarTest测试类
结果
2. set方法注入
这种注入方式通过set方法完成注入,所以在类中必须要给属性设定set方法。
下面通过一个例子来说明。
Person类
Spring.config.xml 配置文件
PersonTest测试类
测试输出的结果
注意:构造方法注入和set注入都是通过java的反射技术得以实现的。
3. 注解
通过@Autowired注解方式,可以实现自动装配,只要在对应的属性上面添加该注解进来,但是@Autowired注解是按照byType类型来注入。
再看下面这个例子。
在Person类上面加入Car汽车类,并在上面添加@Autowired注解。
注意:除了上述的在spring.config.xml 文件配置的内容之外,还得在里面添加如下配置,
主要是通过context:component-scan标签去com.bean包下扫描Person类上面的@Autowired注解,将Spring容器中的car 汽车对象注入到Person类的car属性中。
结果:
除了使用@Autowired 注解来注入外,其实也可以通过java的注解@Resource来实现自动装配,它默认按照byName名称来进行自动装配,但是如果找不到与之名称相匹配的bean对象时,则会按照byType类型进行装配。
使用@Autowired注解和@Resource注解的作用是相同的,只不过@Autowired注解按照byType类型注入,如果@Autowired想使用名称可以结合@Qualifier注解进行使用。
通过注解的方式进行依赖注入,可以省去在配置文件编写的时间,可以大大提高开发效率,所以在开发这种方式也是最常用的方式。
好了,spring常用的注入方式就和大家分享到这里,虽然技术很基础,但是开发中经常会用到,希望给大家带来一定的帮助,也可以在下面留言交流。