码迷,mamicode.com
首页 > 编程语言 > 详细

Spring IOC总结

时间:2018-02-27 16:06:11      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:java

IOC

控制反转,是一种设计思想,意味着将设计好的对象交给Ioc容器控制,而不是传统的在对象的内部直接控制。

IOC容器把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象。

DI

依赖注入,组件之间的依赖关系由容器在运行期间决定。

Ioc容器注入应用程序某个对象,它所需要的外部资源(包括对象,资源,常量数据)。

Spring Ioc容器

具有依赖注入功能的容器。负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。

SpringBeanFactoryIoc容器的实际代表者。BeanFactory接口提供了IoC容器的基本功能。

Spring Ioc容器通过读取配置文件中的配置元数据,通过元数据对应用中各个对象进行实例化及装配。

1 xml配置文件进行配置元数据(一般使用)

2 基于注解

3 基于java文件

Spring Ioc容器管理的对象:Bean

Bean就是由Spring容器初始化、装配及管理的对象,此外bean与应用程序中的其他对象没有什么区别.

Bean在容器内部由BeanDefinition对象表示。

BeanDefinition

全限定类名(FQN):用于定义Bean的实现类;(必须的)

Bean行为定义:包括作用域(单例、原型创建)、是否惰性初始化及生命周期等;

Bean创建方式定义:说明是通过构造器还是工厂方法创建Bean

Bean之间关系定义:即对其他bean的引用,也就是依赖关系定义,也就是依赖注入。

Bean的作用域:

1. singleton”(单例,通过单例缓存池实现)

2. prototype”(原型,每次创建全新的bean

3. 另外提供request”、“session”、“global session”三种web作用域;

Spring Ioc容器工作流程:(基于xml配置)

1. 准备配置文件

2. Ioc容器进行解析元数据,创建,组装bean

3. 客户端实例化Ioc容器,从容器中获取需要的bean

Spring IoC容器实例化Bean

根据Bean定义里的配置元数据使用反射机制来创建Bean

1. 使用无参构造器

2. 静态工厂

3. 实例工厂

Spring IoC容器注入依赖资源的方式:

1. 构造器注入。(构造器方式,静态工厂方式,实例工厂方式都可以)

通过在<bean>中配置构造器实现,构造器参数就是依赖。

配置文件中三种表示参数的方式:参数索引,参数类型,参数名称

public HelloImpl3(String message, int index) {

        this.message = message;

        this.index = index;

    }

<!-- 通过构造器参数索引方式依赖注入 -->

<bean id="byIndex" class="cn.javass.spring.chapter3.HelloImpl3">

<constructor-arg index="0" value="Hello World!"/>

    <constructor-arg index="1" value="1"/>

</bean>

<!-- 通过构造器参数类型方式依赖注入 -->

<bean id="byType" class="cn.javass.spring.chapter3.HelloImpl3">

   <constructor-arg type="java.lang.String" value="Hello World!"/>

   <constructor-arg type="int" value="2"/>

</bean>

<!-- 通过构造器参数名称方式依赖注入 -->

<bean id="byName" class="cn.javass.spring.chapter3.HelloImpl3">

   <constructor-arg name="message" value="Hello World!"/>

   <constructor-arg name="index" value="3"/>

</bean>

2. Setter注入

通过在通过构造器,静态工厂,实例工厂实例好bean后,通过调用bean类的setter方法进行注入依赖。

只有一种方式,根据名字注入。

//setter方法

    public void setMessage(String message) {

        this.message = message;

    }

    public void setIndex(int index) {

        this.index = index;

    }

<bean id="bean" class="cn.javass.spring.chapter3.HelloImpl4">

        <property name="message" value="Hello World!"/>

        <property name="index"><value>1</value></property>

</bean>

Spring IoC容器注入集合、数组、字典

Spring不仅能注入简单类型数据,还能注入集合(CollectionSetList)类型、数组(Array)类型、字典(Map)类型数据、Properties类型数据。

自动装配

自动装配就是指由Spring来自动地注入依赖对象,无需人工参与。

自动装配的好处是减少构造器注入和setter注入配置,减少配置文件的长度。自动装配通过配置<bean>标签的 “autowire”属性来改变自动装配方式。

Eg.<bean id="bean" class="cn.javass.spring.chapter3.bean.HelloApiDecorator"

     autowire="byName"/>

四种可选值:no”、“byName ”、“byType”、“constructor

如果一个bean有很多setter注入,通过“byName”方式能减少很多<property>配置。


Spring IOC总结

标签:java

原文地址:http://blog.51cto.com/13580976/2073508

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!