标签:装配bean
在XML文件中声明Bean时,Spring配置文件的根元素来源于Spring beans命名空
间所定义的<beans>元素。以下为一个典型的Spring XML配置文件:
<span style="color:#009900;"><?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- Bean declarations go here --> </beans></span>
在<beans>元素内,你可以防止所有的Spring配置信息,包括<bean>元素的声明。但是beans命名空间并不是你遇到的唯一的Spring命名空间。Spring的核心框架自带了10个命名空间配置。
1、aop:为声明切面以及将@AspectJ注解的类代理为Spring切面提供了配置元素。
2、beans:支持声明Bean和装配Bean,是SPring最核心也是最原始的命名空间。
3、context:为配置Spring应用上下文提供了配置元素,包括自动监测和自动装配Bean。注入非Spring直接管理的对象。
4、jee:提供了与Java EE API的集成,例如JNDI和EJB。
5、jms:为声明消息驱动的POJO提供了配置元素。
6、lang:支持配置由Groovy、JRuby或BeanShell等脚本实现的Bean
7、mvc:启用Spring MVC的能力,例如面向注解的控制器、试图控制器和拦截器。
8、oxm:支持Spring的对象到XML映射配置
9、tx:提供声明式事务配置
10、util:提供各种各样的工具类元素,包括把集合配置为Bean、支持属性占位符元素
下面是一个Juggling Bean以及简单的Bean的声明结构
Performer表演者接口:package com.springinaction.springidol; //表演者接口 public interface Performer { //表演方法 void perform() throws performanceException ; }
Juggling Bean
package com.springinaction.springidol; public class Juggler implements Performer{ private int beanBags = 3 ; public Juggler(){ } public Juggler(int beanBags){ this.beanBags = beanBags ; } @Override public void perform() throws performanceException { System.out.println("JUGGLING " + beanBags + " BEANBAGS"); } }
<bean id="duke" class="com.springinaction.springidol.Juggler" />
<bean id="duke" class="com.springinaction.springidol.Juggler" > <constructor-arg value="15"/> </bean>
如果再Juggler类中再定义一个构造器,要传入两个参数,一个是Poem接口,一个是int类型数据,那么bean的声明就可以这么写:
<bean id="duke" class="com.springinaction.springidol.Juggler" > <constructor-arg value="15"/> <constructor-arg ref="sonnet29"/> </bean>
通过工厂方法创建Bean
下面是一个Stage单例类
package com.springinaction.springidol; public class Stage { private Stage(){ } private static class stageSingletonHolder{ static Stage instance = new Stage() ; } public static Stage getInstance(){ return stageSingletonHolder.instance ; } }
<bean id="theStage" class="com.springinaction.springidol.Stage" factory-method="getInstance" />
Bean有以下几种作用域:
1、singleton:在每一个Spring容器中,一个Bean定义只有一个对象实例
2、prototype:允许Bean的定义可以被实例化任意次(每次调用都创建一个实例)
3、request:在一次HTTP请求中,每个Bean定义对应一个实例,该作用域在基于Web的Spring上下文(例如Spring MVC)中才有效。
4、session:在一个HTTP Session中,每个Bean定义对应一个实例,该作用域仅在基于Web的Spring上下文(例如Spring MVC)中才有效。
5、global-session:再一个全局HTTP Session中,每个Bean定义对应一个实例,该作用域仅在Portlet上下文中才有效。
大多数情况下,我们只需要选择默认的singleton作用域即可,但是如果我们使用Spring做为工厂来创建领域对象新实例时,prototype作用域就非常有用。如果领域对象的作用域配置为prototype,我们在Spring中可以很容易地配置它们,就像配置其他Bean一样。Spring保证每次请求一个prototypr Bean时总是返回一个独一无二的实例。
初始化和销毁Bean
在bean内我们可以使用init-method和destroy-method属性来声明auditorium Bean:
<bean id="auditorium" class="com.springinaction.springidol.Auditorium" init-method="turnOnLights" destroy-method="turnOffLights" />
默认的init-method和destroy-method
如果在上下文中定义的很多Bean都拥有相同名字的初始化方法和销毁方法,你可以使用<beans>元素的dafault-init-method和default-destory-method属性:
<span style="color:#009900;"><?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" </span><span style="color:#ff0000;">default-init-method="turnOnLights" default-destroy-method="turnOffLights"</span><span style="color:#009900;">></span>
注入简单的值只需要在Bean中加入property属性
下面是一个“天才音乐家”的类
标签:装配bean
原文地址:http://blog.csdn.net/benjamin_whx/article/details/39288947