`

第二章 创建Bean的及Bean范围

阅读更多
实例化bean
 构造方法实例化
<bean id="exampleBean" class="examples.ExampleBean"/>
示例:
public class Orange implements Fruit {
private String name;


public Orange() {
super();
}

public Orange(String name) {
super();
this.name = name;
}

@Override
public 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" class="model.Orange" />
</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容器在实例化对象的时候,需要用到无参的构造方法.记住,提供一个无参的构造.

 使用静态工厂方法实例化
<bean id="exampleBean"
      class="examples.ExampleBean2"
      factory-method="createInstance"/>
示例:
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" class="model.FruitFactory" factory-method="getInstanceApple" />
<bean id="orange" class="model.FruitFactory" factory-method="getInstanceOrange" />
<bean id="fruit" class="model.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 id="serviceLocator" class="com.foo.DefaultServiceLocator" />
<bean id="exampleBean"
      factory-bean="serviceLocator"
      factory-method="createInstance"/>
示例:
工厂类:
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" class="model.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" class="model.Apple" scope="singleton"/>

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

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

 Bean的生命周期
考虑什么时候Bean实例化
范围为:scope="Singleton"的情况
容器启动时,就实例化

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

 延迟初始化bean
lazy-init="true"
lazy-init="false"
<bean id="fruit" class="model.Apple" lazy-init="false" />
不要和scope属性一起使用.
true:延时,不立即创建
false:不延时,立即创建

 类初始化和销毁自动调用的方法
<bean id="fruit" class="model.Apple" init-method="init"
destroy-method="destroy" />
init-method="init":指定方法名,在对象实例化以后,自动调用
destroy-method="destroy":指定方法名,在容器关闭以后,自动调用

分享到:
评论

相关推荐

    J2EE指南(官方).pdf

    第二部分 EJB技术 第3章 企业Bean 一、企业Bean概述 二、会话Bean 三、EntityBean 四、Message-Driven Bean 五、定义客户端访问接口 六、企业Bean的“内容” 七、企业Bean的命名约定 八、企业Bean的生存周期 第4章 ...

    J2EE使用指南

    第9章 网络客户端及组件 139 第11章 JSP技术 165 第12章 JSP页面中的JavaBean组件 178 第13章 在JSP页面中自定义标签 182 第14章 事务 202 一.什么是事务 202 二.容器管理事务 203 三.Bean管理事务 208 四.企业...

    Spring in Action(第2版)中文版

    第二部分企业spring 第5章使用数据库 5.1spring的数据访问哲学 5.1.1了解spring数据访问的异常体系 5.1.2数据访问的模板化 5.1.3使用dao支持类 5.2配置数据源 5.2.1使用jndi数据源 5.2.2使用数据源连接池 ...

    Spring in Action(第二版 中文高清版).part2

    第二部分 企业Spring 第5章 使用数据库 5.1 Spring的数据访问哲学 5.1.1 了解Spring数据访问的异常体系 5.1.2 数据访问的模板化 5.1.3 使用DAO支持类 5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源...

    Spring in Action(第二版 中文高清版).part1

    第二部分 企业Spring 第5章 使用数据库 5.1 Spring的数据访问哲学 5.1.1 了解Spring数据访问的异常体系 5.1.2 数据访问的模板化 5.1.3 使用DAO支持类 5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源...

    J2EE中文版指南 CHM格式 带全文检索

    第二部分 EJB技术 40 第3章 企业Bean 40 1,企业Bean概述 41 企业Bean的优点 41 何时需要使用企业Bean 41 企业Bean的分类 41 2,会话Bean 42 状态管理模式 42 何时需要会话Bean 42 3,EntityBean 43 EntityBean和会话...

    J2EE指南.doc

    全部语法 124 五.EJB QL的限制 137 第9章 网络客户端及组件 139 第11章 JSP技术 165 第12章 JSP页面中的JavaBean组件 178 第13章 在JSP页面中自定义标签 182 第14章 事务 202 一....

    Spring 3 Reference中文

    第二部分 Spring 3 的新特性.. 21 第2 章 Spring 3.0 的新特性和增强 21 2.1 Java 5.. 21 2.2 改进的文档. 21 2.3 新的文章和教程. 21 2.4 新的模块组织方式和构建系统.. 22 2.5 新...

    Java/JavaEE 学习笔记

    第二章 Session Bean........................330 第三章 消息驱动Bean(MDB).........332 第四章 JPA(Java Persistence API)...332 第五章 Advanced Persistence Concepts(JPA-高级持久化)..336 第六章 事务...........

    J2EE学习笔记(J2ee初学者必备手册)

    第二章 Session Bean........................330 第三章 消息驱动Bean(MDB).........332 第四章 JPA(Java Persistence API)...332 第五章 Advanced Persistence Concepts(JPA-高级持久化)..336 第六章 事务...........

    jsp制作购物网站的毕业论文

    第二章 Struts概述 2-1 Struts的由来和发展 2-1-1 MVC简介 2-2 Struts优缺点 3-3 Struts的工作流程 第三章 网上书店详细设计 3-1 需求分析 3-2 总体设计 3-3 功能设计 3-4 数据库设计与实现 3-4-1 数据库的需求分析...

    spring in action英文版

    第二部分 Spring在业务层的应用  第4章 征服数据库  4.1 学习Spring的DAO理念  4.1.1 理解Spring的DataAccessException  4.1.2 与DataSource一起工作  4.1.3 一致的DAO支持  4.2 在Spring中使用...

    Spring攻略(第二版 中文高清版).part2

    1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 1.4.1 问题 17 1.4.2 解决方案 17 1.4.3 工作原理 17 1.5 指定Bean引用 20 1.5.1 ...

    Spring攻略(第二版 中文高清版).part1

    1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 1.4.1 问题 17 1.4.2 解决方案 17 1.4.3 工作原理 17 1.5 指定Bean引用 20 1.5.1 ...

    基于ASPJSP的电子商务网站设计制作+源代码

    第二章 Struts概述 2-1 Struts的由来和发展 2-1-1 MVC简介 2-2 Struts优缺点 2-3 Struts的工作流程 第三章 网上书店详细设计 3-1 需求分析 3-2 总体设计 3-3 功能设计 3-4 数据库设计与实现 3-4-1 数据库的需求分析...

    Java数据库编程宝典2

    第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 5.4.1 DriverManager 5.4.2 驱动程序 5.4.3 连接 ...

    Java数据库编程宝典4

    第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 5.4.1 DriverManager 5.4.2 驱动程序 5.4.3 连接 ...

    Java数据库编程宝典1

    第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 5.4.1 DriverManager 5.4.2 驱动程序 5.4.3 连接 ...

    Java数据库编程宝典3

    第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 5.4.1 DriverManager 5.4.2 驱动程序 5.4.3 连接 ...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    这是2个压缩包中的第二个,请一并将第一个下载后,随便解压其中一个即可。 如果只希望下载其中一部分即可阅读,可下载另一个pdf: http://download.csdn.net/detail/oqqsun12345678/5215337 内容简介 出版日期: ...

Global site tag (gtag.js) - Google Analytics