目录
1.更简单的存取Spring对象
2.获取Bean对象(对象装配)DI
3. Resource注入
4.Resource注入和Autowired注入的区别
1.更简单的存取Spring对象
2.获取Bean对象(对象装配)DI
对象装配(对象注入)有三种方法是实现
1.通过属性注入
为什么叫属性注入,因为你看上面第二行就像声明一个属性一样
main方法不能用属性注入(Autowired)
2.构造方法注入
就和普通的构造方法一样
当前类只有一个构造方法的时候可以省略,多个的时候还是要写Autowired 所以建议还是要带上Autowired吧。
当只有一个的时候这是spring为了推广这种写法给我们的好处,就是省略写了Autowired
3.Setter注入
构造个Set类名 方法,然后前面别忘了加Autowired
先写private 类 类名 构造个空的 再用set用Spring传入对象
三者的优缺点,
1.属性注入,优点使用简单,但是Spring官方不提倡使用,因为
第一条因为final是要直接赋值的,要么直接赋值,要么构造方法赋值
第二条是Autowired来自于Spring,Spring是Ioc容器,它只适用于Ioc容器
第三条是,更容易违背单一设计原则,不够专一。
2.set注入
优点:更加符合单一设计原则
缺点:
1.不能注入不可变对象,不能注入final修饰的
2.注入对象可被修改
这一点i相比于属性注入更加危险
3.构造方法注入,构造方法注入好处多多。
1.可以注入不可变对象
2.注入的对象不能被修改(1.final修饰的对象 2.构造方法只在类加载的时候执行一次)
3.通用性更强(相比于属性注入只适合于IOC容器)
4.是彻底完全构造对象的(构造方法的特性)
缺点就是没有属性注入简单
小节:实际开发中大部分还是选择属性注入,因为它够简单。
它仍然是主流的实现方式
3. Resource注入
这是java中的JDK提供的方法,也是提供属性注入的。写法和Autowired一样
他们之间有什么区别呢?
1.Resource可以用于set注入和属性注入,但是Autowired多了一个构造方法注入
2.Resource来源于JDK Autowired来源于Spring
3.Resource支持更多的参数设置,例如name设置,根据名称获取Bean对象 ,而Autowired只required参数
4.Resource注入和Autowired注入的区别
它们都是根据类型和名称一块找的,区别就是顺序不同
Resource是先根据类型找 如果
则先找到 student1 student2(他们都是Student类),然后再根据名字找发现没有student这个名字的对象。那么就会报错(but find 2)
Resource解决方案:由于Resource可以传入name属性
这样解决就会找到student2对象
Qualifier 过滤,预选赛