FactoryBean :
T getObject() throws Exception;//返回对象
Class<?> getObjectType();//返回对象类型
boolean isSingleton(); //是否单例
这是一个接口会被一个对象实现,这个对象会被用在一个BeanFactory当中。 它本身就是一个工厂,如果一个bean实现了这个接口,它就会作为一个工厂用于公开一个对象。而不会直接作为一个被暴露bean的实例。
- FactoryBean在Spring框架中得到大量的应用。
- FactoryBean本身创建出来的对象并不是FactoryBean这个实例的本身。而是由这个(FactoryBean)工厂所创建出来的对象。他会在AOP中得到大量使用,比如(org.springframework.aop.framework.ProxyFactoryBean)。
BeanFactory:
String FACTORY_BEAN_PREFIX = "&";//需要返回本身
Object getBean(String name)throws BeansException;//根据bean的名字,返回bean的对象
<T> T getBean(String name,Class<T> requiredType) throws BeansException; //传送bean的名字,class的类型
<T> T getBean(Class<T> requiredType)throws BeansException;//根据类型返回类型的实例,前提这个实例必须在配置中。
Object getBean(String name,Object ... args) throws BeansException;
boolean containsBean(String name);//是否包含给定名字的bean
boolean isSingleton(String name)throws NoSuchBeanDefinitionException;//判断给定名字的bean是不是一个单例对象
boolean isPrototype(String name)throws NosuchBeanDefinitionException;//是否是一个原型(和isSingleton互斥如果isSingleton是true,那么这个就是false)
boolean isTypeMatch(String name,Class<?> targetType)throws NosuchBeanDefinitionException;//判断传送name的bean对象,是否是targetType这个类型,是为true,不是为false
Class<?> getType(String name)throws NosuchBeanDefinitionException; //根据bean的名字,返回class type
String[] getAliases(String name); //返回给定bean名字的别名,别名可能有多个返回字符串数组
总结:
BeanFactory它是整个Spring容器的根容器,它里面描述了在所有的子接口,或者子类当中对容器的一些处理原则和职责到底是什么,包括一些生命周期的方法的一些约定。FactoryBean它本身又存活在BeanFactory当中的,那么它本身也是一个工厂。这个工厂的作用是用于创建由FactoryBean所能创建出来的对象。那么在创建出来这个对象时候,这个对象的某一些方法前面或者是后面就可以额外执行一些操作来实现AOP。
更详细的文章: