假设我们使用@Autowired
对类中的各个字段进行注释,并且我们没有编写也可以设置字段的设置器或构造函数。
问题 - 访问修饰符应该是什么,private
or package-private
(即没有)?
例如:
public class MyClass {
@Autowired
private MyService myService;
}
vs
public class MyClass {
@Autowired
MyService myService;
}
在第一种情况下(private
fields) Spring 使用反射来连接字段,即使它没有 setter。
第二种情况(package-private
fields) 允许我们在需要出于测试目的扩展类时访问这些字段(例如,设置模拟)。
因此,这两种情况都可以正常工作,但更推荐哪种情况,特别是在测试方面?
因此,这两种情况都可以正常工作,但更推荐哪种情况,特别是在测试方面?
我认为属性应该是private
:
@Autowired
private MyService myService;
因为使用 getter 方法来提供对属性的访问而不是允许其他类直接访问它们总是好的。
出于测试目的,注入mocks
of private properties
将以与package-private
特性。
例如,与Mockito
,你可以注入一个模拟private MyService
into MyClass
像这样:
public class MyClassTest {
@Mock
MyService service;
@InjectMocks
MyClass serv = new MyClass();
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)