为了账号安全,请及时绑定邮箱和手机立即绑定

请教关于泛型自动装配的问题,@Autowired失败,s1和s2都是null,报错说循依赖(Circular reference )

老师

你好,我按照你的代码测试StoreConfig类,但是无法Autowired s1和s2,报错信息如下:

我的Spring版本是4.1.4。请帮忙看一下,谢谢。

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.springtest.beanannotation.store.Store com.springtest.beanannotation.store.StoreConfig.s1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stringStoreTest' defined in com.springtest.beanannotation.store.StoreConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.springtest.beanannotation.store.Store]: Circular reference involving containing bean 'storeConfig' - consider declaring the factory method as static for independence from its containing instance. Factory method 'stringStoreTest' threw exception; nested exception is java.lang.NullPointerException


各个类的代码如下:

//Interface Store<T>
package com.springtest.beanannotation.store;
public interface Store<T> {

}

//IntegerStore
package com.springtest.beanannotation.store;
public class IntegerStore implements Store<Integer> {

}

//StringStore 
package com.springtest.beanannotation.store;
public class StringStore implements Store<String> {
	public void init(){
		System.out.println("This is Init.");
	}
	
	public void destroy(){
		System.out.println("This is Destroy.");
	}
}

//StoreConfig 
@Configuration
@ImportResource("classpath:config.xml")
public class StoreConfig {
	
	@Autowired
	private Store<String> s1;
	
	@Autowired
	private Store<Integer> s2;
	
	@Bean
	public StringStore stringStore(){
		return new StringStore();
	}
	
	@Bean
	public IntegerStore integerStore(){
		return new IntegerStore();
	}
	
	@Bean(name="stringStoreTest")
	public Store stringStoreTest(){
		System.out.println("s1:"+s1.getClass().getName());
		System.out.println("s2:"+s2.getClass().getName());
		return new StringStore();
	}
	
}

//TestStore 
public class TestStore extends UnitTestBase {
	public TestStore(){
		super("classpath*:spring-beanannotation.xml");
	}
	
	@Test
	public void testG(){
		StringStore store = super.getBean("stringStoreTest");
	}
}

//配置文件
<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd" >
        
        <context:component-scan base-package="com.springtest.beanannotation"></context:component-scan>
        
 </beans>


正在回答

4 回答

代码没问题,可能是spring版本不同,你试试看用spring4.0.5,所有例子在这个版本下是都能正常运行的。

0 回复 有任何疑惑可以回复我~
#1

倾真鱼 提问者

换了spring4.0.5试了下,不报错,正常输出了。 只是不明白为什么我用最新版本的Spring却不支持这种@Autowired。
2015-01-13 回复 有任何疑惑可以回复我~

//自动注入失败,加上@Qualifier("name")就行啦

@Autowired
@Qualifier("stringStore")
private Store<String> s1;

@Autowired
@Qualifier("integerStore")
private Store<Integer> s2;

4 回复 有任何疑惑可以回复我~
#1

zyxailgq

阿里嘎多
2016-12-10 回复 有任何疑惑可以回复我~
#2

zyxailgq

查了一上午的资料都没解决 !感动
2016-12-10 回复 有任何疑惑可以回复我~
#3

未卜先知

4.3.4 成功,比百度还靠谱。。。
2017-01-08 回复 有任何疑惑可以回复我~

@Autowired

@Qualifier("stringStore")

private Store<String> s1;// 基于泛型的自动装配 stringStore


@Autowired

@Qualifier("integerStore")

private Store<Integer> s2;// 基于泛型的自动装配 integerStore


2 回复 有任何疑惑可以回复我~
#1

凯哥Java

@Autowired @Qualifier("integerStore") private Store<Integer> s2;// 基于泛型的自动装配 integerStore 你使用这个在bean和调用是用s2还是integerStore? 你的代码还有吗?可以贴出来看下吗? 谢谢
2016-05-06 回复 有任何疑惑可以回复我~

新版本加入@Qualifier 做限定就好了

1 回复 有任何疑惑可以回复我~
#1

qq_DragonHeart_0

在这两个声明前头加入对应的@Qualifier 后运行成功,我的spring版本是4.2.5
2016-03-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Spring入门篇
  • 参与学习       268787    人
  • 解答问题       963    个

为您带来IOC和AOP的基本概念及用法,为后续高级课程学习打下基础

进入课程

请教关于泛型自动装配的问题,@Autowired失败,s1和s2都是null,报错说循依赖(Circular reference )

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信