spring 二ioc di

作者: 6ab94b6b3878 | 来源:发表于2017-05-10 22:35 被阅读79次

spring一 简介
spring三 bean的生命周期以及作用域
spring四 aop


spring的核心就是ioc和di,对于这两个概念我们这里还是再给出一遍或者可以看spring一 简介

ioc(inverse of control) 控制反转,我们现在的创建对象实例都是通过new来创建,这样这个对象的创建权在于程序,但在spring中这个创建权给了spring,由spring来创建对象,这就是控制反转。

di(dependency injection)依赖注入,依赖注入就是在创建对象的时候注入对象的属性值。

对于ioc的理解,通过spring一的例子(创建对象的过程)应该有了一定的了解,那么我们我们就通过上次的module来看看ioc。


ioc 控制反转

我们在Test.java中通过new来创建一个对象,并通过set方法赋予name值。

public static void main(String[] args){
        FirstDemo firstDemo = new FirstDemo();
        firstDemo.setDemoName("普通demoName");
        firstDemo.printName();
}

这个方法应该都没问题,那么我们接下来用spring配置bean的方法取得对象。
在applicationContext.xml中配置bean

<bean id="firstDemo" class="cn.pwc.demo.FirstDemo">
     <property name="demoName" value="spring的demoName"/>
</bean>

id就是我们spring创建的对象的名称,后面在获取对象的时候通过getBean("id")方法获取到我们的对象。class是我们的类,指定这个bean创建的是哪个对象。property是我们的属性值,这里可以赋予类中指定属性的值,name指定类中的哪个属性,value就是赋予的值(value可以用ref替换,ref将会在di介绍里出现)。比如我们这里,创建一个名为firstDemo的FirstDemo对象,该对象的demoName值为springName。bean就创建好了,接下来去获取。

public static void main(String[] args){
     //获取spring容器的对象
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    //取到对象
    FirstDemo firstDemo = (FirstDemo) applicationContext.getBean("firstDemo");
    //执行方法
    firstDemo.printName();
}

这里没什么好说的,看注释就行。
这样我们也可以得到对象并执行对象的方法,现在再回想一下ioc的定义(控制反转),对象的创建权是不是交给了spring了。

di 依赖注入

至于依赖注入,其实我们已经接触到了,比如上面我们在配置bean的时候,properties不就对一个属性注入了一个值吗。那么怎么来看这个依赖。
我们在springDemo下新建一个module,取名为di。


di

创建如图的项目结构,demo包下新建三个java文件,firstDemo和secondDemo里面有两个属性,name和thirdDemo。

public class FirstDemo {

    private String name;

    private ThirdDemo td;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ThirdDemo getTd() {
        return td;
    }

    public void setTd(ThirdDemo td) {
        this.td = td;
    }

    public void printName(){
        System.out.println("名字是 " + name);
        td.printName();
    }
}

而thirdDemo只有name属性。最主要来看bean的配置。

<bean id="firstDemo" class="cn.pwc.demo.FirstDemo">
   <property name="name" value="第一个demoName"/>
   <property name="td" ref="thirdDemo"/>
</bean>

<bean id="secondDemo" class="cn.pwc.demo.SecondDemo">
    <property name="name" value="第二个demoName"/>
</bean>

<bean id="thirdDemo" class="cn.pwc.demo.ThirdDemo">
    <property name="name" value="第三个demoName"/>
</bean>

这里我们给firstDemo两个属性值都注入了值,而secondDemo只注入了name值,这样也就意味着secondDemo并没有拿到thirdDemo的对象也就不能调用thirdDemo的方法。而我们的firstDemo注入了thirdDemo对象,通过ref来进行注入,属性的值是一个具体对象的我们就要通过ref来注入。现在我们就可以说firstDemo依赖与thirdDemo了,你现在能删thirdDemo这个bean吗,不能。因为有一个对象在创建时需要将thirdDemo对象实例注入给他的属性,我们现在就可以说firstDemo依赖于thirdDemo了。通过test.java就可以看出确实firstDemo拿到了thirdDemo对象而secondDemo并没有拿到。


test

下面说三个不是很确定的点,都是我自己这么认为的,不知道对错。
1 spring如何通过配置创建我们想要得到的实例
通过java的反射机制来创建这些的bean实例
2 注入是通过bean的set方法注入的
当我们不写属性的set方法时我们是注入不进去属性值的
3 applicationContext这个容器到底是什么样的,可以让我们拿到bean
他应该像是一个hash表,有一个key和value,我们通过key值来取得value。

源码地址:springDemo

相关文章

  • spring 那点事

    Spring核心功能 DI(IOC) 何谓DI(IOC) DI(依赖注入)是spring的核心功能之一。Depen...

  • 2018-05-01

    spring源码分析(二) 目录五、Spring 源码解读--5.1、什么是IOC/DI--5.2、Spring ...

  • “王大锤の非诚勿扰” —— Spring IoC / DI 思想

    本文参考地址: 《spring Ioc/DI的理解》 《关于Spring IOC (DI-依赖注入)你需要知道的...

  • spring 官网 ioc- 1

    spring ioc container 只是转载bean的容器, IoC , DI, DI的方式 throug...

  • spring IOC&DI

    spring IOC&DI spring IOC IOC用处:解耦,降低程序间的依赖关系。 spring搭建基于x...

  • Spring2-Spring IoC容器和bean

    Spring IoC容器和bean Spring IoC容器 IoC也称为依赖注入(DI),可以帮我们创建对象 管...

  • spring 二ioc di

    spring一 简介spring三 bean的生命周期以及作用域spring四 aop spring的核心就是io...

  • Spring:源码解读Spring IOC原理

    一.什么是Ioc /DI ioc容器:主要是完成了对象的创建和依赖的管理注入 二.Spring IoC体系结构 (...

  • @Autowired 和 @Resource 注解

    Spring 利用依赖注入(DI), 为 Spring IoC 容器赋值。@Autowired 是 Spring ...

  • 初见spring

    框架 spring IOC AOP 配置文件 IOC/DI 依赖注入(Dependecy Injection) ...

网友评论

    本文标题:spring 二ioc di

    本文链接:https://www.haomeiwen.com/subject/srpetxtx.html