春天@Autowired annotaion

时间:2016-09-02 19:47:49

标签: spring spring-mvc annotations autowired struts2-spring-plugin

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是否仅在注射链中起作用?

1 个答案:

答案 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}}对象,并以你的快乐方式。