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 t.ApplicationContext;
import t.ApplicationContextAware;
/**
* 这个类是为了解决在普通类调⽤service的问题
*
* @ClassName SpringContextUtil
* @Description
* @author kokjuis 189155278@qq
* @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 {
Bean(name);
}
public static Object getBean(String name, Class requiredType)
throws BeansException {
Bean(name, requiredType);
}
public static boolean containsBean(String name) {
ainsBean(name);
}
public static boolean isSingleton(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.isSingleton(name);
}
public static Class getType(String name)
throws NoSuchBeanDefinitionException {
Type(name);
}
public static String[] getAliases(String name)
throws NoSuchBeanDefinitionException {
Aliases(name);
}
}
然后在spring配置⽂件中配置⼀下这个类:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance" xmlns:tx="/schema/tx"
xmlns:aop="/schema/aop" xmlns:task="/schema/task"
xmlns:cache="/schema/cache"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-4.3.xsd
/schema/tx /schema/tx/spring-tx-4.3.x
sd
/schema/aop /schema/aop/spring-aop-4.3.xsd
/schema/task /schema/task/spring-task-4.3.xsd
/schema/cache /schema/cache/spring-cache.xsd">
<!--配置spring⼯具类 -->
<bean id="SpringContextUtil" class="com.im.utils.SpringContextUtil"
scope="singleton"></bean>
</beans>
然后通过这个类提供的⽅法就能正常的获取在spring中托管的bean了,使⽤很简单:
/
resource和autowired注解的区别**
* 获取spring托管的redis连接池
*/
private JedisPool jedisPool = (JedisPool) Bean("jedisPool");
补充知识:解决Spring中为静态static的@Resource⾃动注⼊失败的问题
在写⼀个单例模块时,在初始化对象时需要注⼊静态的参数,导致spring 暴出
@Resource annotation is not supported on static fields
可以通过将@Resource写在set⽅法上,并去除static
以上这篇JAVA解决在@autowired,@Resource注⼊为null的情况就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论