Java bean,Spring-beans-FactoryBean

 2023-10-15 阅读 31 评论 0

摘要:創建一個類A public class A { } 創建一個類MyFactoryBean,并實現FactoryBean接口 public class MyFactoryBean implements FactoryBean<A> {@Overridepublic A getObject() throws Exception {return new A();}@Overridepublic Class<?> getObjec

創建一個類A

public class A { 
}

創建一個類MyFactoryBean,并實現FactoryBean接口

public class MyFactoryBean implements FactoryBean<A> {@Overridepublic A getObject() throws Exception {return new A();}@Overridepublic Class<?> getObjectType() {return A.class;}@Overridepublic boolean isSingleton() {return false;// 注意這里,參考下面的main方法}
}

下面的main方法測試,打印兩次內容不一樣,因為isSingleton返回false,如果把isSingleton方法返回true,則上面兩次打印則相同

public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);A a = ctx.getBean(A.class);System.out.println(a);a = ctx.getBean(A.class);System.out.println(a);
}

上述代碼是根據類型獲取對象A,如果想根據名稱獲取對象A,則代碼如下

public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);Object a = ctx.getBean("myFactoryBean");System.out.println(a);
}

Java bean?如果想根據名稱從spring容器中獲取MyFactoryBean實例,而不是A實例,則
名稱前面需加"&"符號,代碼如下

public static void main(String[] args) throws Exception {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);Object a = ctx.getBean("&myFactoryBean");System.out.println(a);
}

關于FactoryBean使用方法到此就結束了,挺簡單的,具體原理是在org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean方法中,調用了getObjectForBeanInstance方法,而這個方法,又調用了最終實現方法:org.springframework.beans.factory.support.FactoryBeanRegistrySupport#getObjectFromFactoryBean,可以看到最終實現是在FactoryBeanRegistrySupport類中的,下面是它的類圖
在這里插入圖片描述

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/136884.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息