`
willwen
  • 浏览: 24647 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring IOC

 
阅读更多

IOC是spring核心部分之一,其重要性不言而喻,故对其做深入了解是很有必要的。

 

IOC深入了解:

      想必各位对IOC的概念看到很多遍,这里还是再说明下,IOC,即Inversion Of Control 控制翻转,比较容易理解的解释是:对象间的依赖关系交由容器负责,无需在应用代码中查找定位。其实真正掌握IOC需要提到另外两个概念:依赖注入、依赖查找,同时也是IOC的两种表现方式。

 

      依赖查找随处可见,如:A、B两个类,A类中需要调用B类的方法,常见的方式就是在A类中new一个B类的对象,则由A类自动查找B类对象。还有一个最直接的例子,就是写EJB客户端调用远程服务,由于EJB是基于JNDI进行查找对象,则需要在客户端写一大堆JNDI获取对象的代码。如:

try {          
   java.lang.Object ejbHome =
      initialContext.lookup(
         "java:comp/env/com/mycompany/accounting/AccountEJB");
   accountHome =
      (AccountHome)javax.rmi.PortableRemoteObject.narrow(ejbHome, AccountHome.class);}
   catch (NamingException e) { // Error getting the home interface 
   ...
}

可以明显看到这种方式有以下问题:

1、必须依赖JNDI环境,不能在应用服务器环境之外运行,同时不利于做单元测试;

2、代码逻辑复杂,业务逻辑与底层操作混在一起,难以维护;

相比起来,依赖注入是一种更可取的方式,由容器负责依赖查询,组装对象间的依赖关系

依赖注入有两种方式:构造函数注入和Setter方法注入。

 

构造函数注入:

public class ConstructorInjection {

    private Dependency dep;

    public ConstructorInjection(Dependency dep) {

        this.dep = dep;

    }

 

}

 

Setter方法注入:

当容器实例化应用对象之后,就会立即调用后者的setter方法,传入合适的参数。

public class SetterInjection {

    private Dependency dep;

    public void setMyDependency(Dependency dep) {

        this.dep = dep;

    }

 

}

 

依赖注入基本原则:



 

 

IOC的好处

1、查找定位操作与应用代码完全无关,大大提高代码的复用度以及可测试性;

2、代码职责更加分明,只需关注业务逻辑实现;

2、不依赖容器API和特殊接口,降低应用代码对轻量级容器的依赖,方便移植;

 

  • 大小: 31.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics