zoukankan      html  css  js  c++  java
  • 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 jpxue@travelsky.com 
    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  jpxue@travelsky.com  
    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  jpxue@travelsky.com  
    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文件中。

    个人分类: 转载
    抱怨没有用,只能靠自己
  • 相关阅读:
    范仁义网站刷题教程
    心得体悟帖---200115(对人要好)(浪费时间可耻)
    心得体悟帖---200114(解决问题啊)(解决问题)
    legend3---laravel缓存操作基本使用实例
    JS动态修改页面EasyUI datebox不生效、EasyUI动态添加Class、EasyUI动态渲染解析解决方案
    Java正则表达式入门
    Android中scrollview的scrollto方法不起作用的办法
    Android中监听ScrollView滑动停止和滑动到底部
    视频
    Android Scroller类的详细分析
  • 原文地址:https://www.cnblogs.com/mybatis/p/8985276.html
Copyright © 2011-2022 走看看