程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 轉:如何取得Spring管理的bean,取得spring管理bean

轉:如何取得Spring管理的bean,取得spring管理bean

編輯:JAVA綜合教程

轉:如何取得Spring管理的bean,取得spring管理bean


原文鏈接:http://blog.csdn.net/a9529lty/article/details/42145545

1、servlet方式加載時,
【web.xml】

Xml代碼
  1. <servlet>  
  2. <servlet-name>springMVC</servlet-name>  
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4. <init-param>  
  5. <param-name>contExtConfigLocation</param-name>  
  6. <param-value>classpath*:/springMVC.xml</param-value>  
  7. </init-param>  
  8. <load-on-startup>1</load-on-startup>  
  9. </servlet>  

 spring容器放在ServletContext中的key是org.springframework.web.servlet.FrameworkServlet.CONTEXT.springMVC
注意後面的springMVC,是你的servlet-name配置的值,注意適時修改。

Java代碼
  1. ServletContext sc=略  
  2. WebApplicationContext attr = (WebApplicationContext)sc.getAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.springMVC");  

 

2、listener方式加載時:
【web.xml】

Xml代碼
  1. <context-param>  
  2.   <param-name>contextConfigLocation</param-name>  
  3.   <param-value>/WEB-INF/applicationContext</param-value>  
  4. </context-param>  
  5.   
  6. <listener>  
  7.   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  8. </listener>  

 【jsp/servlet】可以這樣取得

Java代碼
  1. ServletContext context = getServletContext();  
  2. WebApplicationContext applicationContext  = WebApplicationContextUtils .getWebApplicationContext(context);   

 

3、通用的方法來了,神器啊,前的  1、2兩種方法並不通用,可以拋棄了。
在配置文件中加入:

Xml代碼
  1. <!-- 用於持有ApplicationContext,可以使用SpringContextHolder.getBean('xxxx')的靜態方法得到spring bean對象 -->  
  2. <bean class="com.xxxxx.SpringContextHolder" lazy-init="false" />  

 

Java代碼
    1. import org.springframework.context.ApplicationContext;  
    2. import org.springframework.context.ApplicationContextAware;  
    3. /** 
    4.  * 以靜態變量保存Spring ApplicationContext, 可在任何代碼任何地方任何時候中取出ApplicaitonContext. 
    5.  *  
    6.  */  
    7. public class SpringContextHolder implements ApplicationContextAware {  
    8. private static ApplicationContext applicationContext;  
    9.   
    10. /** 
    11. * 實現ApplicationContextAware接口的context注入函數, 將其存入靜態變量. 
    12. */  
    13. public void setApplicationContext(ApplicationContext applicationContext) {  
    14. SpringContextHolder.applicationContext = applicationContext; // NOSONAR  
    15. }  
    16.   
    17. /** 
    18. * 取得存儲在靜態變量中的ApplicationContext. 
    19. */  
    20. public static ApplicationContext getApplicationContext() {  
    21. checkApplicationContext();  
    22. return applicationContext;  
    23. }  
    24.   
    25. /** 
    26. * 從靜態變量ApplicationContext中取得Bean, 自動轉型為所賦值對象的類型. 
    27. */  
    28. @SuppressWarnings("unchecked")  
    29. public static <T> T getBean(String name) {  
    30. checkApplicationContext();  
    31. return (T) applicationContext.getBean(name);  
    32. }  
    33.   
    34. /** 
    35. * 從靜態變量ApplicationContext中取得Bean, 自動轉型為所賦值對象的類型. 
    36. */  
    37. @SuppressWarnings("unchecked")  
    38. public static <T> T getBean(Class<T> clazz) {  
    39. checkApplicationContext();  
    40. return (T) applicationContext.getBeansOfType(clazz);  
    41. }  
    42.   
    43. /** 
    44. * 清除applicationContext靜態變量. 
    45. */  
    46. public static void cleanApplicationContext() {  
    47. applicationContext = null;  
    48. }  
    49.   
    50. private static void checkApplicationContext() {  
    51. if (applicationContext == null) {  
    52. throw new IllegalStateException("applicaitonContext未注入,請在applicationContext.xml中定義SpringContextHolder");  
    53. }  
    54. }  
    55. }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved