欢迎来到天天文库
浏览记录
ID:1495734
大小:42.50 KB
页数:4页
时间:2017-11-12
《spring ioc控制反转》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、springioc控制反转关键字:ioc,全称(inverseofcontrol),中文意思为:控制反转,spring框架的核心基于控制反转原理。IOC,全称(InverseOfControl),中文意思为:控制反转,Spring框架的核心基于控制反转原理。什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术。l 由容器控制程序之间的关系,而不是由代码直接控制l 由于控制权由代码转向了容器,所以称为反转 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:依赖关系:在A类需要类B的一个实例来进行某些操作,比如在类A
2、的方法中需要调用类B的方法来完成功能,叫做A类依赖于B类。 一个需要特定的依赖的组件一般会涉及一个依赖对象,在IOC的概念中叫做目标(target)。换句话说,IOC提供了这样的服务,使一个组件能够在它的整个生命周期中访问它的依赖和服务,用这种方法与它的依赖进行交互。总的来说,IOC能够被分解为两种子类型:依赖注入和依赖查找。 (1)依赖查找比如使用JNDI注册一个数据库连接池的示例中,代码中从注册处获得依赖关系的JNDI查找(JNDIlookups):initContext=newInitialContext();//获取数据源DataSourceds=(DataSou
3、rce)initContext.lookup("java:comp/env/jdbc/mysql"); (2)依赖注入(DependencyInjection)依赖注入:两个对象之间的依赖关系在程序运行时由外部容器动态的注入依赖行为方式称为依赖注入(DI)。DI是IOC的一种形式。 IoC在应用开发中是一个非常有力的概念。如MartinFlower所述,IoC的一种表现形式就是依赖性注射。依赖性注射用的是好莱坞原则,"不要找我,我会找你的。"。换句来说,你的类不会去查找或是实例化它们所依赖的类。控制恰好是反过来的,某种容器会设置这种依赖关系。使用IoC常常使代码更加简洁,
4、并且为相互依赖的类提供一种很好的方法。 依赖注入的三种实现类型:接口注入、Setter注入和构造器注入。<1>接口注入(Type1)publicclassClassA{privateInterfaceBclzB;publicvoiddoSomething(){Ojbectobj=Class.forName(Config.BImplementation).newInstance();clzB=(InterfaceB)obj;clzB.doIt()}……}上面的代码中,ClassA依赖于InterfaceB的实现,如何获得InterfaceB实现类的实例?传统的方法是在代码中
5、创建InterfaceB实现类的实例,并将起赋予clzB。而这样一来,ClassA在编译期即依赖于InterfaceB的实现。为了将调用者与实现者在编译期分离,于是有了上面的代码,我们根据预先在配置文件中设定的实现类的类名(Config.BImplementation),动态加载实现类,并通过InterfaceB强制转型后为ClassA所用。这就是接口注入的一个最原始的雏形。而对于一个Type1型IOC容器而言,加载接口实现并创建其实例的工作由容器完成,见如下代码。 publicclassClassA{ privateInterfaceBclzB;
6、 publicObjectdoSomething(InterfaceBb){ clzB=b; returnclzB.doIt(); } ……}在运行期,InterfaceB实例将由容器提供。Type1型IOC发展较早(有意或无意),在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。下面的代码大家应该非常熟悉:publicclassMyServletextendsHttpServlet{ publicvoiddoGet(HttpS
7、ervletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ …… }}这也是一个Type1 型注入,HttpServletRequest和HttpServletResponse实例由ServletContainer在运行期动态注入。<2>Setter(设值)注入(Type2)各种类型的依赖注入模式中,设值注入模式在实际开发中得到了最广泛的应用。 publicclassClassA{
此文档下载收益归作者所有