spring的核心思想,控制反转

 spring三大核心思想之一:IOC,控制反转。

         想理解什么叫控制反转,首先要理解什么叫控制没有反转。

         看下面代码:

         首先有一个接口类:

    package testSpring.business.iface;  
      
    /** 
     * INetPlay : 打印接口,对象需要实现这个接口来实现打印该对象的功能 
     *  
     * @author xuejupo jpxue@travelsky.com 
     *  
     *         create in 2016-2-16 上午9:16:52 
     */  
      
    public interface IPrint {  
        /**   
        * onLine:  对象需要实现这个方法来实现打印对象的功能 
        * void  返回类型    
        */  
        String printObject();  
    }  

然后有两个实现类:

    package testSpring.business.bean;  
      
    import org.springframework.stereotype.Repository;  
      
    import testSpring.business.iface.IPrint;  
      
    /**   
     *  UserBean :  
     * @author xuejupo  jpxue@travelsky.com  
     * create in 2016-2-16 上午9:22:39     
     */  
    public class UserBean implements IPrint{  
        @Override  
        public String printObject() {  
            // TODO Auto-generated method stub  
            System.out.println("打印对象UserBean:");  
            return "abc";  
        }  
      
    }  


现在,我想打印第一个实现类,客户端代码如下:

IPrint print = new UserBean();  
print.printObject();
很简单的代码,这时候对第二个实现类UserBean对象的创建,是由客户端完成的。相当于客户端控制着UserBean对象的创建。代码自然没什么问题,执行结果如下:
打印对象UserBean:
很正常的执行结果。但是这时候我想修改一下,打印第二个实现类,这时候就需要修改代码了。对于正式的系统来说,修改代码毕竟是不符合开闭原则,又比较麻烦的事。所以就想能不能用配置文件来代替代码的修改。这时候就需要用到spring的控制反转:对继承了接口IPrint的具体实现类的具体对象的创建,不依赖于调用他的客户端代码,而将控制权交给spring(其实就是xml文件),这就是控制反转。

    下面是xml文件(注册bean,将):

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"  
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:p="http://www.springframework.org/schema/p"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
        http://www.springframework.org/schema/tx  
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd  
        http://www.springframework.org/schema/aop    
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd   
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">  
        <!-- 注册bean --!>  
        <bean id="userBean" class="testSpring.business.bean.UserBean" />  
      
    </beans>  
测试代码如下:
    //读取配置文件(将配置文件中的bean加载进内存)  
            ApplicationContext ctx = new ClassPathXmlApplicationContext("/testSpring/resources/applicationContext.xml");  
            //获取的实例    
            IPrint bean=(IPrint)ctx.getBean("userBean");    
            //调用方法    
            bean.printObject();  
结果:
打印对象UserBean:
如果想要打印另一个实现类,只要修改配置文件
<bean id="userBean" class="testSpring.business.bean.MyBean" /> 

结果:
打印对象MyBean: 

以上文章转载一个人,如有侵权,请告知!!!















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值