Spring三大核心思想一:IOC

Spring三大核心思想一:IOC

 首先,spring最核心,最基础的概念是什么?将spring类比java,java最核心,最基础的概念就是object了。java中,所有的操作都是针对object的(基础类型除外),java中,一切皆对象,一切都是object。类比下来,spring中最基础的概念是bean。在spring中,所以的类都可以认为是一个bean。(个人认为)在spring中的所有文件,都可以认为是注册了的bean和未注册的bean。  spring中所有操作都是针对bean的操作。自然,spring的三大核心思想中操作的对象,也是bean。

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

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

         看下面代码:

         首先有一个接口类:

Java代码   收藏代码
  1. package testSpring.business.iface;  
  2.   
  3. /** 
  4.  * INetPlay : 打印接口,对象需要实现这个接口来实现打印该对象的功能 
  5.  *  
  6.  * @author xuejupo [email protected] 
  7.  *  
  8.  *         create in 2016-2-16 上午9:16:52 
  9.  */  
  10.   
  11. public interface IPrint {  
  12.     /**   
  13.     * onLine:  对象需要实现这个方法来实现打印对象的功能 
  14.     * void  返回类型    
  15.     */  
  16.     String printObject();  
  17. }  

     然后有两个实现类:

Java代码   收藏代码
  1. package testSpring.business.bean;  
  2.   
  3. import org.springframework.stereotype.Repository;  
  4.   
  5. import testSpring.business.iface.IPrint;  
  6.   
  7. /**   
  8.  *  UserBean :  
  9.  * @author xuejupo  [email protected]  
  10.  * create in 2016-2-16 上午9:22:39     
  11.  */  
  12. public class UserBean implements IPrint{  
  13.     @Override  
  14.     public String printObject() {  
  15.         // TODO Auto-generated method stub  
  16.         System.out.println("打印对象UserBean:");  
  17.         return "abc";  
  18.     }  
  19.   
  20. }  
Java代码   收藏代码
  1. package testSpring.business.bean;  
  2.   
  3. import org.aspectj.lang.annotation.Aspect;  
  4. import org.aspectj.lang.annotation.Pointcut;  
  5. import org.springframework.stereotype.Service;  
  6.   
  7. import testSpring.business.iface.IPrint;  
  8.   
  9. /**   
  10.  *  MyBean :  
  11.  * @author xuejupo  [email protected]  
  12.  * create in 2016-2-16 上午10:11:43     
  13.  */  
  14. public class MyBean implements IPrint{  
  15.   
  16.     @Override  
  17.     public String printObject() {  
  18.         // TODO Auto-generated method stub  
  19.         System.out.println("打印对象MyBean:");  
  20.         return null;  
  21.     }  
  22. }  

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

Java代码   收藏代码
  1. IPrint print = new UserBean();  
  2. print.printObject();  

       很简单的代码,这时候对第二个实现类UserBean对象的创建,是由客户端完成的。相当于客户端控制着UserBean对象的创建。代码自然没什么问题,执行结果如下:

Java代码   收藏代码
  1. 打印对象UserBean:  

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

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

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  8.     http://www.springframework.org/schema/tx  
  9.     http://www.springframework.org/schema/tx/spring-tx-3.2.xsd  
  10.     http://www.springframework.org/schema/aop    
  11.     http://www.springframework.org/schema/aop/spring-aop-3.2.xsd   
  12.     http://www.springframework.org/schema/context  
  13.     http://www.springframework.org/schema/context/spring-context-3.2.xsd">  
  14.     <!-- 注册bean --!>  
  15.     <bean id="userBean" class="testSpring.business.bean.UserBean" />  
  16.   
  17. </beans>  

       其中,文件头那一大坨类似网址的东西,我没测试过是啥,网上说是spring的标签规范检验文件的路径。首先他会查找你本地的标签规范文件(一般都有),如果本地没找到就会到他的url里面去找。

        测试代码如下:

Java代码   收藏代码
  1. //读取配置文件(将配置文件中的bean加载进内存)  
  2.         ApplicationContext ctx = new ClassPathXmlApplicationContext("/testSpring/resources/applicationContext.xml");  
  3.         //获取的实例    
  4.         IPrint bean=(IPrint)ctx.getBean("userBean");    
  5.         //调用方法    
  6.         bean.printObject();  

 结果:

Java代码   收藏代码
  1. 打印对象UserBean:  

 如果想要打印另一个实现类,只要修改配置文件:

Java代码   收藏代码
  1. <bean id="userBean" class="testSpring.business.bean.MyBean" />  

 结果:

Java代码   收藏代码
  1. 打印对象MyBean:  

      很简单,将控制权交到spring的xml文件中。

个人分类: 转载

猜你喜欢

转载自www.cnblogs.com/mybatis/p/8985276.html