SpringBoot整合axis1.4后,@Autowired注入失敗,使用工具類注入


問題描述:

費勁心思搭建好webservices服務端后,沒想到客戶端調用失敗,查看日志文件,發現報空指針異常,debug代碼后,發現sql查詢的值都是null。通常情況下,我們將Dao注入Service的時候使用@Autowired注解,但是這里顯然沒有注入進來。

解決方法:

使用SpringContextUtils工具類注入,首先增加SpringContextUtils.java文件,復制如下內容

 1 import org.springframework.beans.BeansException;
 2 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.ApplicationContextAware;
 5 import org.springframework.stereotype.Component;
 6 /**
 7  * @author xuchi
 8  * @Description: @Autowired注入無效,使用此工具類注入
 9  *
10  */
11 @Component
12 public class SpringContextUtils implements ApplicationContextAware {
13     private static ApplicationContext applicationContext = null;
14 
15     public SpringContextUtils() {
16     }
17 
18     public void setApplicationContext(ApplicationContext arg0) throws BeansException {
19         if (applicationContext == null) {
20             applicationContext = arg0;
21         }
22 
23     }
24 
25     public static ApplicationContext getApplicationContext() {
26         return applicationContext;
27     }
28 
29     public static void setAppCtx(ApplicationContext webAppCtx) {
30         if (webAppCtx != null) {
31             applicationContext = webAppCtx;
32         }
33     }
34 
35     /**
36      * 拿到ApplicationContext對象實例后就可以手動獲取Bean的注入實例對象
37      */
38     public static <T> T getBean(Class<T> clazz) {
39         return getApplicationContext().getBean(clazz);
40     }
41 
42     public static <T> T getBean(String name, Class<T> clazz) throws ClassNotFoundException {
43         return getApplicationContext().getBean(name, clazz);
44     }
45 
46     public static final Object getBean(String beanName) {
47         return getApplicationContext().getBean(beanName);
48     }
49 
50     public static final Object getBean(String beanName, String className) throws ClassNotFoundException {
51         Class clz = Class.forName(className);
52         return getApplicationContext().getBean(beanName, clz.getClass());
53     }
54 
55     public static boolean containsBean(String name) {
56         return getApplicationContext().containsBean(name);
57     }
58 
59     public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
60         return getApplicationContext().isSingleton(name);
61     }
62 
63     public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
64         return getApplicationContext().getType(name);
65     }
66 
67     public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
68         return getApplicationContext().getAliases(name);
69     }
70 }

代替以往的

1 @Autowired
2 private ManagerDao managerDao;

而使用

1 ManagerDao managerDao = SpringContextUtils.getBean(ManagerDao.class);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM