2014-11-04 4 views
2

@Resource 주석을 사용하여 잘 작동하는 객체를 삽입하고 있습니다. 그러나이 주입 된 개체에 특성을 설정하고 싶습니다. 주석을 사용할 수 있는지 여부를 알 수 없습니다.annotation을 통해 객체를 삽입하고이 객체에 속성 값을 설정하는 방법

예를 들어, @Resource 주석을 사용하여 MyClass의 인스턴스가 삽입 된 클래스 Test이 있습니다. MyClass에는 MyClass 인스턴스가 삽입 될 때 설정하려는 속성 인 myAttribute이 있습니다.

가능하면 누구에게 알리십니까? 봄과

답변

-1

DI : 자바 EE와

@Autowired 
MyClass myClass 

: 주석 속성 주입에 관한

@Inject 
MyClass myClass 

, 당신은 여전히 ​​@Value에서 좀 걸릴 수 있습니다,하지만 당신은 특성에 따라 파일이 필요합니다 with

+2

다른 콩 @Resource로 autowire하기 수 있지만 : 여기에 주석을 선호하기 때문에 그것은이다 이 속성을 설정하는 방법에 실제로 대답하지 않습니다. – Andy

0

javax.annotation :

에서 @PostConstruct 주석을 사용해야합니다.
public class Test { 
    @Resource 
    private MyClass myClass; 

    @PostConstruct 
    public void init() { 
     myClass.setMyAttribute("test-class"); 
    } 
} 

public class AnotherTest { 
    @Resource 
    private MyClass myClass; 

    @PostConstruct 
    public void init() { 
     myClass.setMyAttribute("another-test-class"); 
    } 
} 

이 메소드는 Spring이 객체를 초기화 한 후에 호출됩니다. 모든 종속성이 주입되었습니다).

나는 MyClass이 싱글 톤이 아니라고 가정합니다.

+0

나는 아마 나 자신을 분명히하지 않았다. 내가 원하는 것은 소유 객체가 주입되는 것과 동시에 속성 설정입니다. 동일한 객체는 다양한 다른 클래스에 주입 될 수 있으며 주입되는 위치에 따라 속성 값이 다를 수 있습니다. 또한 속성의 설정은 주석을 통해 이루어지기를 바랍니다. – Andy

+0

이 접근법은 이것을 처리 할 것입니다. 내 대답을 더 명확하게 편집 할 것입니다. – StuPointerException

+0

Test와 AnotherTest가 동일한 응용 프로그램 컨텍스트에있는 경우 제대로 작동하지 않습니다. 자세한 내용은 내 대답을 참조하십시오. – grid

0

런타임에 둘 이상의 종속성 또는 대체 MyClass 인스턴스가 없을 것이라 확신하는 경우 StuPointerException에 의해 솔루션을 사용할 수 있습니다. 그러나 Test와 AnotherTest가 단일 응용 프로그램 컨텍스트에 존재하면 Spring Bean의 단일 범위 기본 범위로 인해 AnotherTest 초기화가 Test 상태에도 영향을 미칩니다.
@Resource가 두 bean 모두에 동일한 bean을 주입하기 때문입니다.

이렇게하려면 동일한 클래스로 다른 빈을 만들어야합니다. 이를 위해서는 xml 구성 또는 JavaConfig가 필요합니다.

@Configuration 
public class AppConfig { 

    @Bean 
    public MyClass myClass1() { 
     MyClass myClass = new MyClass(); 
     myClass.setMyAttribute("attr-value-1"); 
     return myClass; 
    } 

    @Bean 
    public MyClass myClass2() { 
     MyClass myClass = new MyClass(); 
     myClass.setMyAttribute("attr-value-2"); 
     return myClass; 
    } 

} 

그리고 당신은 이전과 같이하지만, 각각의 경우 내가 객체를 주입하는 다른 방법이 알고

public class Test { 
    @Resource("myClass1") 
    private MyClass myClass;  
} 

public class AnotherTest { 
    @Resource("myClass2") 
    private MyClass myClass; 
} 
관련 문제