spring控制反转
spring IOC的三种注入方式:
1.接口注入
2.getter,setter方式注入
3.构造器注入
对象与对象之间的关系可以简单的理解为对象之间的依赖关系:
思考:对象与对象之间可能存在什么关系?(is a, has a,use a)
a) is a 关系
class A implements IA{} ; A 实现了IA 接口
class A extends B{}; A 继承了 B这个类
b) has a 关系
class Point{}
class Circle{
private Point point;
}
Circle对象中有一个Point类型的对象
c) use a 关系
class ProjectUtil{
public String getId(){
return UUID.randomUUID().toString();
}}
1.接口注入
在需要使用接口的地方直接注入一个接口的实现类。在ssm框架中,service实现类都继承各自的service接口,对service使用@Service注入,在controller中则只是定义一个service接口,使用@Autowried注解获取。
2.getter,setter注入
在属性的set方法中设置需要使用类型的形参
3.构造器注入
在类中将要注入的类设置为属性,在构造方法中传入该类的实例
三种注入方式比较:
接口注入:
接口注入模式因为具备侵入性,它要求组件必须与特定的接口相关联,实际使用有限
setter注入:
依赖关系比较复杂的时候set注入模式比较简洁直观
构造器注入:
在构造期完成一个完整的、合法对的对象
所有依赖关系在构造函数中集中呈现
依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态
只有组件的创建者关心其内部的依赖关系,对调用者而言,该依赖关系处于黑盒之中
总结
Spring使用注入方式,为什么使用注入方式?这系列问题实际归结起来就是一句话,Spring的注入和IOC反转控制是一回事。
理论上:第三种注入方式(构造注入)在符合java使用原则上更加合理,第二种注入方式(set注入)作为补充
实际上:第二种注入方式(set注入)可以取得更加直观的效果,在使用工作上有不可比拟的优势,所有运用应该更加广泛