Class A {
private B instanceB;
@Autowired
public setInstanceB(B instanceB) {
this.instanceB = instanceB;
}
}
Выше одного против этого.
Class A {
@Autowired
private B instanceB;
public setInstanceB(B instanceB) {
this.instanceB = instanceB;
}
}
Будет ли поведение отличаться в зависимости от модификатора доступа?
Ответ 1
Разница заключается в том, что сеттер будет вызываться, если вы его поместите, что полезно, если оно делает другие полезные вещи, проверку и т.д. Обычно вы сравниваете:
public class A {
private B instanceB;
@Autowired
public setInstanceB(B instanceB) {
this.instanceB = instanceB;
}
}
против
public class A {
@Autowired
private B instanceB;
}
(т.е. нет сеттера).
Во-первых, предпочтительнее в этой ситуации, поскольку отсутствие сеттера затрудняет издевательство/модульное тестирование. Даже если у вас есть сеттер, но autowire член данных, вы можете создать проблему, если сеттер сделает что-то другое. Это приведет к недействительности тестирования вашего устройства.