獲取bean的幾種方式

關鍵詞:applicationcontext、ServletContext、Spring 的bean獲取

獲取bean的幾種方式

方法一:在初始化時保存ApplicationContext對象

方法二:通過Spring提供的utils類獲取ApplicationContext對象

方法三:繼承自抽象類ApplicationObjectSupport

方法四:繼承自抽象類WebApplicationObjectSupport

方法五:實現接口ApplicationContextAware

方法六:通過Spring提供的ContextLoader

最后的解決方式為:

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;

/**
 * bean操作輔助類,獲取spring注入的bean。<br>
 * 如果在Junit單元測試中獲取ApplicationContext實例,兩種方法:<br>
 * 1)直接注入 @Autowired protected ApplicationContext ctx;<br>
 * 2)測試類繼承(AbstractJUnit4SpringContextTests,此時不需要寫@RunWith)<br>
 * @ContextConfiguration(locations = { "/spring/applicationContext.xml" })<br>
 * public class SpringTest extends AbstractJUnit4SpringContextTests{ }<br>
 * 然后在代碼中直接使用“applicationContext”成員變量即可
 * @author TP
 *
 */
public final class ApplicationContextUtil
{
    private static ApplicationContext appContext;

  /**
   * 根據注入名稱獲取spring中的bean對象
   * @param name
   * @return
   */
    public static Object getBean(String name)
    {
        if(appContext==null){
            WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
            appContext=wac;
        }
        return appContext.getBean(name);
    }
    
    /**
     * 判斷bean是否存在
     * @param name
     * @return
     */
    public static boolean containsBean(String name) {
        if(appContext==null){
            WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
            appContext=wac;
        }
        return appContext.containsBean(name);
    }
    
    /**
     * 外部傳入Spring Bean對象管理上下文
     * @param appContext
     */
    public static void setApplicationContext(ApplicationContext appContext)
    {
        ApplicationContextUtil.appContext=appContext;
    }
}

即先獲取ApplicationContext 獲取不到再用這個
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
appContext=wac;
代碼還可以再繼續(xù)完善下,看下ApplicationContext變成靜態(tài)任何地方都可以獲取啥的,可以參考這個https://www.cnblogs.com/jinzhiming/p/6256878.html

主要參考:

https://www.cnblogs.com/yjbjingcha/p/6752265.html

其他參考:

https://www.cnblogs.com/jinzhiming/p/6256878.html

https://www.cnblogs.com/kxdblog/p/5988027.html

https://www.cnblogs.com/zeng1994/p/cf6f754e69da87a46f449aee93dca9d9.html

https://www.cnblogs.com/windyWu/p/4708514.html

https://www.cnblogs.com/xiaxinggege/p/5893160.html

https://blog.csdn.net/m0_37837382/article/details/82768782

https://blog.csdn.net/handsome_le/article/details/80846404

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容