복붙노트

[SPRING] 어노테이션을 사용하여 빈 생성자에 값을 주입하는 방법

SPRING

어노테이션을 사용하여 빈 생성자에 값을 주입하는 방법

내 스프링 빈에는 고유 한 필수 인수가있는 생성자가 있으며 XML 구성을 사용하여 초기화 할 수있었습니다.

<bean name="interfaceParameters#ota" class="com.company.core.DefaultInterfaceParameters">
  <constructor-arg>
    <value>OTA</value>
  </constructor-arg>
 </bean>

그렇다면이 콩을 이렇게 사용하면 잘 작동합니다.

 @Resource(name = "interfaceParameters#ota")
 private InterfaceParameters interfaceParameters;

하지만 annocations와 같은 생성자 arg 값을 지정하고 싶습니다.

 @Resource(name = "interfaceParameters#ota")
 @contructorArg("ota") // I know it doesn't exists!
 private InterfaceParameters interfaceParameters;

이것이 가능한가 ?

미리 감사드립니다.

해결법

  1. ==============================

    1.먼저 bean 정의에 생성자 arg를 지정해야하며 주입 지점에는 지정하지 않아야합니다. 그런 다음, 스프링의 @Value 주석 (spring 3.0)

    먼저 bean 정의에 생성자 arg를 지정해야하며 주입 지점에는 지정하지 않아야합니다. 그런 다음, 스프링의 @Value 주석 (spring 3.0)

    @Component
    public class DefaultInterfaceParameters {
    
        @Inject
        public DefaultInterfaceParameters(@Value("${some.property}") String value) {
             // assign to a field.
        }
    }
    

    이것은 스프링이 필드 주입보다 생성자 주입을 권고하기 때문에 권장된다.

    지금까지 내가 문제를 보았을 때, 이것은 당신에게 어울리지 않을 수도있다. 왜냐하면 당신은 다르게 명명 된 동일한 클래스의 여러 빈을 정의하는 것처럼 보이기 때문이다. 이를 위해서는 주석을 사용할 수 없으므로 주석을 XML로 정의해야합니다.

    그러나 나는이 다른 콩을 갖는 것이 좋은 생각이라고 생각하지 않습니다. 문자열 값만 사용하는 것이 좋습니다. 그러나 정확한 정보를 모르기 때문에 더 많은 정보를 제공 할 수는 없습니다.

  2. ==============================

    2.Bozho가 말했듯이, 생성자 arg 대신에 프로퍼티를 설정할 수 있습니다 ... @ PostConstruct는 모든 프로퍼티가 설정되고 나서야 호출됩니다 ... 그래서, 당신은 여전히 ​​당신의 문자열을 사용할 수 있습니다 ...

    Bozho가 말했듯이, 생성자 arg 대신에 프로퍼티를 설정할 수 있습니다 ... @ PostConstruct는 모든 프로퍼티가 설정되고 나서야 호출됩니다 ... 그래서, 당신은 여전히 ​​당신의 문자열을 사용할 수 있습니다 ...

  3. from https://stackoverflow.com/questions/4203302/how-to-inject-a-value-to-bean-constructor-using-annotations by cc-by-sa and MIT license