spring的ioc概念掌握

反向控制是spring框架的核心。但是反向控制是什么意思?到底控制的什么方面被反向了?
获得依赖对象的方式反向了。反向控制的一个更贴切的名字是:依赖注入

 

通常我们写的程序,都是需要告诉容器或者框架,让它们找到自身所需要的类,然后再由应用代码创建待使用的对象实例。
因此,应用代码在使用实例之前,需要创建对象实例。

 

然而,在ioc模式中,创建对象实例的任务交给ioc容器或者框架,使得应用代码只需要直接使用实例,这就是ioc。

相对于ioc而言,依赖注入的确更加准确的描述了这种设计理念。所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。

 

下面来看看ioc在spring中的实现:
任何重要的系统都需要至少两个相互合作的类来完成业务逻辑。通常,每个对象都要自己负责得到它的合作(依赖)对象。你会发现,这样会导致代码耦合度高而且难于测试。使用ioc,对象的依赖都是在对象创建时由负责协调系统中各个对象的外部实体提供的,这样使软件组件松散连接成为可能。

 

下面示意了spring ioc应用,步骤如下:
定义Action接口,并为其定义一个excute方法,以完成目标逻辑。根据 programming to an interface, not an implementation的原则,这里首先将业务对象抽象成接口,正是为了实施这个原则。

 

类UpperAction实现action接口,在此类中,定义一个String型的域message,并提供相应的setter和getter方法,实现的excute方法如下:

public String excute(String str){
return (getMessage()+str).toUpperCase();
}

 

编写spring配置文件(bean.xml):

<beans>
  <bean id="TheAction" class="net.chen.spring.qs.UpperAction">
        <property name="message"><value>Hello</value></property>
  </bean>
</beans>

 

测试代码:

public void testQuickStart(){
        ApplicationContext ctx = new FileSystemApplicationContext("bean.xml");
        Action a = (Action)ctx.getBean("TheAction");
        System.out.println(a.excute("Rod Johnson"));
}

 

上面的测试代码中,我们根据bean.xml创建了一个ApplicationContext实例,并从此实例中获取我们所需要的Action实现,运行测试代码,我们看到控制台输出:

HELLO ROD JOSNSON

 

针对以上实例的分析:
1、我们自己编写的组件并不需要实现框架指定的接口(这里指的框架是spring框架),因此可以轻松的将组件从spring中脱离,甚至不需要任何修改。
2、组件间的依赖关系减少,极大的改善了代码的可重用性。spring的依赖注入机制,可以在运行期为组件配置所需资源,而无需在编写组件代码时就加以指定,从而在相当程度上降低了组件之间的耦合。

 

总结:从以上代码可以看到,借助于接口将具体对象注入容器,然后利用spring的代码可以轻易的取得所需要的具体对象。

以前写程序,都是自己手工需要某个对象然后声明其实例,现在对象的获得是通过sping来控制,从spring的ioc容器中取得所需要的具体对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值