一、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. CSS中如何把Span标签设置为固定宽度

    一.形如<span>ABC</span>独立行设置SPAN为固定宽度方法如下: span {width:60px; text-align:center; display:blo ...

  2. js中子页面父页面方法和变量相互调用

    (1)子页面调用父页面的方法或者变量: window.parent.方法()或者变量名window.parent相当于定位到父页面 之后的操作和在父页面中写代码一样写 window.parent.aa ...

  3. CodeForces 709B Checkpoints 模拟

    题目大意:给出n个点的坐标,和你当前的坐标,求走过n-1个点的最短路程. 题目思路:走过n-1个点,为了使路程更短,那么不走的点只可能第一个点或最后一个点.模拟就行了,比较恶心. #include&l ...

  4. boost库之graph入门

    #include <boost/graph/undirected_graph.hpp> #include <boost/graph/adjacency_list.hpp> us ...

  5. gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer

    英文:https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Optimize-Options.html#Optimize-Options 少优化->多优化: ...

  6. Hrbustoj 2266 Legendary Weights(辗转相除求最大公约数)

    题意:这个题目的意思是给出一些砝码,问我们能不能根据这些砝码称量出任意重量的物品,最大公约数并不难求,难的在于如何建立这个模型. 思路:根据数论的基础知识,两个数a,b的最大公约数是a*x + b*y ...

  7. mplayer最全的命令

    前段时间做过qt内嵌mplayer的一个小程序,感觉mplayer还行不过不支持打开图片感觉有点无力.话不多说上代码: QString path="d:/1.mkv"; QWidg ...

  8. java 集合大家族

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  9. Dev之ChartControl控件(一)

    ChartControl控件主要包括Chart Title,Legend,Annotations,Diagram,Series五部分:如图: 1.  用RangeControl控件控制ChartCon ...

  10. eclipse快捷键(转载)

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...