springIOC和DI的意义

springIOC和DI的意义:

实现了完全的面向接口编程

document案例

MVC案例

Document案例-使用构造方法的依赖注入

接口

public interface Document {
    void read();
    void write();
}

实现类1

public class WordDocument implements Document {
    public void read() {
        System.out.println("word read");
    }
    public void write() {
        System.out.println("word writer");
    }
}

实现类2

public class PDFDocument implements Document {
    public void read() {
        System.out.println("pdf read");
    }
    public void write() {
        System.out.println("pdf write");
    }
}

工具类

public class DocumentManager {
    public Document document;
    public DocumentManager(Document document){
        this.document = document;
    }
    public void read(){
        document.read();
    }
    public void write(){
        document.write();
    }
}

测试

public class Test1 {
    @Test
    public void test1(){
        ApplicationContext context = new  ClassPathXmlApplicationContext("applicationContext.xml");
        DocumentManager manager = (DocumentManager) context.getBean("DocumentManager");
        manager.read();
        manager.write();
    }
}

spring配置文件applicationContext.xml

<bean id="DocumentManager" class="spring_ioc_di_document.DocumentManager">
<constructor-arg index="0" ref="pdfDocument"></constructor-arg></bean>
<bean id="wordDocument" class="spring_ioc_di_document.WordDocument"></bean>
<bean id="pdfDocument" class="spring_ioc_di_document.PDFDocument"></bean>

mvc案例-使用set方式依赖注入

dao接口

public interface PersonDao {
    public void read();
}

dao实现

public class PersonDaoImpl implements PersonDao  {
    public void read() {
        System.out.println("personDao read");
    }
}

service接口

public interface PersonService {
    public void read();
}

 

service实现

public class PersonServiceImpl implements PersonService{
    PersonDao persondao;
    public PersonDao getPersondao() {
        return persondao;
    }
    public void setPersondao(PersonDao persondao) {
        this.persondao = persondao;
    }
    @Override
    public void read() {
        persondao.read();
    }
}

测试

public class Test2 {
@Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        PersonAction action = (PersonAction) context.getBean("PersonAction");
        action.read();
    }
}

spring配置文件applicationContext.xml

<bean id="personDao" class="spring_mvc.PersonDaoImpl"></bean>                         
<bean id="personService" class="spring_mvc.PersonServiceImpl" >
<property name="persondao" >
<ref bean="personDao"/>
</property>
<bean id="PersonAction" class="spring_mvc.PersonAction">
<property name="service">
<ref bean="personService"/>
</property>
</bean>
时间: 2024-08-13 17:44:37

springIOC和DI的意义的相关文章

Java Spring-IOC和DI

2017-11-06 16:30:25 IOC:控制反转,将对象的创建权交由Spring管理.IOC底层原理:工厂类+反射+配置文件,创建对象交由工厂类完成. DI(Dependency Injection):依赖注入,在Spring创建对象的过程中,把对象依赖的属性注入到类中. IOC装配Bean Spring框架Bean实例化的方法: * 构造方法实例化(默认无参数构造):主要采用这种方法* 静态工厂实例化* 实例工厂实例化 配置文件: <?xml version="1.0"

SpringIOC和DI

