欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

factorybean的解释

程序员文章站 2022-05-23 18:04:01
...

介绍:

一般情况下,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>{

	@Override
	public MyJob getObject() throws Exception {
		// TODO 实际factorybean 返回的值
		return null;
	}

	@Override
	public Class<?> getObjectType() {
		// TODO 返回值的class
		return MyJob.class;
	}

	@Override
	public boolean isSingleton() {
		// TODO 指定是否单列 默认是false
		return 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工厂

相关标签: factorybean