service无法注入为null的问题

有时候会遇到使用@Autowired或@Resource注解为null的情况,这边可以试着使用Spring的容器工具类。
工具类代码如下:

package cn.gfresh.common.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * Spring容器工具类
 * @author lv
 *
 */
@Component("springContextUtils")
public class SpringContextUtils implements ApplicationContextAware {
	/**
	 * Spring应用上下文环境
	 */
	private static ApplicationContext applicationContext;

	/**
	 * 实现ApplicationContextAware接口的回调方法,设置上下文环境
	 * 
	 * @param applicationContext
	 */
	public void setApplicationContext(ApplicationContext applicationContext) {
		SpringContextUtils.applicationContext = applicationContext;
	}

	/**
	 * @return ApplicationContext
	 */
	public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	/**
	 * 获取对象
	 * 
	 * @param name
	 * @return Object
	 * @throws BeansException
	 */
	public static Object getBean(String name) throws BeansException {
		return applicationContext.getBean(name);
	}
	
	/**
	 * 根据class获取对应的bean对象
	 * @param clz
	 * @return
	 */
	public static Object getBean(Class<?> clz){
		return applicationContext.getBean(clz);
	}
}

使用例子:
GiftBagApiService giftBagApiService = (GiftBagApiService) SpringContextUtils.getBean(GiftBagApiService.class);

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这种情况可能是由于注入service没有被正确初始化或者注入的方式不正确导致的。需要检查注入的代码是否正确,确保注入service已经被正确初始化并且被正确注入到了需要使用它的地方。如果还是无法解决问题,可以考虑使用调试工具来查找问题所在。 ### 回答2: 在开发过程中,我们可能会遇到service注入servicenull问题。这是因为Spring在注入bean时,需要根据其类型或名称在容器中查找对应的bean。如果找不到,则会抛出NoSuchBeanDefinitionException异常。以下是可能导致service注入servicenull的原因。 1. 未在Spring容器中注册对应的bean 在注入service时,我们必须确保该service已经在Spring容器中注册。如果未注册,则Spring无法找到该bean并进行注入。因此,我们应该在配置文件中声明该bean或使用注解方式进行注册。 2. 注入service名称或类型错误 若我们使用@Service注解注入service,则需要确保注解中value属性指定了正确的名称,以便Spring在容器中找到对应的bean。如果该名称错误,则Spring会无法找到对应的bean并抛出异常。同理,如果@Autowire注解注入的类型与实际类型不匹配,也会导致servicenull。 3. service层未被扫描 我们还需要确保我们的service层已经被Spring扫描。我们可以在配置文件中进行配置或使用注解方式进行扫描。如果未进行扫描,则也会导致servicenull。 4. service层未被实例化 当我们使用@Autowired或@Resource注入service时,我们需要确保service已经被实例化。如果未实例化,则无法进行注入。因此,我们应该检查代码,确保service实例化语句已经被正确执行。 综上所述,当我们遇到service注入servicenull问题时,首先应该检查以上几个原因是否存在,并进行相应的修改。同时,我们还应该注意代码的规范性和完整性,以避免出现这种问题。 ### 回答3: 首先,Service层是业务逻辑层,负责处理具体的业务逻辑,是Spring框架中的一个重要组成部分。而当我们在Service注入其他Service时,有可能会出现注入Servicenull的情况,这可能是由于以下原因导致的: 1. 配置错误:Service层所依赖的Service没有在Spring配置文件中正确地配置,导致注入失败。在Spring配置文件中,需要确保Service层的@Autowired或@Resource注解引用的Service的id与实际配置的id相同。 2. 作用域问题Service层所依赖的Service的作用域与Service层的作用域不一致,导致注入失败。在Spring框架中,有多种作用域,如singleton、prototype等。如果Service注入Service是prototype作用域的,而Service层本身是singleton作用域的,则会出现注入失败的情况。 3. 循环依赖:Service层与所依赖的Service存在循环依赖关系,导致注入失败。在Spring框架中,存在A依赖B,B依赖A的情况。这时候,Spring框架无法解决循环依赖,会出现注入失败的情况。 解决方法: 1. 配置检查:检查Spring配置文件是否正确配置了Service的id,并且确保Service层注解依赖的Service的id是正确的。 2. 作用域检查:检查Service的作用域是否与Service层的作用域一致。如果不一致,可以将Service的作用域调整为和Service层一致。 3. 循环依赖解决:解决循环依赖关系。可以使用依赖注入注解中的@Lazy注解,将依赖关系设为懒加载,或者将依赖对象改为接口类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值