今天来回顾一下Spring中的DI(依赖注入),通过学习了解到了能够被注入的数据分为三类:基本类型和String类型、其他bean类型和复杂类型/集合类型。
一、基于xml配置文件的依赖注入
- 1、使用构造函数注入(使用constructor-arg标签)
name:指定参数赋值
value:提供基本类型和String类型数据
ref:指定其他bean对象,例如图中的Date属性的now
– 优点:在获取bean对象时,注入数据是必须的操作,否则无法创建对象
– 弊端:实例化对象时,即使不需要用到对象的某个属性,也要提供,不然无法创建对象
- 2、使用set方法注入(使用property标签)
(优缺点与使用构造函数注入相反)
– 优点:创建对象没有明确限制,可以使用默认构造函数
– 弊端:如果某个成员必须有值,则获取对象时可能set方法是没有执行的(怎么理解呢? 就是因为没有明确限制,可以直接使用默认构造函数创建对象,可能一调用默认构造,对象就用完了,所必须要的成员也就没有被赋值了)
- 3、使用复杂类型/集合类型注入
- (使用property标签,嵌入array、list、set、map和props标签)
List:
Map:
二、Spring的IOC注解
- 1、用于创建对象的注解
– @Component 把当前对象注入到Spring IOC容器中
以下三个与Component作用一致,用于三层架构
– @Controller 用于表现层
– @Service 用于业务层
– @Repository 用于持久层
- 2、用于注入数据的注解 (集合类型的注入只能通过XML实现)
(1)用于其他bean类型数据,无法注入基本类型和String类型的数据
– @Autowired (常用,自动注入)
– @Qualifier(给类成员注入时不能单独使用,需配合@Autowired; 给方法参数注入时可单独使用)
– @Resource(需指定要注入的bean的id)
(2)用于基本类型和String类型的注入
– @Value(value用于指定数据的值)
- 3、用于改变作用范围
– @Scope(singleton(单例)和prototype(多例))
- 4、有关生命周期的(作用与xml中bean标签下的init-method和destroy-method作用一致)
– @PostConstruct(初始化)
– @PreDestroy(销毁)
关于依赖注入、对象和数据注入的注解就先记录到这里,回顾了一下,又看到了一些不是很了解的地方,值得再去深入了解一下。加油