一、spring的IOC-就是怎样使用spring来创建对象

二、springDI(依赖注入)-就是怎样给属性赋值

  1. 通过set方式赋值
以下我们只需要记住两点的赋值,基本类型和引用类型的赋值
  • 基本类型都可以用value来赋值(包装类型和string类型)
  • 引用类型用ref赋值
还可以这样写
  • list类型的赋值,set的赋值与list一样
  • map类型的赋值
  • properties类型的赋值
2. 通过构造函数赋值
看看我们的person对象
这里面有两个构造函数
下面就是我们的配置文件,该怎样给person对象进行赋值呢?

总结:
上面是spring的IOC和DI,说白了神秘的spring就是获取对象和给对象中的属性进行赋值,接下来,我们正式的说神秘的面向接口编程,其实说白了上面的对象和赋值都是给AOP做铺垫的。。。

三、真正意义上的面向接口编程
    可以在一个类中引入一个接口,而给接口赋值的工作交给spring容器来做,程序员只需要在配置文件做一些配置就可以了,这样在客户端做到了完全的面向接口编程。
    是不是我在讲这句话的时候大家都是一头雾水啊。。当初我在接触面向接口编程的时候也是这样的,主不过,在研究生阶段里,学习了设计模式,让我对接口有了很好的了解和学习,这样我就对spring有很好的理解能力了。
下面一个例子来说明我们的面向接口AOP编程:
案例一
说明:
Document类是接口,DocumentManager类是我们要引入的Document接口的类,DocumentTest类是我们的测试类,下面的ExcelDocument、PDFDocument、WordDocument类分别是实现Document接口的类。

Document类

package cn.itcast.spring0909.document.spring;
public interface Document {
    public void read();
    public void write();
}

DocumentManager类

package cn.itcast.spring0909.document.spring;
/**
 * 利用spring的ioc和di做到了完全的面向接口编程
 *@author Administrator
 *
 */
public class DocumentManager {
    private Document document;
    public Document getDocument() {
        return document;
    }
    public void setDocument(Document document) {
        this.document = document;
    }
    public void read(){
        this.document.read();
    }
    public void write(){
        this.document.write();
    }
}

ExcelDocument、PDFDocument、WordDocument类

package cn.itcast.spring0909.document.spring;
public class ExcelDocument implements Document{
    @Override
    public void read() {
        // TODO Auto-generated method stub
        System.out.println("excel read");
    }
    @Override
    public void write() {
        // TODO Auto-generated method stub
        System.out.println("excel writer");
    }
}

DocumentTest类

package cn.itcast.spring0909.document.spring;
import org.junit.Test;
import cn.itcast.spring0909.utils.SpringHelper;
public class DocumentTest extends SpringHelper{
    static{
        path = "cn/itcast/spring0909/document/spring/applicationContext.xml";
    }
    @Test
    public void test(){
        DocumentManager documentManager = (DocumentManager)context.getBean("documentManager");
        documentManager.read();
    }
}

配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <!-- 把documentManager,worddocument,exceldocument,pdfdocument -->
    <bean id="documentManager" class="cn.itcast.spring0909.document.spring.DocumentManager">
        <!-- 
            document是一个接口
         -->
        <property name="document">
            <!-- 
                通过ref给接口赋值
             -->
            <ref bean="wordDocument"/>
        </property>
    </bean>

    <bean id="wordDocument" class="cn.itcast.spring0909.document.spring.WordDocument"></bean>

    <bean id="excelDocument" class="cn.itcast.spring0909.document.spring.ExcelDocument"></bean>

    <bean id="pdfDocument" class="cn.itcast.spring0909.document.spring.PDFDocument"></bean>
</beans>

我们看见代码才知道真正意义上的面向接口编程
    我们使用DocumentManager类引用接口Document,使用配置文件来获取DocumentManager对象以及给此对象的属性document来复制,这样我们在test中就没有见到使用wordDocument,仅仅见到DocumentManager,但是我们却得到了wordDocument,这就是所谓的AOP编程。
    当然DocumentManager中我们亦可以对类进行引用,虽然说是面向接口来引用,当然对类来引用的话,也不会错误。

案例二
双重的面向接口编程-一般我们使用action去调用service,用service调用dao






Spring自学教程-IOC、DI、AOP(二)的更多相关文章

  1. JAVAWEB 一一 框架整合(SSH,Spring+Struts2+Hibernate IOC/DI AOP声明式事务处理 定时任务)

    package org.springframework.orm.hibernate3; import java.io.Serializable; import java.util.List; impo ...

  2. Spring中的IOC\DI\AOP等概念的简单学习

    IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终, 所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.Spr ...

  3. 详谈 Spring 中的 IOC 和 AOP

    这篇文章主要讲 Spring 中的几个点,Spring 中的 IOC,AOP,下一篇说说 Spring 中的事务操作,注解和 XML 配置. Spring 简介 Spring 是一个开源的轻量级的企业 ...

  4. Spring核心思想Ioc和Aop (面试)

    Spring核心思想Ioc和Aop (面试) 注意: Ioc和Aop并不是Spring提出的,在Spring之前就已经存在,Spring只是在技术层面给这两个思想做了非常好的实现. 1 Ioc 1.1 ...

  5. Spring 学习教程(二): IOC/DI+AOP

    1. IOC / DI Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员 ...

  6. spring IOC DI AOP MVC 事务, mybatis 源码解读

    demo https://gitee.com/easybao/aop.git spring DI运行时序 AbstractApplicationContext类的 refresh()方法 1: pre ...

  7. spring+IOC+DI+AOP优点分析(一)

    Spring是什么: Spring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于sprin ...

  8. Spring+IOC(DI)+AOP概念及优缺点

    Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...

  9. Spring理解IOC,DI,AOP作用,概念,理解。

    IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...

随机推荐

  1. idea 端口占用

    netstat -anp | grep 8080 lsof -i:8080 查看8080端口被什么进程占用 kill (-s 9) 12903 -s 9 强制 尽快 12903 上面查出的 PID 其 ...

  2. Ugly Problem

    Ugly Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Spec ...

  3. IOS 使用动态库(dylib)和动态加载framework

    在iphone上使用动态库的多为dylib文件,这些文件使用标准的dlopen方式来使用是可以的.那相同的在使用framework文件也可以当做动态库的方式来动态加载,这样就可以比较自由的使用appl ...

  4. codeforces--376D--376F(前缀和优化)

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  5. cocos2d-x 3.x 触摸事件

    HelloWorldScene.h bool touchBegan(cocos2d::Touch*touch, cocos2d::Event*event);//触摸开始,返回bool类型 void t ...

  6. 动态规划之----我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

    利用动态规划,一共有n列,若从左向右放小矩形,有两种放置方式: 第一种:横着放,即占用两列.此时第二行的前两个空格只能横着放,所有,总的放置次数变为1+num(2*(n-2)),其中2*(n-2)代表 ...

  7. L5,no wrong numbers

    expressions: up to now,到现在为止 a great many,数量很大 in a way,在某种意义上说   words: burn,vt燃烧,vi烧毁,n灼烧 obtain,v ...

  8. 【啊哈!算法】算法6:只有五行的Floyd最短路算法

            暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程.         上图中有 ...

  9. 项目中常用js方法整理common.js

    抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...

  10. Struts2 语法--action

    xml的注释: <!--叨叨叨叨--> web.xml注释格式": <?xml version="1.0" encoding="UTF-8&q ...