@Resource注入为null

描述一下今天遇到的问题
使用@Configuration注解加@Bean初始化一个工厂类,并且把工厂的三个实现注入到一个map中。伪代码如下

@Configuration
public class A{
private Map<String,class> map = new HashMap();
	@Resource
	private X x;
	@Resource
	private Y y;

	@Bean
	public B getBMap(){
		B b = new B();
		map.put("x", x);
		map.put("y", y);
		b.setMap(map);
		return b;		
	}
}

当使用的B对象的map的时候,x取出来是正常的,y取出来是空的,,调用方法报空指针异常,网上找了一下,大概有两种说法
一、使用new创建了需要spring管理的bean
二、使用set方法注入类

都试了一下,还是报错,看了一上午,还是没有解决。
下午的时候想到,是不是Y依赖的其他服务找不到,导致这个服务初始化失败呢?带着这个疑问,看了下Y这个类。

@Component
public class Y{
	@Resource
	private C c;
	@Resource
	private D d;
}

引用的第一个C是之前项目中就有的,所以这个不会有问题,第二个D是我新加的一个服务,是不是这个服务有问题呢,带着疑问去看了这个服务的类,竟然发现这个类中引入了B这个类。

这样就能解释通了,我再B类中引入Y,Y中注入了D这个类,但是D这个类又引入了B这个类。循环依赖了,D一定会在B初始化后才会放入到spring中管理,同理Y也未初始化完成,这个时候初始化的B中的Y一定是空的。
找到问题了就很好改了,把D中对B的依赖去掉,然后重新启动项目,Y不为空了。至此问题解决。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值