1.Spring的概念 Spring的绿草丛(一) Spring轻量级框架, Java EE的春天,当前主流框架目标使现有技术更加易用,推进编码最佳实践内容IoC容器AOP实现数据访问支持简化JDBC/ORM 框架声明式事务Web集成 Spring的绿草丛(二) Spring设计理念Spring是面向Bean的编程Spring 两大核心技术控制反转(IoC:Inversion of Control ) /依赖注入(DI:Dependency Injection )面向切面编程(AOP:Aspec

Spring_day02

:构造方法注入 index="参数的位置 从0开始" name="参数的名称" ref="对象的引用" value="具体的赋值" 二者不能同时出现 <constructor-arg index="0" name="name"  value="TOM猫"></constructor-arg> 说明: 1.通过构造方法为属性赋值时,可以使用ind

简单模拟SpringIOC工作机制流程开发

紧接上一篇文章<轻松了解Spring中的控制反转和依赖注入>讲解了SpringIOC和DI的基本概念,这篇文章我们模拟一下SpringIOC的工作机制,使我们更加深刻的理解其中的工作.再上代码之前我们先来看看几个类的设计目的. BeanFactor接口:在Spring源码中的定义是:持有对一定数量的Bean的定义,同时每个Bean都被唯一标识的对象(类),需要实现这个接口.根据对Bean的定义,该工厂将会返回一个包含Bean定义的对象的独立实例(原型设计模式),或者单例共享(一个不错的单例设计

轻松了解Spring中的控制反转和依赖注入(二)

紧接上一篇文章<轻松了解Spring中的控制反转和依赖注入>讲解了SpringIOC和DI的基本概念,这篇文章我们模拟一下SpringIOC的工作机制,使我们更加深刻的理解其中的工作. 类之间的结构图如下 以下是代码 BeanFactor接口:在Spring源码中的定义是:持有对一定数量的Bean的定义,同时每个Bean都被唯一标识的对象(类),需要实现这个接口.根据对Bean的定义,该工厂将会返回一个包含Bean定义的对象的独立实例(原型设计模式),或者单例共享(一个不错的单例设计模式,)范

[Java面试一]面试复习大纲.

一.Java基础部分 (搞定所有技术之后才考虑复习的技术点) 1.数组中的排序问题(笔试或者机试,前者可能性更大) 2.面向对象的理解 3.集合相关的问题,比如hashmap跟hashtable的区别.搞清楚每个集合对象的特性就欧了. 4.多线程启动方式,以及产生死锁的原因和解决办法[多线程问题不是很常问,有精力就复习这块内容] 5.IO流,了解常见的几个流对象以及基本的流操作即可,被机试的可能性比较小. 二.Web基础 (1年工作经验者需要重点复习的技术点) 1.http协议(定义.常见的请求

Spring笔记2

IOC/DI简介: DI为依赖注入,通常来说bean是自己控制对象的实例化等工作(即依赖关系).但在Spring容器中,创建bean的同时完成了注入依赖关系的工作. IOC为控制反转,其与DI的意义类似,即本来bean自己控制实例化,现在成了创建bean时便完成了实例化等依赖工作,所以称为控制反转. ”依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它对象)只会通过以下几种方式来实现:构造器的参数.工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性.因此,容器的工作就

清北学堂模拟day4 传球接力

[问题描述]n 个小朋友在玩传球. 小朋友们用 1 到 n 的正整数编号. 每个小朋友有一个固定的传球对象,第 i 个小朋友在接到球后会将球传给第 ai个小朋友, 并且第 i 个小朋友与第 ai个小朋友之间的距离为 di.一次传球接力是这样进行的:由一个小朋友发球,将球传给他的传球对象,之后接到球的小朋友再将球传给自己的传球对象,如此传球若干次后停止. 期间,包括发球者在内,每个小朋友至多只能拿到球一次. 一次传球接力的总距离是每次传球的距离的总和.小朋友们想进行一次总距离最长的传球接力,现在需

spring_01

1.框架 1.框架是解决什么问题的? 1.框架是用来解决代码冗余的问题 2.有利于团队的协作开发 3.框架是用来解决低耦合和高内聚的问题 4.解决健壮性和安全性 2.STRUTS2和hibernate分别解决框架什么问题的? struts2是一个mvc框架 hibernate是解决数据库的操作:ORMAPPING 3.如何选择一种更好的框架? 1.应该选择一个大众化的产品 2.健壮性和安全性都比较好的产品 3.有利于团队开发 4.还在维护阶段的2.spring 1.说明 是一个架构性的框架 1.