弹簧依赖注入,带@Autowired注释,无需设置器

几个月前,我一直在使用Spring,我认为带有注释的依赖注入也需要一个设置器来注入字段。@Autowired

所以,我像这样使用它:

@Controller
public class MyController {

    @Autowired
    MyService injectedService;

    public void setMyService(MyService injectedService) {
        this.injectedService = injectedService;
    }

    ...

}

但是我今天已经尝试过了:

@Controller
public class MyController {

    @Autowired
    MyService injectedService;

    ...

}

哦,令人惊讶的是,没有编译错误,启动时没有错误,应用程序运行良好...

所以我的问题是,使用注释进行依赖注入是否需要设置器?@Autowired

我使用的是Spring 3.1.1。


答案 1

您不需要具有@Autowired的 setter,该值由反射设置。

查看这篇文章的完整说明 弹簧@Autowired是如何工作的


答案 2

不可以,如果 Java 安全策略允许 Spring 更改受包保护字段的访问权限,则不需要 setter。


推荐