2016-10-26 1 views

답변

2

@Bean 인스턴스를 프로그래밍 할 수 있도록 @Component로 클래스를 표시 할 수 있습니다. 그렇게하면 라이트 모드라고합니다. 이 모드에서는 'bean 간 참조'를 사용할 수 없으며 메소드를 통해 다른 인스턴스를 참조합니다.

한편, @Configuration 클래스의 @Bean은 사이드 cglib 래퍼에 래핑되어이 빈 메소드에 대한 호출을 가로 채고 Bean 인스턴스를 컨텍스트에서 반환 할 수 있습니다. 당신은 '빈 간 참조'를 사용할 수 있습니다. @Configuration 클래스

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Bean.html

  1. @Bean 방법은 일반적 @Bean 방법 @Configuration 클래스 내에서 선언된다. 이 경우, bean 메소드는 동일한 클래스에서 다른 @Bean 메소드를 참조 할 수 있습니다. 이렇게하면 콩 사이의 참조 이 강력하게 입력되고 탐색 할 수 있습니다. 이러한 소위 'bean 간 참조'는 getBean() 조회와 마찬가지로 범위 지정 및 AOP 의미를 존중하도록 보장됩니다. 이들은 런타임에 각 구성 클래스의 CGLIB 서브 클래 싱을 요구하는 원래 'Spring JavaConfig'프로젝트에서 알려진 의미 인 입니다. 결과로 @Configuration 클래스와 팩토리 메소드는이 모드에서 으로 최종 또는 비공개로 표시하면 안됩니다.

  • @Bean 라이트 모드

@Bean 방법은 @Configuration 주석하지 입니다 클래스 내에서 선언 할 수있다. 예를 들어, bean 메소드는 @Component 클래스 또는 보통의 오래된 클래스에서 선언 된 일 수 있습니다. 이러한 의 경우 @Bean 메서드는 소위 '라이트'모드로 처리됩니다.

라이트 모드의 Bean 메소드는 범위 지정 및 수명주기 콜백이 올바르게 적용된 컨테이너 (XML의 팩토리 메소드 선언과 유사)로 컨테이너의 일반 팩토리 메소드로 처리됩니다. 포함 된 클래스 은이 경우 수정되지 않고 남아 있으며 포함하는 클래스 또는 팩토리 메서드에 대해 이라는 특수한 제약 조건이 없습니다.

@Configuration 클래스의 bean 메소드에 대한 의미와 달리, 'bean 간 참조'는 라이트 모드에서 지원되지 않습니다. 대신 하나의 @ Bean 메소드가 모드의 다른 @ Bean 메소드를 호출 할 때, 호출은 표준 Java 메소드 호출입니다. Spring은 CGLIB 프록시를 통해 호출을 인터셉트하지 않고 을 호출한다.

그리고, @Configuration는 당신에게 능력을 사용하는 다른 설정 @Import (DatabaseConfig.class)

자원 수입 @PropertySource을 (가져 오기 다른 주석

의 함께 많은 다른 기능을 제공합니다 "클래스 경로 : config.properties ")

컴포넌트 스캔을 사용 @ComponentScan (= basePackages)

{"com.sample * ".}

마킹 프로필 @profile ("사용")

는 기능 @Enablexxxx 사용하려면

http://docs.spring.io/spring-framework/docs/4.0.4.RELEASE/javadoc-api/org/springframework/context/annotation/Configuration.html

관련 문제