factorybean的解释

来源:互联网 发布:黑客网络hacknet攻略 编辑:程序博客网 时间:2024/06/06 15:51

介绍:

一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean 。在某些情况下,实例化bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的配置信息,配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。Spring为此提供了一个org.Springframework.bean.factory.FactoryBean的工厂类接口,用户可以通过实现该接口定制实例化bean的逻辑。
FactoryBean接口对于Spring框架来说占有重要的地位,Spring 自身就提供了70多个FactoryBean的实现。它们隐藏了实例化一些复杂bean的细节,给上层应用带来了便利。从Spring 3.0 开始, FactoryBean开始支持泛型,即接口声明改为FactoryBean<T> 的形式

实现factorybean 接口 主要有3个方法如下;

package com.quartz.job;import org.springframework.beans.factory.FactoryBean;public class JobFactoryBean implements FactoryBean<MyJob>{@Overridepublic MyJob getObject() throws Exception {// TODO 实际factorybean 返回的值return null;}@Overridepublic Class<?> getObjectType() {// TODO 返回值的classreturn MyJob.class;}@Overridepublic boolean isSingleton() {// TODO 指定是否单列 默认是falsereturn true;}}
当我们使用spring  容器 获取时比如使用注解

@Autowired JobFacotryBean jobFacoryBean 获取时 我们获取到的是JobFacotryBean的实例 因为@Autowired 是按照类型来获取的

使用@Resource 注解
@Resource JobFacotryBean jobFacoryBean 这样的写法是不正确的 应为这时我们获取的是MyJob的实例应改为@Resource MyJob  jobFacoryBean 不然会出现注入类型错误

如果我们想获取JobFacotryBean的实例需要是&符号和名字一起使用如下:

@Resource (name="&jobFacoryBean")

JobFacotryBean jobFacoryBean

这样获取的才是JobFacotryBean的实例

使用getBean的方式获取 也是一样 获取JobFacotryBean实例 getBean("&jobFacoryBean")

获取泛型的实例 就是本例子中的MyJob 使用getBean("jobFacoryBean")


factorybean 和beanfactory 是不一样的概念主要的前者代表着是一个bean  后者表示的是一个bean工厂

原创粉丝点击