[问题] autowired问题一问

楼主: goldberg123 (SmallHanWinchest)   2016-10-08 01:35:46
今天我在我的config中autowired几支class进来
像是这样
@Autowired
private A a;
@Autowired
private B b;
然后再set某些值进去
public A aSet(){
a.id = 'hello';
return a;
}
public B bSet(){
b.id = 'world';
return b;
}
}
然后run server时候会报错
于是我改成以下这样
@Autowired
private A a;
private A a;
@Autowired
@qulifier("aSet")
private A aSet;
@Autowired
private B b;
@Autowired
@qulifier("bSet")
private B bSet;
然后再set某些值进去
@bean
public A aSet(){
public A aSet(){
a.id = 'hello';
return a;
}
@bean
public B aSet(){
b.id = 'world';
return b;
}
然后再丢到Map里头例如
public Map<String,Test> test(){
public Map<String,Test> test(){
Map<String,Test> mapTest = new ArrayList<String,Test>();
mapTest.put('1',aSet);
mapTest.put('2',bSet);
return mapTest;
}
虽然run server可以过不会报错
但是我map中的a和b是空值,没有被set到hello和world;
后来我就印log发现a根本是null b也是null 根本没拿内存位置
后来我就印log发现a根本是null b也是null 根本没拿内存位置
请问是不能这样set值吗
还是我autowired错了
这问题搞了我好久 网络上也有去找答案 但好像没人用过这种写法 所以都找不到问题点
烦请各位高手指点
补充完整的程式码
@Configure
public class someConfig {
@Autowired
private A a;
@Autowired
@qulifier("aSet")
private A aSet;
@Autowired
@Autowired
private B b;
@Autowired
@qulifier("bSet")
private B bSet;
@Bean
public Map<String,ITest> test(){
Map<String,Test> mapTest = new ArrayList<String,Test>();
mapTest.put('1',a);
System.out.println(a) <
作者: qrtt1 (有些事,有时候。。。)   2016-10-08 09:28:00
要完整可以跑的程式啊,不知你在讲什么东西。
作者: kentyeh (kent)   2016-10-08 14:12:00
从程式码来看,我觉得你最好先去看文件或找本书好好看一一下,[email protected]@Bean的来源产生器,而@[email protected],先问一下 a与b变量的注入来源在那里?至于aSet()与bSet()完全不赞同这种写法,@Bean是用来产生注入来源,不是让你用来修一个既有Bean的内容值,若要让Bean有初值,你可以让这个Bean的Bean的内容值,若要让Bean有初值,你可以让这个Bean的class implement InitializingBean或是这样写@Beanpublic A aSet(){A a = new A();a.id="hello";return a;}}[email protected]写的aSet@Beanpublic Map test(){Map mapTest = new ArrayList<>();mapTest.put('1',aSet()); ....}
作者: ssccg (23)   2016-10-08 15:25:00
我觉得你根本没搞清楚dependency injection在干麻同一个物件里面自己产生(@Bean)又自己接收来用(@Autowired)毫无意义,直接呼叫就好了
楼主: goldberg123 (SmallHanWinchest)   2016-10-08 15:41:00
抱歉~我再去看一次官方文件~谢谢两位高手提点
作者: pttworld (批踢踢世界)   2016-10-08 15:42:00
加油。
作者: ssccg (23)   2016-10-08 15:47:00
btw如果test需要a,b两个dependency可以写成 @Bean public Map test(A a, B b) { ... }
作者: qrtt1 (有些事,有时候。。。)   2016-10-08 18:17:00
另外就是,你写这个是想要达到什么目的?看不太懂意图
楼主: goldberg123 (SmallHanWinchest)   2016-10-09 12:29:00
我想先把bean inject进来,再依照需求对bean里的属性做塞值动作,所以我才会先autowired进来再去set值[email protected],当初考量到这样写是因为是我有一支class需要做成两个不同的bean就是同一支class只是差在属性不同 A的bean的id='A'B的bean的id='B'这样

Links booklink

Contact Us: admin [ a t ] ucptt.com