Spring注入的三种方式
Spring注入的三种方式
Spring实例注入的三种方式:
- 使用注解方式注入
- set方法注入
- 构造方法注入
1、注解方式注入
使用@Autowired、@Resource或@Inject注解注入。 一般使用注解的都是自己写的实例,直接使用注解注入即可,如果我们要注入的是第三方包里的实例,还是使用xml的方式进行配置注入。
1.1@Autowired:
Spring提供,默认按照类型装配。必须要求要注入的对象存在,如果要允许空值,设置其required属性为true
1.2@Resource:
J2EE提供,默认按照名称装配,名称可以通过name属性指定,默认取字段名进行查找并完成注入。找不到名称时才会按照类型进行装配。所以@Resource的作用其实和@Autowired类似,只不过是注入方式不同。
但是注解注入是不推荐的。
2、set方法注入
我们很少使用该方法注入,可能是因为代码过于臃肿
@Service
public class BService {
AService aService;
@Autowired
public void setaService(AService aService) {
this.aService = aService;
}
}
3、构造方法注入
@Service
public class AService {
BService bService;
@Autowired
public AService(BService bService) {
this.bService = bService;
}
}
类中有多个构造方法时,@Autowired是必须的,用来指定使用哪个构造方法。
4、 使用哪种构造方法
使用构造方法注入更好,构造注入方法有以下几个优势:
4.1:依赖不可变。通过构造方法注入的bean以后无法修改。
4.2:依赖不为空。构造方法注入时会自动检查注入的对象是否为空。
4.3:完全初始化。拿到的是完全初始化的对象。
5.为什么实体类不用注入
考虑是否将一个class交由spring管理,关键看这个class产生的bean是否符合spring提供的scope的生命周期规则。
5.1、实体类需要附上对应的数据才有意义;
5.2、由spring管理并注入的类是可大量重复使用的;
5.3、一个实体类可对应多条数据,如果实例化该类,则需要针对所有的数据实例化,这是不可能的,导致程序更加臃肿,还不如需要的时候再实例化。