Spring @Autowired
我对Spring @Autowired annotation有疑问。请帮助......
在Spring mvc中,当我按此顺序尝试@Autowired时
控制器--->服务--->道
即,在控制器I中自动装配服务类对象,在服务类Autowire Dao对象中。
此注射链完美运作。
Similliarly在strutrs2 + Spring中,我以这种方式应用@Autowired Annotation
动作--->服务 - >道
此注射链也可以正常工作。
如果我从这个链外部调用一个函数(例如:自定义Taglib类(来自jsp))到Service类中的函数那么在这个Service类中,Autowired dao对象为null(即,这个调用会对链进行制动)。 / p>
我的问题是
这只@Autowired是否仅在注射链中起作用?
答案 0 :(得分:1)
具有@Autowire
d字段的Bean只有在通过Spring Bean后处理器发送时才设置它们 - 就像你说的那样,如果你自己自动装配它们。这是构造函数注入比场注入更优选的一个重要原因。而不是做
@Service
public class MyService {
@Autowired
private MyDao dao;
...
}
你应该做
@Service
public class MyService {
private final MyDao dao;
@Autowired
public MyService(MyDao dao) {
this.dao = dao;
}
}
这样,当您处于不能依赖服务进行后处理的情况时(如使用jsp标记库的情况),您只需使用{实例化一个新实例{1}}对象,并以你的快乐方式。