@Autowired
public AppServiceImpl(AppRepository appRepository) {
this.appRepository = appRepository;
}
@Autowired
public setRepository(AppRepository appRepository) {
this.appRepository = appRepository;
}
Не рекомендуется. Трудно поддается модульному тестированию.
@Autowired
private AppRepository appRepository;
Вводить только в том случае, если существует зависимость:
@Autowired(required=false)
AppService appService;
public void method() {
if(appService != null) {
...
}
}
Использование Дополнительного:
@Autowired
Optional appService;
public void method() {
appService.ifPresent(s -> {
...
});
}
Если имена компонентов не указаны, они генерируются автоматически. Если они указаны, они позволяют устранить неоднозначность, если несколько классов компонентов реализуют один и тот же интерфейс.
@Component
public class AppServiceImpl implements AppService {
@Autowired
public AppServiceImpl(@Qualifier("jdbcRepository") AppRepository appRepository) {
this.appRepository = appRepository;
}
}
@Component("jdbcRepository")
public class JdbcRepositoryImpl implements AppRepository {
...
}
Оригинал: “https://dev.to/eidher/autowiring-in-spring-f89”