sourcecode

봄의 @Configuration과 @Component의 차이점은 무엇입니까?

codebag 2023. 2. 27. 22:49
반응형

봄의 @Configuration과 @Component의 차이점은 무엇입니까?

@ComponentScan@Configuration ★★★★★★★★★★★★★★★★★」@Component 이 두 모두 스왑하면 합니다. 이 두 주석 모두 스왑하면 올바르게 작동합니다.른럼른른른른른른른른?

@Configuration 클래스가 하나 이상의 @Bean 메서드를 선언하고 실행 시 이러한 빈에 대한 정의 및 서비스 요청을 생성하기 위해 스프링 컨테이너에 의해 처리될 수 있음을 나타냅니다.

@Component 주석이 달린 클래스가 "컴포넌트"임을 나타냅니다.이러한 클래스는 주석 기반 구성 및 클래스 경로 검색을 사용할 때 자동 탐지 후보로 간주됩니다.

@Configuration은 @Component와 메타 주석되므로 @Configuration 클래스는 컴포넌트 스캔의 후보가 됩니다.

자세한 내용은 이쪽:

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

@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대신 키워드를 지정합니다.

만약에 ''를@ConfigurationCGLIB를 사용하다이 상황에서는 스프링콘텍스트에 의해 관리되는 싱글톤빈을 만듭니다.여러 번 호출하면 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;
    .....
    .....
}

참조용 스프링 문서: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html

@Component 、 [ Import ]를 사용하여 .@Configuration컨트롤러, 서비스 및 재저장소는 구성 요소와 함께 하위 구성 요소입니다.아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다.

나는 @reus의 답변을 연장하고 있다.

  1. @Configuration 클래스가 하나 또는 여러 개를 선언함을 나타냅니다.@Bean 및 spring spring.spring 에 및 을 생성할 수 .
  2. '마음'을 @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
  1. @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

반응형