`
Wanghuidong
  • 浏览: 44912 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
文章分类
社区版块
存档分类
最新评论
  • openFox: 确实,以前只知道编码是个名词,在项目中编码统一就可以了,原来是 ...
    java编码解惑
  • tianzizhi: 前段时间我也看了许多这方面的东西,基本理解了,拿楼主的总结再复 ...
    java编码解惑

(转)spring静态工场和实例工场

阅读更多
http://blog.sina.com.cn/s/blog_5f1fe33f0100hyx7.html 这位朋友解释的比较好。转载一下
通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象.
一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean.
调用getBean()方法,Spring返回的不是直接创建的Bean的实例,而是由工厂Bean创建的Bean实例.
一般在Spring中配置工厂Bean,有3中不同类型的工厂Bean的配置.
1.静态工厂
创建具体Bean实例的是静态方法

import java.util.Random;
public class StaticFactoryBean {
public static Integer createRandom() {
return new Integer(new Random().nextInt());
}
}
将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称
<bean id="random"
class="example.chapter3.StaticFactoryBean"
factory-method="createRandom" //createRandom方法必须是static的,才能找到
scope="prototype"
/>
测试:
public static void main(String[] args) {

XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml"));
System.out.println(factory.getBean("random").toString());
//StaticFactoryBean sfb = (StaticFactoryBean)factory.getBean("random");
//System.out.println(sfb.createRandom().toString());
//调用getBean()时,返回随机数.如果没有指定factory-method,会返回StaticFactoryBean的实例,即返回工厂Bean的实例
}

2.实例工厂
创建具体Bean实例的是实例,不是静态方法

import java.text.SimpleDateFormat;
import java.util.Date;
public class InstanceFactoryBean {
private String format = "yy-MM-dd HH:mm:ss";
public void setFormat(String format) {
this.format = format;
}
public String createTime() {
return new SimpleDateFormat(format).format(new Date());
}
}
配置文件需要配置两个bean:第一个Bean和普通的Bean没有区别,第二个bean定义如何通过工厂Bean获取Bean,需要指定工厂Bean的名称和方法名称
<bean id="instanceFactoryBean" class="example.chapter3.InstanceFactoryBean">
<property name="format" value="yyyy-MM-dd HH:mm:ss" />
</bean>
<bean id="currentTime"
factory-bean="instanceFactoryBean"
factory-method="createTime"
/>
测试:
public static void main(String[] args) {

XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml"));
System.out.println(factory.getBean("currentTime"));

}
3.实现FactoryBean接口
public class PiFactoryBean implements FactoryBean {
public Object getObject() throws Exception {
return new Double(3.14159265358979);
}
public Class getObjectType() {
return Double.class;
}
public boolean isSingleton() {
return true;
}
}
实现了FactoryBean接口的Bean,不再被视为普通的Bean.Spring会自动检测.
<bean id="pi" class="example.chapter3.PiFactoryBean" />
测试
public static void main(String[] args) throws Exception {

XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml"));
System.out.println(factory.getBean("pi"));//返回PiFactoryBean 的工厂方法getObject返回的Double对象实例
//PiFactoryBean p = (PiFactoryBean)factory.getBean("&pi"); //加"&"返回工厂Bean的实例.
//System.out.println(p.getObject());
}
分享到:
评论

相关推荐

    JavaEE spring静态工厂创建实例

    总的来说,JavaEE Spring中的静态工厂创建实例是一种高级的DI实现方式,它提供了更多的灵活性和控制力,但同时也增加了代码的复杂性。理解并合理运用静态工厂方法,可以帮助我们更好地设计和组织应用程序的架构。在...

    spring 静态实例化

    静态实例化是Spring框架中的一个重要特性,它可以帮助开发者更好地管理Bean实例的生命周期,提高程序的稳定性和性能。无论是通过XML配置还是Java配置,Spring都提供了丰富的工具和技术来支持静态实例化的实现。对于...

    Spring MVC 基于注解实例

    Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于注解实例Spring MVC 基于...

    Spring的实例工厂方法和静态工厂方法实例代码

    Spring 框架中提供了两种方式来实例化 bean,分别是静态工厂方法和实例工厂方法。下面我们将详细介绍这两种方法的实现和使用。 一、静态工厂方法 静态工厂方法是通过调用静态方法来返回 bean 实例的方式。这种方式...

    spring security 完整项目实例

    总之,这个"spring security 完整项目实例"涵盖了Spring Security的核心组件和用法,包括用户管理、身份验证、权限控制、会话管理等多个方面。通过学习和实践这个项目,开发者能够深入理解Spring Security的工作原理...

    狂神spring-security静态资源.zip

    这个"狂神spring-security静态资源.zip"文件很可能包含了Spring Security的相关教程、代码示例或配置文件,帮助用户理解和学习如何在Spring应用中实现安全控制。下面我们将深入探讨Spring Security的核心概念、功能...

    spring+静态代理

    在本主题"spring+静态代理"中,我们将深入探讨如何利用Spring框架来实现静态代理模式,并通过接口回调的方式来增强代码的灵活性和可扩展性。 静态代理是一种设计模式,它允许我们在不修改原始对象(被代理对象)的...

    spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行

    spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,...

    struts2+hibernate+spring+ibatis 小实例

    struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+...

    spring-mvc 官方实例

    这个官方实例“spring-mvc-showcase”旨在为开发者提供一个清晰的理解和实践Spring MVC功能的平台。在本实例中,我们将深入探讨Spring MVC的核心概念、配置、控制器、模型、视图以及数据绑定等关键知识点。 1. **...

    spring配置文件实例

    spring配置文件实例

    狂神Spring Security静态资源

    总的来说,"狂神Spring Security静态资源"的资料应该涵盖了如何在Spring Boot中配置Spring Security来保护和管理静态资源的知识。这包括理解Spring Security的工作原理,以及如何通过配置文件或代码来定制安全策略,...

    基于myeclipse的spring学习的各种实例

    在本文中,我们将深入探讨如何基于MyEclipse和MySQL环境学习Spring框架,并通过一系列实例来掌握其核心概念和功能。Spring是一个开源的Java平台,它为构建企业级应用提供了全面的框架支持,包括依赖注入、面向切面...

    spring security acl 实例

    spring security acl 代码实例 spring security acl 代码实例spring security acl 代码实例spring security acl 代码实例spring security acl 代码实例spring security acl 代码实例

    Spring构建微服务实例(Spring、Spring Boot和Spring Cloud),Maven项目

    通过一个使用Spring、Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统。 具体请看附件文件中的:readme.txt 和 [译]Spring构建微服务.png 访问地址:http://localhost:1111/ 运行顺序:...

    Spring MVC框架实例

    **Spring MVC 框架实例详解** Spring MVC 是 Spring 框架的重要组成部分,它是一个用于构建 Web 应用程序的 Model-View-Controller (MVC) 模型的实现。在基于 Spring 2.5 的项目中,XML 配置是主要的配置方式,相比...

    spring mongodb 用法总结和实例

    6. **Spring DAO异常层次**:`MongoTemplate`执行命令时,如果出现错误,会将其转化为Spring的DAO异常层次结构,使得错误处理更加统一和方便。 7. **JSON.parse**:在将JSON字符串转换为`DBObject`时,使用了`JSON....

    spring security3 完整实例

    该实例是小弟按照吴老师教学讲义的security3文档一步一步写的, 例子一共七个 。实例注释清楚,一看就懂。 由于最近没分了,所以upload一个资源感谢大家下载 。 security3真是一款强大的框架 ,看我的这7个例子你就...

    Spring Cloud项目实例

    在实践中,你还需要关注服务的容错处理(如 Hystrix 断路器)、服务跟踪(如 Spring Cloud Sleuth 和 Zipkin)以及监控(如 Spring Boot Actuator 和 Prometheus)等附加功能,以确保系统的稳定性和可维护性。

    spring webflow 实例

    spring webflow 实例spring webflow 实例spring webflow 实例spring webflow 实例spring webflow 实例spring webflow 实例

Global site tag (gtag.js) - Google Analytics