java – Spring @Autowired字段 – 哪个访问修饰符,private或package-private?

前端之家收集整理的这篇文章主要介绍了java – Spring @Autowired字段 – 哪个访问修饰符,private或package-private?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们在类中的各个字段上使用@Autowired注释,并且我们没有写入也可以设置字段的setter或构造函数.

问题 – 访问修饰符应该是私有的还是私有的(即没有)?

例如:

public class MyClass {
    @Autowired
    private MyService myService;
}

VS

public class MyClass {
    @Autowired
    MyService myService;
}

在第一种情况(私有字段)中,Spring使用反射来连接字段,即使它没有setter.

第二种情况(包私有字段)允许我们能够访问这些字段(例如,设置嘲笑),如果我们需要扩展类进行测试.

所以这两种情况都能正常工作,但是更为推荐,特别是在测试方面呢?

解决方法

第一种情况也允许您根据框架注入模拟.例如使用Mockito的@InjectMocks注释. Spring Test中还有ReflectionTestUtils.setField,…

我个人不太喜欢修改课程太多用于测试目的,所以我会去第一种情况.但是在一天结束时,这主要取决于您的首选测试框架.

猜你在找的Java相关文章