spring三大核心学习(一)---控制反转

     记得当年大学时候,java的企业级框架还是ssh的天下(spring,struts和hibernate),但是现在,感觉spring已经完全把那两个框架甩在后边了。用spring的人越来越多,用struts的人比原来少多了,用hibernate的就更少了。毕竟现在it人才流动性太大了,招人上来上手很重要,谁知道他什么时候就跑了。。(hibernate太复杂了)。

     我最近只看spring,所以只说spring。

     记得当初面试的时候被问到过spring的三大核心思想。相信多数javaer都被问到过这个问题。绝大多数人应该都知道这三个核心思想是什么:控制反转,依赖注入和面向切面编程。

     印象很深,因为当时对spring不熟,所以被面试官狠狠得鄙视了。。。这几天把这三个功能点复习一下。

     以下内容全是个人理解(免责声明o(∩_∩)):

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

     spring三大核心思想之一:IOC,控制反转。
     想理解什么叫控制反转,首先要理解什么叫控制没有反转。
     看下面代码:
     首先有一个接口类:
 package testSpring.business.iface;

/**
 * INetPlay : 打印接口,对象需要实现这个接口来实现打印该对象的功能
 *
 * @author xuejupo [email protected]
 *
 *         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  [email protected]
 * 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";
    }

}
package testSpring.business.bean;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Service;

import testSpring.business.iface.IPrint;

/**
 *  MyBean :
 * @author xuejupo  [email protected]
 * create in 2016-2-16 上午10:11:43
 */
public class MyBean implements IPrint{

    @Override
    public String printObject() {
        // TODO Auto-generated method stub
        System.out.println("打印对象MyBean:");
        return null;
    }
}

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

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>

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

//读取配置文件(将配置文件中的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" />

理解起来应该算挺容易的,就是将创建哪个具体对象的控制权交到spring的xml文件中,这就是简单的控制反转了。

 
时间: 2024-12-21 05:48:03

spring三大核心学习(一)---控制反转的相关文章

Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口.当系统需要重构时,代码的改写量将大大减少. 上面所说的一切都得宜于Spring的核心机制,依赖注入.依赖注入让bean与

Spring核心(ioc控制反转)

 IoC,Inversion Of Control 即控制反转,由容器来管理业务对象之间的依赖关系,而非传统方式中的由代码来管理. 其本质,即将控制权由应用程序代码转到了外部容器,控制权的转移就是所谓的反转,其带来的最大的好处是降低了业务对象之间的依赖程度,即实现了解耦. Spring的IoC容器主要使用DI(Dependency Injection,依赖注入)方式实现的.不需要主动查找,对象的查找.定位和创建全部由容器管理,容器会将符合依赖关系的对象通过属性(setter等)或者构造函数传

spring 依赖注入(DI)与控制反转(IOC)

Spring目前所拥有的功能非常多,常用的DI和MVC已经是开发中的家常便饭,而且使用Spring来管理其它的框架也是习以为常的事情.Spring在项目中的最大作用就是为了解耦,降低项目整体的耦合度,尽可能做到低耦合.Spring的核心就是IOC和AOP.IOC控制反转创建bean对象,通过DI依赖注入来完成bean对象的数据封装. IOC是一种开发思想,DI是一种开发实现 虽然业界经常提到什么IOC,什么DI,其实都是一个意思,只是IOC是Spring提出的设计开发思想,而DI是代码实现方式.

【小知识】小例子说明Spring的核心思想之一:控制反转。

装饰设计模式:使用频率很高!!! 目的:改写已存在的类的某个方法或某些方法,使方法增强了.装饰设计模式(也即包装设计模式) 口诀: 1.编写一个类,实现与被包装类相同的接口.(这样他们就具备了相同的行为) 2.定义一个被包装类类型的变量,即引用,用于接收被包装的对象. 3.定义构造方法,把被包装类的对象注入,给被包装类变量赋值.(因为后面我要用该包装类的对象,所以要注入进来) 4.对于需要改写的方法,写自己的代码.(若重写方法的时候,还需要用到其他类的对象,那我们就在构造方法中继续注入即可) 5

Spring学习之==&gt;IOC【控制反转】

一.概述 Spring的三大核心思想:IoC(控制反转),DI(依赖注入),AOP(面向切面编程).本问讲着重介绍一下控制反转. 何谓控制反转:Spring 通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. 通俗的讲,控制权由代码中转到了外部容器,控制权的转移,就是所谓反转.也

SSH学习八 Spring框架 -- 控制反转实现Ioc

Spring的核心是控制反转(IoC)和面向切面(AOP)控制反转--Spring通过一种称作控制反转(IoC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反--不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. (以上来自百度百科 http://baike.baidu.com/link?url=_egsZcZDKcHvLJtDqFTZIR3e6lH1G-p

Spring 框架学习—控制反转(IOC)

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,主要用于降低模块之间耦合度的框 架,实际上Spring除了能够通过IoC降低模块之间的耦合度外还提供了其它功能. 1.IoC的基础知识以及原理: IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终 实现

Spring 控制反转

具体内容 Spring 开发框架之中有几个概念DI&IOC.AOP.那么要想理解Spring就必须首先理解控制反转的核心意义是什么? 对于IOC来讲如果直接进行文字的描述,听起来会很麻烦.下面直接通过一套具体案例来分析什么IOC的核心本质. IOC分析场景 实际上这样的操作过程就属于最初的开发阶段模式.如果换到程序的开发之中,那么可能最直白的做法就相当于是使用new来进行对象的产生. package cn.wnh.service; public interface IMessageService

spring(3)------控制反转(IOC)/依赖注入(DI)

一,spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理. 所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器. 没有控制反转这种模式前,你创建一个对象,在什么地方用,你得单独通过关键字new出来用, 但现在可以不用这样,你把new对象的权利交给spring配置文件,通过配置文件来'new', 就是权利的反转,你以前干的事