- 浏览: 513383 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (563)
- 工作经验 (12)
- 数据库 (13)
- Servlet (10)
- Struts2 (1)
- Spring (25)
- Eclipse (5)
- Hibernate (5)
- Eclips (8)
- HTTP (7)
- J2EE (21)
- EHcache (1)
- HTML (11)
- 工具插件使用 (20)
- JPA (2)
- 杂谈 (17)
- 数据结构与算法 (3)
- Cloud Foundry (1)
- 安全 (10)
- J2SE (57)
- SQL (9)
- DB2 (6)
- 操作系统 (2)
- 设计模式 (1)
- 版本代码管理工具 (13)
- 面试 (10)
- 代码规范 (3)
- Tomcat (12)
- Ajax (5)
- 异常总结 (11)
- REST (2)
- 云 (2)
- RMI (3)
- SOA (1)
- Oracle (12)
- Javascript (20)
- jquery (7)
- JSP自定义标签 (2)
- 电脑知识 (5)
- 浏览器 (3)
- 正则表达式 (3)
- 建站解决问题 (38)
- 数据库设计 (3)
- git (16)
- log4j (1)
- 每天100行代码 (1)
- socket (0)
- java设计模式 耿祥义著 (0)
- Maven (14)
- ibatis (7)
- bug整理 (2)
- 邮件服务器 (8)
- Linux (32)
- TCP/IP协议 (5)
- java多线程并发 (7)
- IO (1)
- 网页小工具 (2)
- Flash (2)
- 爬虫 (1)
- CSS (6)
- JSON (1)
- 触发器 (1)
- java并发 (12)
- ajaxfileupload (1)
- js验证 (1)
- discuz (2)
- Mysql (14)
- jvm (2)
- MyBatis (10)
- POI (1)
- 金融 (1)
- VMWare (0)
- Redis (4)
- 性能测试 (2)
- PostgreSQL (1)
- 分布式 (2)
- Easy UI (1)
- C (1)
- 加密 (6)
- Node.js (1)
- 事务 (2)
- zookeeper (3)
- Spring MVC (2)
- 动态代理 (3)
- 日志 (2)
- 微信公众号 (2)
- IDEA (1)
- 保存他人遇到的问题 (1)
- webservice (11)
- memcached (3)
- nginx (6)
- 抓包 (1)
- java规范 (1)
- dubbo (3)
- xwiki (1)
- quartz (2)
- 数字证书 (1)
- spi (1)
- 学习编程 (6)
- dom4j (1)
- 计算机系统知识 (2)
- JAVA系统知识 (1)
- rpcf (1)
- 单元测试 (2)
- php (1)
- 内存泄漏cpu100%outofmemery (5)
- zero_copy (2)
- mac (3)
- hive (3)
- 分享资料整理 (0)
- 计算机网络 (1)
- 编写操作系统 (1)
- springboot (1)
最新评论
-
masuweng:
亦论一次OutOfMemoryError的定位与解错 -
变脸小伙:
引用[color=red][/color]百度推广中运用的技术 ...
Spring 3 mvc中返回pdf,json,xml等不同的view -
Vanillva:
不同之处是什么??
Mybatis中的like查询 -
thrillerzw:
转了。做个有理想的程序员
有理想的程序员必须知道的15件事 -
liujunhui1988:
觉得很有概括力
15 个必须知道的 Java 面试问题(2年工作经验)
源:http://blog.sina.com.cn/s/blog_5f1fe33f0100hyx7.html
评:
配置工厂Bean
通常由应用程序直接使用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());
}
评:
配置工厂Bean
通常由应用程序直接使用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());
}
发表评论
-
使用Spring+Junit+Mockito做代码自测
2019-05-29 15:27 503源:https://blog.csdn.net/z19917 ... -
在同一个类中调用另一个方法没有触发 Spring AOP 的问题
2017-08-24 17:22 574源:https://segmentfault.com/a/11 ... -
Spring Transaction属性之Propagation
2016-08-10 17:09 546源:http://blog.csdn.net/kiwi_cod ... -
循环依赖检测方法 spring源码方法
2016-07-06 18:58 1165场景:checkForAliasCircle(name, al ... -
Spring的Quartz定时器同一时刻重复执行二次的问题解决
2016-03-11 18:27 1002源:http://www.linuxidc.com/Linux ... -
spring中lazy-init详解
2016-02-29 17:01 777源:http://blog.csdn.net/fhx0 ... -
Spring Refresh Application Context
2015-12-13 14:48 861源:http://techdive.in/spring/spr ... -
spring context 扫描与 mvc扫描类 区分开包
2015-07-15 13:23 6101.applicationContext.xml <!- ... -
Filter中注入spring
2015-07-09 10:45 508源:http://zy116494718.iteye.com/ ... -
获取spring的ApplicationContext几种方式
2015-06-24 15:35 697源:http://blog.sina.com.cn/s/blo ... -
spring获取webapplicationcontext,applicationcontext几种方法详解
2015-04-02 16:38 465源:http://www.blogjava.net/Todd/ ... -
Spring+Mybatis整合事务不起作用之解决方案汇总
2014-12-29 21:36 1350源:http://blog.csdn.net/walkerjo ... -
context:component-scan扫描使用上的容易忽略的use-default-filters
2014-12-29 21:29 449源:http://jinnianshilongnian.ite ... -
Spring线程池开发实战
2014-12-12 10:44 498源:http://blog.csdn.net/chszs/ar ... -
AOP生成代码有三种可能方式
2014-05-11 21:24 447源:http://blog.csdn.net/zuyi532/ ... -
Spring 3 mvc中返回pdf,json,xml等不同的view
2014-05-09 12:11 1039源:http://jackyrong.iteye.com/bl ... -
使用Spring MVC统一异常处理实战
2014-05-04 00:00 524源:http://cgs1999.iteye.com/blog ... -
spring配置文件异常
2013-11-26 10:53 904源:http://wodar.iteye.com/blog/ ... -
自己对spring ioc的理解
2013-07-14 11:59 1072此时心情:有时候工作的很努力,很认真也会被辞退,被小外包公 ... -
spring 定时器配置
2013-03-20 15:09 1095源:http://blog.csdn.net/cl61917 ...
相关推荐
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) (Level 300)
### Spring的BeanFactory的接口注解 #### 一、引言 在Spring框架中,`BeanFactory`是工厂模式的一种实现,它负责管理容器中的Bean的生命周期与依赖注入。了解`BeanFactory`及其相关接口的功能对于掌握Spring的核心...
- 如果不想通过默认构造函数创建Bean,可以使用`factory-bean`和`factory-method`来指定工厂Bean和工厂方法。 8. ** Profiles**: - Spring 3.1 引入了Profiles的概念,允许根据不同的环境配置不同的Bean。例如:...
<bean id="actualBean" factory-bean="myFactoryBean" factory-method="create"/> ``` 在这个例子中,`myFactoryBean`是FactoryBean,`actualBean`是通过`myFactoryBean`的`create`方法创建的。 在标签"源码"中,...
实例化Bean有两种方式:通过`class`属性指定构造器,或者通过`factory-bean`和`factory-method`指定工厂方法。 - **构造器实例化**: ```xml <!-- 构造器参数 --> ``` - **工厂方法实例化**: ```xml ...
<bean id="exampleBean" class="com.example.StaticFactory" factory-method="create"/> ``` 这里,`class`属性指定了静态工厂类,`factory-method`属性指定了要调用的静态工厂方法。 实例工厂的配置则更复杂一些...
“tiny-spring-step-7-method-interceptor-by-jdk-dynamic-proxy.zip”开始涉及AOP概念,通过JDK动态代理实现了方法拦截器,这使得我们可以在不修改原有代码的情况下,对方法进行增强,例如添加日志、事务控制等。...
在源码中,`org.springframework.beans.factory.BeanFactory`接口和`org.springframework.context.ApplicationContext`接口是IoC容器的基石。`ApplicationContext`提供了更丰富的功能,如事件发布、国际化支持和AOP...
使用`factory-bean`属性来指定工厂类的bean id,`factory-method`属性指定工厂方法: ```xml <bean id="myBean" factory-bean="myBeanFactory" factory-method="createMyBean"/> ``` 三、实例工厂注入的优势 1. ...
2. **工厂方法配置**:对于非静态工厂类,可以通过`factory-bean`指定工厂对象,`factory-method`指定工厂方法,如`clientService2`。对于静态工厂类,可以直接在`class`属性中指定工厂方法,如`clientService`。 3...
- `<bean id="personService3" factory-bean="fac" factory-method="createInstance" scope="prototype">`: `factory-bean`引用一个已经存在的bean,`factory-method`则指定实例工厂的方法,这里创建的是原型...
上面的配置中,首先定义了一个 `InstanceObjectsFactory` 对象,然后通过 `factory-bean` 指定了工厂对象的 ID,通过 `factory-method` 指定了工厂方法的名称。当 Spring.NET 容器需要创建 `instanceCreatedObject` ...
9. `<bean factory-method="">`:通过工厂方法创建bean,而非使用默认构造器。 10. `<aop:config>`和`<aop:aspect>`:用于配置面向切面编程(AOP),定义切点、通知、切面等。 Spring的`ApplicationContext`是...
<object id="myObject" factory-type="MyNamespace.Factory, MyAssembly" factory-method="CreateInstance"> <constructor-arg index="0" value="param1"/> ``` 这里,`factory-type`指定了包含工厂方法的类...
<bean id="userService" factory-bean="instanceFactory" factory-method="getUserServiceStatic"/> ``` Spring还提供了对bean作用域、生命周期管理和AOP(面向切面编程)等高级功能。例如,`scope`属性可以设置...
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" /> <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" /> ...
在Spring配置文件中,我们需要定义一个工厂bean,然后指定该工厂bean的`factory-bean`属性,以及工厂bean中用于创建目标bean的方法,即`factory-method`属性。下面是一个简单的例子: ```xml ...
在XML配置中,使用`factory-bean`和`factory-method`属性指定FactoryBean和创建对象的方法。 这些不同的创建对象方式在不同场景下各有优势。XML配置适合传统应用,注解配置简化了配置且易于理解和维护。Java配置...
通过指定`factory-method`属性,如`”personService” class=”com.lzj.service.OrderFactory” factory-method=”createOrder”/>`,Spring会调用指定的静态方法来创建bean。 3. **使用实例工厂方法实例化**: ...
factory-method 可以用来实例化 Bean,提供了更多的灵活性。 8. 使用 depends-on 来指定 Bean 的依赖关系 depends-on 可以用来指定 Bean 的依赖关系,确保在依赖的 Bean 实例化之前,已经实例化了该 Bean。 9. ...