2012-12-17 4 views
1

스프링 설명서는 @Component 주석을 다음과 같이 정의합니다 : "주석이 달린 클래스가"구성 요소 "임을 나타냅니다. 이러한 클래스는 주석 기반 구성 및 클래스 경로 검색을 사용할 때 자동 감지의 후보로 간주됩니다. "Spring : @Component

이것은 간결하지만 많이 언급하지 않습니다. @Component는 클래스 라이프 사이클 (생성/파괴)이 Spring에 의해 관리됨을 나타 내기 위해 사용된다는 것을 이해합니다. 내가 가지고있는 질문 : 필자는 어딘가에 autowired 될 클래스에서만 사용해야하거나 (2) autowired 속성을 가진 클래스에서 사용해야 할 필요가 있는가?

(1)

@Component 
class B { 
} 

class A { 

    // @Autowired 
    B b; 
} 

(2)

@Component 
class B { 
} 

@Component 
class A { 

    // @Autowired 
    B b; 
} 
+0

시도하면 어떻게됩니까? –

답변

6

음, 엄격하게 당신이 옛날처럼 XML에 콩을 정의 할 수 있습니다 어디서나 사용할 필요가 없습니다 말하기. 또한 예전처럼 @Service 또는 @Repository을 사용할 수 있습니다. 그러나 귀하의 질문으로 돌아가십시오.

A@Component으로 주석을 달거나 그렇지 않으면 스프링 컨텍스트에 알려진 경우, 스프링에 의해 생성되고 관리되지 않습니다. 따라서 주석을 사용하거나 XML에 A을 정의해야합니다.

B에 대해서도 마찬가지입니다. autowiring 대상이되기를 원하면 주석 스캔 또는 XML을 통해 Spring에 알려 져야합니다.

XML, 주석 또는 Java 구성 중 어느 것을 사용하든 상관없이 하루가 끝나면 실제로 중요하지 않습니다. 두 빈이 모두 애플리케이션 컨텍스트에 알려져 있어야합니다.

+0

저는 XML이 아닌 주석 만 사용하여 응용 프로그램 컨텍스트의 객체를 등록합니다. 내 질문을 다시 쓰겠습니다 : 클래스 A의 객체가 수동으로 만 생성되고 클래스 A가 autowired 속성을 가지고 있다고 가정하면 응용 프로그램 컨텍스트에 알 필요가 있습니까 (XML 또는 주석을 통해 수행되는 경우에는 독립적입니다)? –

+0

@AlanEvangelista : 물론. 단순히'A a = new A'를하면 Spring은이'a' 인스턴스와'@ Autowired' 필드를 가지고 있다는 사실을 알고 있습니까? Spring에 의해 인스턴스화되어야합니다. –

관련 문제