У меня возникли проблемы инъекционного типа Bean в качестве параметра конструктору из файла свойств. Я могу ввести его, передав значение @Qualifier («beanName») следующим образом.инъекционной Фасоль с использованием Spring аннотаций в Параметры конструктора с имуществом Закончено Местом
@Component("circle")
public class Circle implements Shape {
}
@RestController
class MyController {
private final Shape shape;
@Autowired
public MyClass(@Qualifier("circle")
Shape shape) {
this.shape = shape;
}
}
Однако приведенные ниже примеры кода не работают.
Это возвращает Null.
@RestController
class MyController {
private final Shape shape;
@Autowired
public MyClass(@Qualifier("${shape}")
Shape shape) {
this.shape = shape;
}
}
Пробовал с помощью @Resource (Name = "$ {формы}") вместо @Qualifier как упомянуто здесь ( Spring: Using @Qualifier with Property Placeholder) но получаю ошибку компилятора " '@Resource' не относится к параметру"
@Resource ("$ {} форма") дает ошибку "не удается найти метод 'значение'"
Это не работает слишком:
@RestController
class MyController {
@Value("${shape}")
private final String shapeBean; //Compiler error : "Variable 'shapeBean' might not have been initialised"
//Not declaring shapeBean as final will give a compiler error at @Qualifier: "Attribute value must be constant"
private final Shape shape;
@Autowired
public MyClass(@Qualifier(shapeBean)
Shape shape) {
this.shape = shape;
}
}
Код не работает. Дает ошибку компилятора в @Qualifier: «Значение атрибута должно быть постоянным».
@RestController
class MyController {
@Value("${shape}")
private final String shapeBean;
private final Shape shape;
@Autowired
public MyClass(@Qualifier(shapeBean)
Shape shape) {
this.shape = shape;
}
}
Также попробовал следующее. Оба бросают исключение NullPointerException при попытке получить доступ к форме.
@Resource(name="${shape}")
private Shape shape; // In addition, throws a warning saying, "Private field 'shape' is never assigned"
@Autowired
@Resource(name="${shape}")
private Shape shape;
Если параметр конструктора был примитивным или строку, я мог бы просто использовать @value («$ {формы}») и ввести значение переменной. Но поскольку это класс, я не уверен, как это сделать.
Не мог бы кто-нибудь сказать мне, настроен ли я неправильно или что я должен делать?
Итак, вы хотите выбрать разные формы во время выполнения? Вообще говоря, вы бы использовали что-то вроде подобных профилей. Можете ли вы уточнить свое фактическое приложение? – chrylis
Предполагая из приведенного выше примера, у меня есть интерфейс Shape и конкретные классы, реализующие форму. Но пока в моем контроллере я хочу, чтобы в объект Shape вводилась только форма круга. Раньше я использовал @Qualifier («круг»), который работал отлично. Но так как я не хочу держать его жестко закодированным, я хотел бы получить его из файла свойств. Есть ли способ получить значение из файла свойств и затем вставить это значение в объект Shape? – Arthas