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的情况就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot基于redis自定义注解实现后端接口防重复提交校验
本文主要介绍了SpringBoot基于redis自定义注解实现后端接口防重复提交校验,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-01-01springboot项目编写发送异常日志到企微工具包的操作方法
本文介绍了Springboot项目如何编写发送异常日志到企业微信的工具包,内容包括创建基础Bean、配置类、pom依赖等步骤,并展示了如何通过nacos进行配置,这为开发者提供了一种有效的日志管理方案,方便快速定位和处理项目中的异常问题,感兴趣的朋友跟随小编一起看看吧2024-09-09Springboot应用中过滤器如何修改response的header和body内容
这篇文章主要介绍了Springboot应用中过滤器如何修改response的header和body内容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-07-07Java Spring框架创建项目与Bean的存储与读取详解
本篇文章将介绍Spring项目的创建,IDEA国内源的配置以及Bean的存储与读取,所谓的Bean其实就是对象的意思,更详细地说Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象2022-07-07详解java操作Redis数据库的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoo
这篇文章主要介绍了java操作Redis数据库的redis工具,包括RedisUtil,jedis工具JedisUtil,JedisPoolUtil工具,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下2021-08-08Mybatis+Druid+MybatisPlus多数据源配置方法
在项目开发中,经常需要连接多个数据库,使用Mybatis、Druid和MybatisPlus可以实现多数据源配置,通过定义配置类和修改配置文件,如properties或yaml,可以设置多个数据源,本文介绍了配置项包括Druid基本配置、数据源一、数据源二,感兴趣的朋友一起看看吧2024-09-09
最新评论