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

装配Bean

时间:2014-09-15 11:19:48      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:装配bean

1、创建Spring配置

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、支持属性占位符元素


2、构造器注入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的简单声明

<bean id="duke" class="com.springinaction.springidol.Juggler" />

上面这个bean使用了默认的无参构造器,如果要让Duke同时抛N个豆袋子的话,必须使用以下声明

<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>

(注:sonnet29是Poem接口的实现)


通过工厂方法创建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 ;
	}
}	

为了在上下文中将Stage配置为Bean,可以像下面的配置来使用factory-method;

<bean id="theStage" class="com.springinaction.springidol.Stage"
		factory-method="getInstance" />


3、Bean的作用域

Bean有以下几种作用域:

1、singleton:在每一个Spring容器中,一个Bean定义只有一个对象实例

2、prototype:允许Bean的定义可以被实例化任意次(每次调用都创建一个实例)

3、request:在一次HTTP请求中,每个Bean定义对应一个实例,该作用域在基于WebSpring上下文(例如Spring MVC)中才有效。

4、session:在一个HTTP Session中,每个Bean定义对应一个实例,该作用域仅在基于WebSpring上下文(例如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" />

当我们使用这种方式配置时,auditorium Bean实例化后会立即调用turnOnLights()方法,在Bean从容器移除和销毁前,会调用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>


4、注入Bean属性

注入简单的值只需要在Bean中加入property属性

下面是一个“天才音乐家”的类


装配Bean

标签:装配bean

原文地址:http://blog.csdn.net/benjamin_whx/article/details/39288947

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