Как вставить значение в конструктор bean с помощью аннотаций
My spring bean имеет конструктор с уникальным обязательным аргументом, и мне удалось инициализировать его с помощью xml-конфигурации:
<bean name="interfaceParameters#ota" class="com.company.core.DefaultInterfaceParameters">
<constructor-arg>
<value>OTA</value>
</constructor-arg>
</bean>
Затем я использую этот bean как это, и он работает хорошо.
@Resource(name = "interfaceParameters#ota")
private InterfaceParameters interfaceParameters;
Но я хотел бы указать значение аргумента contructor с аннотациями, что-то вроде
@Resource(name = "interfaceParameters#ota")
@contructorArg("ota") // I know it doesn't exists!
private InterfaceParameters interfaceParameters;
Возможно ли это?
Заранее спасибо
Ответы
Ответ 1
Сначала вам нужно указать конструктор arg в определении bean, а не в точках ввода. Затем вы можете использовать аннотацию spring @Value
(spring 3.0)
@Component
public class DefaultInterfaceParameters {
@Inject
public DefaultInterfaceParameters(@Value("${some.property}") String value) {
// assign to a field.
}
}
Это также рекомендуется, так как spring советует впрыскивать конструктор над инъекцией поля.
Насколько я вижу проблему, это может вас не устраивать, так как вы определяете несколько beans одного и того же класса, именованных по-разному. Для этого вы не можете использовать аннотации, вы должны определить их в XML.
Однако я не думаю, что это хорошая идея иметь эти разные beans. Вам лучше использовать только строковые значения. Но я не могу дать больше информации, потому что я не знаю ваших точных классов.
Ответ 2
Как сказал Божо, вместо конструктора arg вы можете установить свойство... @PostConstruct будет вызван только после того, как будут установлены все свойства... так что вы все равно будете иметь свою строку...