码迷,mamicode.com
首页 > 其他好文 > 详细

IOC容器

时间:2020-10-05 22:20:36      阅读:28      评论:0      收藏:0      [点我收藏+]

标签:ext   cat   标识   开发   ice   全路径   cto   加载   win   

a.什么是IOC

控制反转(Inversion of Control),把对象的创建和对象之间的调用过程,交给Spring进行管理

b.目的

为了使耦合度降低

 

1.IOC底层原理

xml解析,工厂模式,反射

第一步 xml配置文件,配置创建的对象

<bean id="dao" class="class.fqqa.UserDao"></bean>

第二步 有service类和dao类,创建工厂类

_1.xml解析:String classValue = class属性值;

_2.通过反射创建对象

class clazz = class.forName(classValue);

(UserDao)clazz.newInstance;

 

2.IOC接口(BeanFactory)

_1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

_2.Spring提供IOC容器实现两种方式:(两个接口)

  __1.BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员使用

  *加载配置文件的时候不会去创建对象,在获取(使用)对象时才去创建对象

  __2.ApplicationContext:BeanFactory接口的子接口,提供更多的功能,由开发人员使用

  *加载配置文件的时候就会吧配置文件对象进行创建

  __3.ApplicationContext接口的实现类

    FileSystemXmlApplicationContext

    classPathXmlApplicationContext

3.IOC操作Bean管理

_1.什么是bean管理

bean管理指的是两个操作:Spring创建对象,Spring注入属性

_2.bean管理的基本操作

__1.创建对象:<bean id="user" class="com.fqqa.spring5.User"></bean> 创建对象的时候默认是执行无参数构造方法完成对象创建 

  id属性:唯一标识

  class属性:类全路径

  name属性(用的不多)

__2.注入属性:

  ___1.DI:依赖注入,就是注入属性

    使用set方法注入,使用有参数构造注入

      使用有参数构造进行注入

  ___2.名称空间注入 可以简化xml配置(了解即可)

__3.xml注入其他属性

  注入null值

<property name="address">
<null/>
</property>

    注入特殊符号

<property name="address">
<value><![CDATA[<<南京>>]]></value>
</property>

  __4.注入外部bean

 

注入内部bean

<bean id="emp" class="com.fqqa.spring5.bean.Emp">
<!--设置两个普通的属性-->
<property name="ename" value="lucy"></property>
<property name="gender" value="女"></property>
<!--设置对象类型属性-->
<property name="dept">
<bean id="dept" class="com.fqqa.spring5.bean.Dept">
<property name="dname" value="财务部"></property>
</bean>
</property>
</bean>

级联赋值

 

注入集合属性

<property name="maps">
<util:map>
<entry key="JAVA" value="java"></entry>
<entry key="PYTHON" value="python"></entry>
</util:map></property>

在集合里面设置对象类型值

把集合注入部分提取出来

 

Spring有两种Bean :普通bean和 工厂bean(FactoryBean)

普通bean:在配置文件中定义bean类型就是返回类型

工厂bean:在配置文件中定义bean类型可以和返回类型不一样

 

Bean的作用域

在Spring里面创建Bean实例是单实例还是多实例(是否是同一个对象)

在Spring里面默认是单实例对象

bean标签中属性scope设置实例(singleton表示单实例,prototype表示是多实例,request ,session)

bean的生命周期:

1.通过构造器创建bean实例(无参数构造器)

postProcessBeforeInitialization()

2.为bean的属性设置值和对其他的bean引用(调用set方法)

(2.5)把bean实例传递bean后置处理器的方法

postProcessAfterInitialization()

3.调用bean的初始化的方法(需要进行配置)

(3.5)把bean实例传递bean后置处理器的方法

4.bean可以使用了(对象找到了)

5.当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

bean的后置处理器,bean的生命周期就有7步(如上)

 

xml自动装配:根据指定装配规则(属性名称(byName),属性类型(byType)),spring自动将匹配的属性值进行注入

 

IOC容器

标签:ext   cat   标识   开发   ice   全路径   cto   加载   win   

原文地址:https://www.cnblogs.com/FQQa/p/13770287.html

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