spring IoC 优点和缺点

IoC是什么?Inversion of Control,即反转控制,或许说为依赖注入更为合适。IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式。
Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执 行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了,如:

class A{  
    AInterface a;  

    A(){  
        a = new AInterfaceImp();  
    }  
}  

Class AAInterfaceImp就是依赖关系,如果想使用AInterface的另外一个实现就需要更改代码了。当然我们可以建立一个Factory来根据条件生成想要的AInterface的具体实现,即:

class InterfaceImplFactory{  

    AInterface create(Object condition){  
        if(condition = condA){  
            return new AInterfaceImpA();  
        }elseif(condition = condB){  
            return new AInterfaceImpB();  
        }else{  
            return new AInterfaceImp();  
        }  
    }  
}  
 表 面上是在一定程度上缓解了以上问题,但实质上这种代码耦合并没有改变。通过IoC模式可以彻底解决这种耦合,它把耦合从代码中移出去,放到统一的XML文 件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中,这可能就是“依赖注入”说法的来源了。
IOC模式,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实 际的应用程序代码分开。其中一个特点就是通过文本的配件文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。

当前比较知名的IOC容器有:Pico Container、Avalon 、Spring、JBoss、HiveMind、EJB等。
在上面的几个IOC容器中,轻量级的有Pico Container、Avalon、Spring、HiveMind等,超重量级的有EJB,而半轻半重的有容器有JBoss,Jdon等。
可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是 把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
IoC中最基本的Java技术就是“反射”编程。反射又是一个生涩的名词,通俗的说反射就是根据给出的类名(字符串)来生成对象。这种编程方式可以让对象 在生成时才决定要生成哪一种对象。反射的应用是很广泛的,象Hibernate、String中都是用“反射”做为最基本的技术手段。
在过去,反射编程方式相对于正常的对象生成方式要慢10几倍,这也许也是当时为什么反射技术没有普通应用开来的原因。但经SUN改良优化后,反射方式生成对象和通常对象生成方式,速度已经相差不大了(但依然有一倍以上的差距)。

IoC最大的好处是什么?

 因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。

IoC最大的缺点是什么?
(1)生成一个对象的步骤变复杂了(其实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。
(2)对象 生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。
(3) 缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring IOC(Inversion of Control,控制反转)的优点缺点如下: 优点: 1. 依赖注入(DI):Spring IOC容器负责创建并管理bean对象,而不是应用程序本身。这个过程中,容器会自动将对象之间的依赖关系注入到对应的对象中,减少了手动配置的工作量,同时也使得对象之间的耦合度降低,可维护性提高。 2. 松耦合:IOC容器通过接口而不是实现类来注入依赖关系,这使得应用程序中的各个组件之间的耦合度降低,容易进行模块化开发,同时也方便进行单元测试。 3. AOP支持:Spring IOC容器可以很方便地支持AOP(Aspect Oriented Programming,面向切面编程),通过代理机制,在不修改原代码的情况下,可以很容易地添加横切关注点,如事务管理、安全检查等。 4. 配置灵活:Spring IOC容器的配置非常灵活,可以使用XML、注解或JavaConfig等方式进行配置,支持多种数据源和数据格式。 缺点: 1. 运行时性能:Spring IOC容器在运行时需要进行大量的反射和代理操作,这会带来一定的性能损失。 2. 学习成本:Spring IOC容器的底层原理较为复杂,需要投入一定的学习成本。 3. 配置复杂:如果应用程序比较复杂,需要注入很多依赖关系,配置文件可能会变得较为复杂,维护起来也会比较困难。 总的来说,Spring IOC在提高应用程序的灵活性和可维护性方面发挥了重要作用,但在性能和学习成本方面也存在一些缺点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值