Let's say that we use the @Autowired
annotation over various fields in a class, and that we didn't write setters or constructors that can also set the fields.
Question - what should the access modifier be, private
or package-private
(i.e. none) ?
For example:
public class MyClass {
@Autowired
private MyService myService;
}
vs
public class MyClass {
@Autowired
MyService myService;
}
In the first case (private
fields) Spring uses reflection to wire up the field, even if it doesn't have a setter.
The second case (package-private
fields) allows us to be able to access those fields (for example, to set up mocks) if we need to extend the class for testing purposes.
So both cases work fine, but which is more recommended, particularly with regards to testing?