Spring IOC三种注入方式比较
来源:互联网 发布:公司免费记账软件 编辑:程序博客网 时间:2024/05/22 05:29
对象与对象之间的关系可以简单的理解为对象之间的依赖关系:
A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类的方法来完成功能,叫做A类依赖于B类.
控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术,由容器控制程序之间的关系,而不是由代码直接控制.
1.接口注入
public class ClassA {
private InterfaceB clzB;
public void doSomething() {
Ojbect obj = Class.forName(Config.BImplementation).newInstance();
clzB = (InterfaceB)obj;
clzB.doIt();
}
……
}
上面代码中,ClassA依赖于InterfaceB的实现,如何获得InterfaceB实现类的实例?传统的方法是在代码中创建InterfaceB实现类的实例,并将赋予clzB.这样一来,ClassA在编译期即依赖于InterfaceB的实现.为了将调用者与实现者在编译期分离,于是有了上面的代码.
我们根据预先在配置文件中设定的实现类的类名(Config.BImplementation),动态加载实现类,并通过InterfaceB强制转型后为ClassA所用,这就是接口注入的一个最原始的雏形.
public class ClassA {
private InterfaceB clzB;
public Object doSomething(InterfaceB b) {
clzB = b;
return clzB.doIt();
}
……
}
上面代码中,加载接口实现并创建其实例的工作由容器完成.
在运行期,InterfaceB实例将由容器提供.即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中.
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
……
}
}
HttpServletRequest和HttpServletResponse实例由Servlet Container在运行期动态注入.
2.Setter设置注入
基于设置模式的依赖注入机制更加直观,也更加自然.
public class ClassA {
private InterfaceB clzB;
public void setClzB(InterfaceB clzB) {
this.clzB = clzB;
}
……
}
3.构造器注入
public class DIByConstructor {
private final DataSource dataSource;
public DIByConstructor(DataSource ds) {
this.dataSource = ds;
}
……
}
构造器注入,即通过构造函数完成依赖关系的设定,容器通过调用类的构造方法将其所需的依赖关系注入其中.
- Spring IOC三种注入方式比较
- Spring IOC三种注入方式比较
- Spring IOC三种注入方式比较
- Spring IOC三种注入方式比较
- Spring IOC三种注入方式比较
- Spring IOC三种注入方式比较
- Spring IOC三种注入方式分析及比较
- Spring三种注入IOC注入方式
- Spring三种注入IOC注入方式
- Spring三种注入IOC注入方式
- Spring IOC 三种注入方式
- Spring IOC的三种注入方式
- 02-Spring-spring ioc注入的三种方式
- spring三种注入方式比较
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)
- js 新浪微博的统计字数方法
- 把DLL文件打包进EXE的技巧(C#)
- 虚拟列表控件
- 索引
- R树
- Spring IOC三种注入方式比较
- 黑马程序员-骑士飞行棋
- 驾照理论考试总结
- careerCup1.7
- 51单片机汇编指令集 (指令集带英文翻译)
- Android提高第九篇之SQLite分页表格
- fcntl参数解释
- stsGrassViewer使用说明
- 工欲善其事,必先利其器————每天十分钟搭建编程环境:Linux下设置雅黑-Consolas混合字体