spring中IOC的三种实现机制

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注入)可以取得更加直观的效果,在使用工作上有不可比拟的优势,所有运用应该更加广泛

猜你喜欢

转载自blog.csdn.net/weixin_42564978/article/details/81283087
今日推荐