봄의 @Configuration과 @Component의 차이점은 무엇입니까?
@ComponentScan
을 @Configuration
★★★★★★★★★★★★★★★★★」@Component
이 두 모두 스왑하면 합니다. 이 두 주석 모두 스왑하면 올바르게 작동합니다.른럼른른른른른른른른?
@Configuration 클래스가 하나 이상의 @Bean 메서드를 선언하고 실행 시 이러한 빈에 대한 정의 및 서비스 요청을 생성하기 위해 스프링 컨테이너에 의해 처리될 수 있음을 나타냅니다.
@Component 주석이 달린 클래스가 "컴포넌트"임을 나타냅니다.이러한 클래스는 주석 기반 구성 및 클래스 경로 검색을 사용할 때 자동 탐지 후보로 간주됩니다.
@Configuration은 @Component와 메타 주석되므로 @Configuration 클래스는 컴포넌트 스캔의 후보가 됩니다.
자세한 내용은 이쪽:
@Configuration도 @Component이지만 @Component는 @Configuration과 같이 동작할 수 없습니다.
실제로 답은 완전하지 않다.
@Component 주석이 달린 클래스가 "컴포넌트"임을 나타냅니다.이러한 클래스는 주석 기반 구성 및 클래스 경로 검색을 사용할 때 자동 탐지 후보로 간주됩니다.
, MyConfiguration.java 클래스, ".java"를 수 .그 후 고정관념은@Component
@Beans
선언할 수 있습니다.이렇게 하면 구성처럼 보일 수 있습니다.주요 차이점은 주석이 달린 클래스가@Configuration
@Bean
주석이 달린 메서드는 CGLIB를 사용한 프록시입니다. CGLIB는 처음 코드 호출 후에 실행 메서드를 다시 실행하는 대신 컨텍스트에서 빈을 반환하고 @Component와 @Bean을 사용할 때 발생하는 다른 인스턴스를 만듭니다.
그들 사이에는 아주 미묘한 차이가 있다.이것에 대한 매우 빠른 전망을 제시하겠습니다.
다음 시나리오를 고려합니다.
@Configuration
public class MyConfig {
@Bean
public ServiceA aService(){
return new ServiceA();
}
@Bean
public ServiceB bService(){
return new ServiceB(aService());
}
}
:ServiceB
은 팥에 ServiceA
이것은 자동 배선이 아닙니다.대신, 쓰여진 방식은 새로운 인스턴스가 생성된다는 것을 의미하지만, 실제로는 봄에 의해 생성되지는 않습니다.프로그래머인 당신이 한 짓은new
대신 키워드를 지정합니다.
만약에 ''를@Configuration
CGLIB를 사용하다이 상황에서는 스프링콘텍스트에 의해 관리되는 싱글톤빈을 만듭니다.여러 번 호출하면 Spring에 의해 작성된 것과 동일한 콩이 반환됩니다.이치
편을 @Component
마다 새로운 되는 것이며Spring을 사용하는의 작업을 새 인스턴스를 반환합니다. (Spring 빈은 Spring 컨테이너에 의해 관리되는 것이며 개발자로서 이러한 인스턴스를 끌어오는 것이 사용자의 역할입니다.@Autowired
.
같 the@Component
로 얻을 수 @Configuration(proxyEnabled= false)
(이것은 빈라이트 모드 처리라고도 불립니다).따라서 라이트 모드에서는 다음과 같은 작업이 수행됩니다.
@Configuration(proxyEnabled = false) // Lite mode, same effect as @Component
public class MyConfig {
@Bean
public ServiceA aService() {
return new ServiceA();
}
@Autowired
@Bean
public ServiceB bService(ServiceA aServiceBean){
return new ServiceB(aServiceBean);
}
}
도움이 됐으면 좋겠네요!해피 코딩!
@Configuration - beans.xml과 비슷하지만 Java 기반의 bean 설정입니다.즉, 이 주석이 달린 클래스는 콩이 구성되는 장소이며 자동 검출의 후보가 됩니다.이 클래스에서 메서드는 클래스의 개체를 반환하는 @Bean으로 주석을 붙입니다.
예를 들어:
@Configuration
public class ConfigClass {
@Bean
public UserClass getObject() {
return new UserClass();
}
}
@Component - @Component로 표시되어 있지 않은 클래스는 자동 배선(@Autowired)할 수 없습니다.즉, 주석을 사용하여 클래스를 자동 연결하려면 해당 클래스에 @Component 주석을 추가해야 합니다.
예를 들어:
@Component
public class A { .... }
public class B {
@Autowired
A a;
.....
.....
}
@Component
、 [ Import ]를 사용하여 .@Configuration
컨트롤러, 서비스 및 재저장소는 구성 요소와 함께 하위 구성 요소입니다.아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.
나는 @reus의 답변을 연장하고 있다.
- @Configuration 클래스가 하나 또는 여러 개를 선언함을 나타냅니다.
@Bean
및 spring spring.spring 에 및 을 생성할 수 . - '마음'을
@Configuration
, meta-interface, meta-interface, meta-interface, meta-interface, class, meta-interface, meta-interface, class, ,@Component
.
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Configuration
@Bean
관계를 할 수 에, 「의존 관계」가 것입니다.★★★★★★★★★★★★★★★★★★,@Bean
주석은 메서드 위에 있으며 수동으로 콩 개체를 생성하여 해당 메서드에서 반환합니다.@Component
빠르게 할 수 에 의존관계를 쉽게 정의할 수 있습니다.그게 바로@Component
급보보높필요한 곳에만 주입합니다.
콩을 을 붙일 수 .@Component
대로을 지원 콩의 를 '의 정의'로 쓰면 @Bean
a @Configuration
주석 클래스
레오스에 의해 강조된 차이점을 제외하고.
@Configuration을 @Component로 대체할 수 없는 이유는 다음과 같습니다.
차이점은 콩 간 의존성을 처리하는 방법에 있습니다.자세한 내용은 링크를 참조해 주세요.예: 설정과 컴포넌트의 차이
언급URL : https://stackoverflow.com/questions/39174669/what-is-the-difference-between-configuration-and-component-in-spring
'sourcecode' 카테고리의 다른 글
jQuery 내의 WordPress 템플릿 디렉토리에 대한 경로? (0) | 2023.02.27 |
---|---|
Yaml의 목록과 Spring Boot의 객체 목록 매핑 (0) | 2023.02.27 |
정밀도와 스케일의 차이는 무엇입니까? (0) | 2023.02.27 |
경로 전환 시 자원 약속을 취소하는 방법을 Angularjs (0) | 2023.02.27 |
eslint: 반복기(react/jsx-key) 요소에 대한 "키" 프로펠러가 없습니다. (0) | 2023.02.27 |