Spring中有兩種類型的Bean框咙,一種是普通Bean嚷辅,另一種是工廠Bean簿姨,即FactoryBean。工廠Bean跟普通Bean不同,其返回的對(duì)象不是指定類的一個(gè)實(shí)例扁位,其返回的是該工廠Bean的getObject方法所返回的對(duì)象准潭。 如果大家有看過Mybatis的SessionFactoryBean和Activiti初始化引擎的ProcessEngineFactoryBean兩個(gè)類就應(yīng)該了解FactoryBean的具體使用。
http://img.blog.csdn.net/20140811173244311?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXVhbnR5b25nYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
?首先定義一個(gè)產(chǎn)品的實(shí)體類
創(chuàng)建一個(gè)產(chǎn)品的工廠類: 注入到Spring的配置文件中: 寫一個(gè)測(cè)試類測(cè)試一下:
由此可見域仇,通過使用FactoryBean刑然,我們可以得到不同類型的對(duì)象實(shí)例。這也就是我們?cè)贏OP中通過設(shè)置calss為ProxyFactoryBean可以返回不同類型的業(yè)務(wù)對(duì)象的原理殉簸。在實(shí)際應(yīng)用中若能靈活使用FactoryBean,則可以給應(yīng)用程序增加很多的魔幻功能沽讹。
cglib 和 jdk 動(dòng)態(tài)代理般卑,jdk 必須有接口,有實(shí)現(xiàn)類target,cglib是針對(duì)類來(lái)實(shí)現(xiàn)代理的爽雄,原理是對(duì)指定的業(yè)務(wù)類生成一個(gè)子類蝠检,并覆蓋其中業(yè)務(wù)方法實(shí)現(xiàn)代理。因?yàn)椴捎玫氖抢^承挚瘟,所以不能對(duì)final修飾的類進(jìn)行代理叹谁,不需要接口