spring factoryBean 和 BeanFactory

Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。 如果大家有看过Mybatis的SessionFactoryBean和Activiti初始化引擎的ProcessEngineFactoryBean两个类就应该了解FactoryBean的具体使用。

http://img.blog.csdn.net/20140811173244311?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVhbnR5b25nYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

 首先定义一个产品的实体类


创建一个产品的工厂类: 注入到Spring的配置文件中: 写一个测试类测试一下:

由此可见,通过使用FactoryBean,我们可以得到不同类型的对象实例。这也就是我们在AOP中通过设置calss为ProxyFactoryBean可以返回不同类型的业务对象的原理。在实际应用中若能灵活使用FactoryBean,则可以给应用程序增加很多的魔幻功能。

cglib 和 jdk 动态代理,jdk 必须有接口,有实现类target,cglib是针对类来实现代理的,原理是对指定的业务类生成一个子类,并覆盖其中业务方法实现代理。因为采用的是继承,所以不能对final修饰的类进行代理,不需要接口

你可能感兴趣的:(spring factoryBean 和 BeanFactory)