2014-10-07 2 views
1

Guice에는 비슷한 개념이 없습니다. 예를 들어, Guice는 특수 클래스 주석이 필요없이 모든 클래스에 기본 생성자를 자동으로 주입 할 수 있습니다. 스프링이 시작할 때 모든 빈에 대해 알아야하는 이유는 무엇입니까? autowiring의 목적을 위해, cant spring은 classpath에서 클래스를 찾는다. 제가 생각할 수있는 한 가지 이유는 AOP 때문입니다. 그러나 AOP를 사용하지 않는다면, 전체 bean 정의 계산은 시작 시간을 상당히 증가시켜 굉장히 불필요합니다.@Component는 봄에 어떤 용도로 사용됩니까?

편집 : 명시 적으로

, 나는 그것이 그렇게 Bar 필요가 있음을 볼 수 있습니다 getBean() 스프링을 사용하여 빈 Foo을 만들 때 봄이

@Component 
class Bar { 

} 

@Component 
class Foo { 
    @Autowired Bar bar; 
    public void doSomething() {} 
} 

그래서 클래스 패스에서 필요에 따라 클래스를 조회 할 클래스 경로에서 간단히 Bar을 찾을 수 있습니다. 이것은 Guice가하는 일이며, 개발 과정에서 매우 느린 불필요한 구성 요소 스캐닝을 피할 수 있습니다.

답변

1

@Component, @Repository, @Controller, @Service 주석 Spring IoC 컨테이너에 의해 "구성 요소 스캔"을 할 수있는 다양한 콩을 정의합니다. Spring 컨텍스트를 정의 할 때 검사 할 패키지를 지정할 수 있습니다.

클래스를 명시 적으로 사용하여 Spring bean을 등록 할 수 있습니다. 이 경우 주석을 사용할 필요가 없습니다.

AFAIK 주석을 사용하지 않고 빈을 자동으로 검색하지 않습니다. 저는 개인적으로 IoC 컨테이너에 의해 구동된다는 클래스를 보았을 때 (컴포넌트 스캔을 사용할 때) 분명하다는 점을 좋아합니다. 어노테이션없이 스캔하는이 아이디어가 스프링에 침투하지 않기를 바랍니다.

편집

예는 수,하지만 당신은 콩으로이 클래스를 등록해야합니다. Java 구성을 사용한 예 :

@Configuration 
public class SpringConfig{ 

    @Bean 
    public Bar createBarBean(){ 
     new Bar(); 
    } 
} 

그러나 나는 당신이 각 bean을 명시 적으로 등록하고 싶지 않기 때문에 이것은 당신에게 도움이되지 않을 것이라고 생각합니다. 그것은 과도 할 것입니다.

여기에 봄 문서의 일부 관련 부분은 다음과 같습니다

내가 다른 콩 조회 메커니즘을 인식하지입니다.

+0

감사합니다, 내 질문에 대한 대답을하지만 뭔가 더 싶습니다 : 봄 클래스는 단순히 다른 클래스에 autowire 클래스를 필요로 할 때 클래스 패스에서 요청할 수 있습니까? 그러면 구성 요소 스캔이 제거됩니다. 좀 더 구체적인 질문을 편집했습니다. – sha

관련 문제