gpt4 book ai didi

java - Spring @Autowired 字段 - 哪个访问修饰符,私有(private)或包私有(private)?

转载 作者:IT老高 更新时间:2023-10-28 13:53:50 25 4
gpt4 key购买 nike

假设我们在类中的各个字段上使用了 @Autowired 注释,并且我们没有编写也可以设置字段的 setter 或构造函数。

问题 - 访问修饰符应该是什么,privatepackage-private(即无)?

例如:

public class MyClass {
@Autowired
private MyService myService;
}

public class MyClass {
@Autowired
MyService myService;
}

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

第二种情况(package-private 字段)允许我们在需要扩展类以进行测试时访问这些字段(例如,设置模拟)。

所以这两种情况都可以正常工作,但哪个更推荐,尤其是在测试方面?

最佳答案

So both cases work fine, but which is more recommended, particularly with regards to testing?

我认为属性应该是 private :

@Autowired
private MyService myService;

因为使用 getter 方法来提供对属性的访问而不是允许其他类直接访问它们总是好的。

为了测试目的,注入(inject) mocksprivate properties将与 package-private 的工作方式相同属性。

例如,使用 Mockito ,您可以注入(inject) private MyService 的模拟进入 MyClass像这样:

public class MyClassTest {

@Mock
MyService service;

@InjectMocks
MyClass serv = new MyClass();

@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
}

关于java - Spring @Autowired 字段 - 哪个访问修饰符,私有(private)或包私有(private)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19682293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com