Как вставить значение в конструктор 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 будет вызван только после того, как будут установлены все свойства... так что вы все равно будете иметь свою строку...