struts2+hibernate3+spring2读书笔记15(核心机制-----IOC)
第16章 核心机制-----IOC
本章导读语
Spring框架所提供的众多功能之所以能成为一个整体正是建立在IoC的基础之上,IoC是Spring中极其重要的一部分,可谓是Spring的灵魂。
本章将讲述IoC的知识,包括IoC的相关概念(例如实现的基本原理、IoC容器的概念等),另外还将讲述实例化容器和bean的几种方式,以及Spring中注入的几种方式。另外,Spring一般采用XML格式来配置,因此还讲述了Spring的基本配置,并重点讲述了bean属性及构造参数的配置。
一.解说IoC的相关概念
1.建立工程(建立一个名为springioc的web工程)
2.控制反转的基本原理(IoC指的就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接控制。即组件之间的依赖关系由容器在运行期决定,下面以实例的形式演示IoC的原理)
(1)编写影片类:Movie.java
2.<beans>元素的配置
<beans>为配置文件的根元素,它可包含0到多个<bean>元素。它有如下属性:
(1)default-autowire:该属性用于指定默认的bean自动装配模式。
(2)default-dependency-check:该属性用于指定默认的依赖检查模式。
?none:不进行依赖检查。没有指定值的bean属性仅仅是没有设值。
?Simple:对于基本类型和集合(除了合作者外,比如其他的bean,所有东西)进行依赖检查。
?Object:对合作者进行信赖检查。
?All:对合作者,基本类型和集合都进行依赖检查。
(3)Default-lazy-init:该属性用于指定是否默认延迟加载。值为true表示延迟加载,为false表示非延迟加载
3.<bean>元素的基本配置
<bean>元素为<beans>元素的子元素,它用于指明Spring容器一个类以及指明它是如何配置的。它具有如下属性:
?class:该属性用于指定类的全路径,例如amigo.spring.chapter16.SMSSender.
?id:class属性对应的类在BeanFactory中的唯一标识,代码中可通过该名称在BeanFactory获取类实例。
?name:同上,如果给bean增加别名,可以通过name属性指定一个或多个id
?scope:用于指定bean的作用域。Spring支持5种作用域
?abstract:设定ApplicationContext是否对bean进行预先的初始化。
?parent:定义一个模板。
?autowire:bean自动装配模式。
?dependency-check:依赖检查模式,同<beans>元素的default-dependency-check属性。
?lazy-init:延迟加载。
?init-method:该属性用于指定初始化方法,一般用于一些资 源的初始化工作。
?destroy-method:该属性用于指定销毁方法。
?factory-bean:该属性用于指定通过实例工厂方法创建bean,class属性必须为空,factory-bean属性必须指定一个bean的名字,这个bean一定要在当前的bean工厂或者父bean工厂中,并包含工厂方法。
?factory-method:该属性用于设定工厂类的工厂方法。
?depends-on:该属性用于指定Bean依赖关系。一般情况下无需设定。通过depends-on指定其依赖关系可保证在此Bean加载之前,首先对depends-on所指定的资源进行加载。
4.<property>元素的基本配置
<property>属性为<bean>元素的子元素,它用于设轩置一个属性。
?name:该属性用于指定属性的名称。
?value:用于指定bean的属性值。
?ref:指定了属性对BeanFactory中其他Bean的引用关系。
三.实例化容器的几种方法
1.创建包amigo.sqring.ioc.container
2.编写辅助测试Bean:HelloBean.java
7.使用实例工厂方法实例化(bean3.xml)
最后运行结果为:
使用构造器实例化,username=null,password=null
使用静态工厂方法实例化,username=amigo1,password=123
使用实例工厂方法实例化,username=amigo2,password=123456
五.注入方式---构造子注入
1.建立包目录
2.编写短信类SMSSender.java(SMSSender1.java类用于发送短信,所需要的参数采用构造函数的方式注入,本例只是演示Spring构造函数注入的方式,所以发送短信的方法并没有给出实现,该类的代码如下所示:)
3.编写测试类:
(2)编写配置文件:Beanproperties.xml
(2)编写依赖类:Dept.java
3.内部bean(内部bean是指在一个bean的<property/>或<constructor-arg/>元素中使用<bean/>元素定义的bean)
(1)编写测试类:OuterBean.java
(2)编写内部bean类:InnerBean.java
(3)修改配置文件:beanproperties.xml