日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring getbean 方法分析

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring getbean 方法分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

spring 缺省:

    • 1.spring用DefaultListableBeanFactory.preInstantiateSingletons()建立bean實例
    • 2.缺省采用單例模式

?

在最近的項目中,有個地方我們不得不實用getBean的方法,自己從Spring context中獲取bean進行數據庫操作。

方法一(效率低,極易出現bug,不推薦使用):

剛剛開始的時候,我們使用這中方式,但是在應用過程中發現此方式效率低下,而且極易出現bug。
在我們系統中會生成ehcache_auto_created_時間戳文件夾,

String[] xmlCfg = new String[] {"classpath:/spring/applicationContext-service.xml","classpath:/spring/applicationContext-util.xml","classpath:/spring/applicationContext.xml"}; ApplicationContext context = new FileSystemXmlApplicationContext(xmlCfg); // 獲取inspectionUtil bean inspectionUtil = (InspectionUtil) context.getBean("inspectionUtil");

?

所以我google了一下,改用其他方法。

方法二(效率高,靈活性高,可復用,推薦使用):
創建一個工具類SpringContextsUtil ,通過實現Spring中的ApplicationContextAware接口,在applicationContext.xml中注入bean后 Spring會自動調用setApplicationContext方法。此時我們就可以獲取到Spring context。

public class SpringContextsUtil implements ApplicationContextAware{private static ApplicationContext applicationContext; //Spring應用上下文環境 /*** 實現ApplicationContextAware接口的回調方法,設置上下文環境 * @param applicationContext* @throws BeansException*/public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringContextsUtil.applicationContext = applicationContext;}/*** @return ApplicationContext*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 獲取對象 * @param name* @return Object 一個以所給名字注冊的bean的實例* @throws BeansException*/public static Object getBean(String name) throws BeansException {return applicationContext.getBean(name);}/*** 獲取類型為requiredType的對象* 如果bean不能被類型轉換,相應的異常將會被拋出(BeanNotOfRequiredTypeException)* @param name bean注冊名* @param requiredType 返回對象類型* @return Object 返回requiredType類型對象* @throws BeansException*/public static Object getBean(String name, Class requiredType) throws BeansException {return applicationContext.getBean(name, requiredType);}/*** 如果BeanFactory包含一個與所給名稱匹配的bean定義,則返回true* @param name* @return boolean*/public static boolean containsBean(String name) {return applicationContext.containsBean(name);}/*** 判斷以給定名字注冊的bean定義是一個singleton還是一個prototype。* 如果與給定名字相應的bean定義沒有被找到,將會拋出一個異常(NoSuchBeanDefinitionException) * @param name* @return boolean* @throws NoSuchBeanDefinitionException*/public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {return applicationContext.isSingleton(name);}/*** @param name* @return Class 注冊對象的類型* @throws NoSuchBeanDefinitionException*/public static Class getType(String name) throws NoSuchBeanDefinitionException {return applicationContext.getType(name);}/*** 如果給定的bean名字在bean定義中有別名,則返回這些別名 * @param name* @return* @throws NoSuchBeanDefinitionException*/public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {return applicationContext.getAliases(name);} }

?

// 獲取inspectionUtil bean inspectionUtil = (InspectionUtil) SpringContextUtil.getBean("inspectionUtil");

?

注:

1、使用時會出現無法獲取applicationContext,并拋出NullPointerException。
原因:使用此方法必須在spring applicationContext.xml中注入bean。否則spring無法自動調用setApplicationContext。如下

<bean id="springContextsUtil" class="com.sinosoft.sepmis.util.SpringContextsUtil" ></bean>

?

2、如果注入后仍然出現這個問題。 則修改 中的default-lazy-init=“false”。 或者是修改bean注入屬性 <bean id="springContextsUtil" class="com.sinosoft.sepmis.util.SpringContextsUtil" lazy-init="false">

?

轉載于:https://www.cnblogs.com/a757956132/p/4353771.html

總結

以上是生活随笔為你收集整理的spring getbean 方法分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。