首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

第二章 创造Bean的及Bean范围

2012-10-10 
第二章 创建Bean的及Bean范围实例化bean示例:public class Orange implements Fruit {private String name

第二章 创建Bean的及Bean范围

实例化bean

示例:

public class Orange implements Fruit {private String name;public Orange() {super();}public Orange(String name) {super();this.name = name;}@Overridepublic void eat() {System.out.println("吃桔子");}public String getName() {return name;}public void setName(String name) {this.name = name;}}

?


配置文件

?

<?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-2.5.xsd"><bean id="fruit" /></beans>

?

Test 测试:

public class Test {public static void main(String[] args) {ApplicationContext acx = new ClassPathXmlApplicationContext("chapter2.xml");Fruit fruit =(Fruit)acx.getBean("fruit");fruit.eat();}}

?

?

Spring容器在实例化对象的时候,需要用到无参的构造方法.记住,提供一个无参的构造

?

?

?

使用静态工厂方法实例化

?

示例:

?

public class FruitFactory {public static Fruit getInstanceApple() {return new Apple();}public static Fruit getInstanceOrange() {return new Orange();}public static Fruit getInstance(int type) {if(type == 1){return new Apple();}else if (type == 2){return new Orange();}else{return null;}}}

?

?配置文件

<?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-2.5.xsd"><bean id="apple" factory-method="getInstanceApple" /><bean id="orange" factory-method="getInstanceOrange" /><bean id="fruit" factory-method="getInstance"><constructor-arg type="int" value="2" /></bean></beans>

?

??Test 测试:

public class Test {public static void main(String[] args) {ApplicationContext acx = new ClassPathXmlApplicationContext("chapter2.xml");Apple apple =(Apple)acx.getBean("apple");apple.eat();Orange orange =(Orange)acx.getBean("orange");orange.eat();Fruit fruit =(Fruit)acx.getBean("fruit");fruit.eat();}}

??

?

?

?

?

?使用实例工厂方法实例化

?

示例:
工厂类:

public class FruitFactory {public Fruit getInstanceApple() {return new Apple();}public Fruit getInstanceOrange() {return new Orange();}public Fruit getInstance(int type) {if (type == 1) {return new Apple();} else if (type == 2) {return new Orange();} else {return null;}}}

?

?

?

?

?配置文件

??

<?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-2.5.xsd"><bean id="fruitFactory" /><bean id="apple" factory-bean="fruitFactory" factory-method="getInstanceApple" /><bean id="orange" factory-bean="fruitFactory" factory-method="getInstanceOrange" /><bean id="fruit" factory-bean="fruitFactory" factory-method="getInstance"><constructor-arg type="int" value="2" /></bean></beans>

?

?

?

Test 测试:

?

?

public class Test {public static void main(String[] args) {ApplicationContext acx = new ClassPathXmlApplicationContext("chapter2.xml");Apple apple =(Apple)acx.getBean("apple");apple.eat();Orange orange =(Orange)acx.getBean("orange");orange.eat();Fruit fruit =(Fruit)acx.getBean("fruit");fruit.eat();}}

?

?

?

Bean的作用域

作用域

描述

singleton

在每个Spring IoC容器中一个bean定义对应一个对象实例。

prototype

一个bean定义对应多个对象实例。

request

在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。

session

在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

global session

在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。

?

singleton单例示例

<bean id="fruit" scope="singleton"/>scope="singleton"是默认值,设于不设都可以,每次容器都会给同一个对象给你.

?

?

?

?

prototype非单例示例

<bean id="fruit" scope="prototype"/>配置此范围后,每次向容器索取对象时,容器会创建一个新的对象给你.

?

?

?

Bean的生命周期

?

?

?

????? 范围为:scope="Singleton"的情况
????? 容器启动时,就实例化?

?

?

范围为:scope="prototype"的情况
? 什么时候用,什么时候才实例化

?

?


??延迟初始化bean
lazy-init="true"
lazy-init="false"

<bean id="fruit" lazy-init="false" />

?不要和scope属性一起使用.
true:延时,不立即创建
false:不延时,立即创建

?

?

类初始化和销毁自动调用的方法

?

?

?

?

<bean id="fruit" init-method="init"destroy-method="destroy" />

?

init-method="init":指定方法名,在对象实例化以后,自动调用
destroy-method="destroy":指定方法名,在容器关闭以后,自动调用

热点排行