假设我们在类中的各个字段上使用@Autowired注释,并且我们没有写入也可以设置字段的setter或构造函数.
问题 – 访问修饰符应该是私有的还是私有的(即没有)?
例如:
public class MyClass { @Autowired private MyService myService; }
VS
public class MyClass { @Autowired MyService myService; }
在第一种情况(私有字段)中,Spring使用反射来连接字段,即使它没有setter.
第二种情况(包私有字段)允许我们能够访问这些字段(例如,设置嘲笑),如果我们需要扩展类进行测试.
所以这两种情况都能正常工作,但是更为推荐,特别是在测试方面呢?
解决方法
第一种情况也允许您根据框架注入模拟.例如使用Mockito的@InjectMocks注释. Spring Test中还有ReflectionTestUtils.setField,…
我个人不太喜欢修改课程太多用于测试目的,所以我会去第一种情况.但是在一天结束时,这主要取决于您的首选测试框架.