Spring 中的工厂( ( 容器: )与Spring Bean 相关配置
Spring 中的工厂( ( 容器: )
实现控制反转的是spring IOC容器,spring IOC容器的设计主要是基于
BeanFactory和ApplicationContext两个接口。
( BeanFactory( 过时 ):
BeanFactory由org.springframework.beans.factory.BeanFactory接口定
义,它提供了完整的IOC容器服务支持,是一个Bean的工厂,主要负责初始化各种Bean。
BeanFactory接口有多个实现类,其中比较常用的是
org.springframework.beans.factory.xml.XmlBeanFactory,该类会根据
XML配置文件中的定义来装配Bean。
在创建BeanFactory实例时需要提供XML文件的绝对路径。
ApplicationContext:
ApplicatioContext是BeanFactory的子接口,也称为应用上下文,由
org.springframework.context.ApplicatioContext接口定义,
ApplicatioContext接口除了包含BeanFactory的所有功能外,还添加了对国际
化、资源访问、事件传播等内容的支持。
ApplicatioContext 接口有两个实现类:
ClassPathXmlApplicationContext :加载类路径下 Spring 的配置文件.
FileSystemXmlApplicationContext :加载本地磁盘下 Spring 的配置文件.
BeanFactory 和 ApplicationContext 的区别: :
BeanFactory :是在 getBean 的时候才会生成类的实例.
ApplicationContext :在加载 applicationContext.xml(容器启动)时候就会
创建.
Spring Bean 相关配置 ( XML 方式)
spring可以看作一个大型工厂,用于生产和管理spring容器中的Bean。如要要使用
这个工厂生产和管理Bean,需要开发者将Bean配置在spring的配置文件中。Spring
框架支持XML和properties两种格式的配置文件,在实际开发中常用XML格式的配置
文件。
id 和 name 属性
id :Bean起个名字. 在约束中采用ID的约束:唯一.必须以字母开始,可以使用字母、
数字、连字符、下划线、句话、冒号
id:不能出现特殊字符.
<bean id=”bookAction”>
name:Bean起个名字.没有采用ID的约束.name:出现特殊字符.如果<bean>没有id
的话,name可以当做id使用.
* 整合 struts1的时候:
<bean name=”/loginAction” >
Bean的 的 实例化
在面向对象编程中,如果想要使用某个对象,需要事先实例化该对象。同样,在spring
框架中,如果想使用spring容器中的Bean,也需要实例化Bean。Spring框架实例化
Bean有3中方式,即构造方法实例化、静态工厂实例化和实例工厂实例化(其中,最常
用的方法是构造方法实例化)。
无参数的构造方法的方式:
创建BeanClass 类
配置文件:
测试代码:
效果:
静态工厂实例化的方式
创建工厂类 BeanStaticFactory :
配置文件:
测试代码
效果:
实例 工厂实例化的方式
创建工厂类 BeanInstanceFactory
配置文件:
测试代码
效果
scope 属性: Bean 的作用范围. .
在spring中不仅可以完成Bean的实例化,还可以为Bean指定作用域。spring有以下
作用域:
* singleton : 默认值,单例的.
* prototype : 多例的.
* request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request
域中.
* session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session
域中.
* globalSession :WEB 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那
么 globalSession 相当于 session.
其中,singleton 和prototype 是最常用的两种,后面几种作用域仅在Web Spring
应用程序上下文中使用。
配置文件:
测试代码:
结果:
Bean 的生命周期的配置: :
一个对象的生命周期包括创建(实例化与初始化)、使用以及销毁等阶段,在spring中,
Bean对象的生命周期也遵循这一过程。
通过配置<bean>标签上的 init-method作为 Bean的初始化的时候执行的方法,配
置 destroy-method作为 Bean的销毁的时候执行的方法。
销毁方法想要执行,需要是单例创建的 Bean而且在工厂关闭的时候,Bean才会被销
毁.
创建Bean 的实现类:
配置文件:
测试代码
结果
Bean 的属性注入: :
在spring中实现IOC容器的方法是依赖注入,依赖注入的作用是在使用spring框架创
建对象时动态将其依赖的对象(例如属性值)注入Bean组件中。spring框架的依赖注
入通常有两种实现方式,一种是使用构造方法注入,另一种是使用属性的setter方法
注入。
构造方法的方式注入属性
在使用构造方法注入方式装配Bean时,Bean的实现类需要提供带参数的构造方法,并
在配置文件中使用<bean>元素的子元素<constructor-arg>来定义构造方法的参
数。
Set 方法的方式注入属性
使用属性的setter方法注入方式装配Bean时,Bean的实现类需要提供一个默认的无
参数的构造方法,并未需要注入的属性提供对应的setter 方法,另外还需要使用
<bean>元素的子元素<property>为每个属性注入值。
对象类型的注入
注入复杂类型
复杂类型JavaBean
配置文件: