0

弹簧@Autowired

我对 Spring @Autowired 注释有疑问。请帮助...

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

控制器--->服务--->道

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

该注入链完美运行。

类似地在 strutrs2+Spring 中,我以这种方式应用了@Autowired Annotation

行动--->服务-->道

该注入链也可以正常工作。

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

我的问题是

这 @Autowired 是否仅在注入链中工作?

4

1 回答 1

1

只有当它们通过 Spring Bean 后处理器发送时,具有@Autowired 字段的 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 标签库的情况),您可以简单地用一个MyDao对象实例化一个新实例并继续你的快乐方式。

于 2016-09-02T20:44:38.060 回答