В моем проекте есть следующие классы и конфигурации:
public class Op {
public Op(Comp comp) {
// Construct Op
}
}
public interface OpFactory {
public Op createOp(Comp comp);
}
и конфигурация Spring:
@Configuration
public class OpConfig {
@Bean
@Scope(SCOPE_PROTOTYPE)
Op op(Comp comp) { // <--- Intellij marks this as error
return new Op(composition);
}
@Bean
OpFactory opFactory() {
return new OpFactory() {
@Override
public Op createOp(Comp comp) {
return op(comp);
}
};
}
}
Этот код работает, однако IntelliJ IDEA показывает ошибку в конфигурациис указанием Could not autowire. No beans of 'Comp' type found.
.Сам Comp - это pojo, и его не нужно подключать автоматически, и, как вы можете видеть, фабрика поставляет Optor с ним.
Код работает, просто IntelliJ это не нравится.Я обычно слушаю IntelliJ и не хочу просто подавить это с помощью @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
, есть ли лучший способ настроить бины, и у IntelliJ есть смысл?
Дайте мне знать, если есть больше информации и /или код, который я могу предоставить.
Редактировать:
Та же ошибка возникает, когда я опускаю фабричный бин и использую BeanFactory#getBean(String name, Object... args)
, как предложено в этом ответе .Фабричный подход в основном такой же, только чтобы избежать дополнительных вызовов на BeanFactory#getBean(String name, Object... args)
.
Кроме того, мне не нужно Comp
для автоматической проводки, потому что, как только у меня есть фабрика, яможет просто передать его, и, как я уже сказал, сам комп это pojo.Пример использования:
Comp comp = new Comp();
OpFactory opFactory = getFactoryFromContext();
opFactory.createOp(comp);
Мне не нужно, чтобы comp был автоматически подключен, фактически я не могу включить его автоматически, так как я строю его на основе пользовательского ввода во время выполнения.