Spring @Autowired 注解

Spring @Autowired annotaion

Spring @Autowired

我对Spring@Autowired有疑问annotation.Please求助...

在Spring mvc 中,当我按此顺序尝试@Autowired 时

Controller--->Service--->Dao

即,在控制器中,我自动装配服务 Class 对象,在服务中 Class 自动装配 Dao 对象。

这个注入链工作得很好。

同样在strutrs2+Spring中,我也是这样应用@Autowired注解的

Action--->Service-->Dao

这个注入链也可以正常工作。

如果我从这个链外调用一个函数(例如:Custom Taglib class(来自jsp))到服务class中的函数然后在这个服务class Autowired dao 对象为空(即,此调用中断链)。

我的问题是

这个@Autowired 只在注入链中工作吗?

具有 @Autowired 字段的 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;
    }
}

这样,当您处于无法依赖 post 处理的服务的情况下(例如使用 jsp 标记库的情况),您可以简单地用 MyDao 对象实例化一个新实例,然后继续您的快乐之路。