您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關JAVA如何解決在@autowired,@Resource注入為null的情況,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
使用SpringMVC或者SSH過程中,有時可能會遇到這么一個問題。就是在一個普通的JAVA類(不是controller也不是action類)中無法注入在spring配置文件中配置的bean。
比如你在一個普通java類想調用某個在spring中配置的service,你會發現不管你用@Resource還是@Autowired注解都無法注入,對象始終是null。
那是因為一般普通的Java類沒有被spring代理,自然無法通過spring注入相關的對象。難道這樣就不能調用了嗎?這里提供下面一個類來解決這個問題:
SpringContextUtil
package com.im.utils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 這個類是為了解決在普通類調用service的問題 * * @ClassName SpringContextUtil * @Description * @author kokjuis 189155278@qq.com * @date 2016-6-12 * @content * */ public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; // Spring應用上下文 // 下面的這個方法上加了@Override注解,原因是繼承ApplicationContextAware接口是必須實現的方法 @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextUtil.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name) throws BeansException { return applicationContext.getBean(name); } public static Object getBean(String name, Class requiredType) throws BeansException { return applicationContext.getBean(name, requiredType); } public static boolean containsBean(String name) { return applicationContext.containsBean(name); } public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { return applicationContext.isSingleton(name); } public static Class getType(String name) throws NoSuchBeanDefinitionException { return applicationContext.getType(name); } public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { return applicationContext.getAliases(name); } }
然后在spring配置文件中配置一下這個類:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> <!--配置spring工具類 --> <bean id="SpringContextUtil" class="com.im.utils.SpringContextUtil" scope="singleton"></bean> </beans>
然后通過這個類提供的方法就能正常的獲取在spring中托管的bean了,使用很簡單:
/** * 獲取spring托管的redis連接池 */ private JedisPool jedisPool = (JedisPool) SpringContextUtil.getBean("jedisPool");
補充知識:解決Spring中為靜態static的@Resource自動注入失敗的問題
在寫一個單例模塊時,在初始化對象時需要注入靜態的參數,導致spring 暴出
@Resource annotation is not supported on static fields
可以通過將@Resource寫在set方法上,并去除static
關于JAVA如何解決在@autowired,@Resource注入為null的情況就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。