programing

@ComponentScan과 @Enable의 차이점은 무엇입니까?스프링 부트에서의 자동 설정

i4 2023. 3. 22. 20:45
반응형

@ComponentScan과 @Enable의 차이점은 무엇입니까?스프링 부트에서의 자동 설정

의 차이는 무엇입니까?@ComponentScan그리고.@EnableAutoConfiguration스프링 부츠에 주석을 달 수 있습니까?이것들을 추가할 필요가 있습니까?이 주석 없이도 응용 프로그램은 매우 잘 작동합니다.나는 단지 왜 우리가 그것들을 추가해야 하는지 알고 싶을 뿐이다.

@ComponentScan과 @Enable의 차이점은 무엇입니까?스프링 부트의 자동 구성 주석

@EnableAutoConfiguration annotation은 추가한 jar 의존성에 따라 스프링을 구성하는 방법을 Spring Boot에 "추측"하도록 지시합니다.예를 들어 HSQLDB가 클래스 패스에 있고 데이터베이스 접속 콩을 수동으로 설정하지 않은 경우 Spring은 메모리 내 데이터베이스를 자동으로 설정합니다.

@ComponentScan 는 스프링에게 지정된 패키지에서 다른 컴포넌트, 구성 및 서비스를 검색하도록 지시합니다.Spring은 사전 정의된 프로젝트 패키지에서 콩 또는 컴포넌트를 자동으로 스캔, 검출 및 등록할 수 있습니다.패키지를 지정하지 않으면 현재 클래스 패키지가 루트 패키지로 간주됩니다.

이것들을 추가할 필요가 있습니까?

Spring boot to Auto configure everything 이 필요합니다.수동으로 추가할 필요가 없습니다.사용자가 제공하는 주석을 기반으로 스프링이 내부적으로 추가합니다.

실제로 주석은 기본 속성을 사용하여 를 사용하는 것과 동일합니다.

다음 항목도 참조하십시오.

Spring Boot의 주요 장점 중 하나는 기존 xml 기반 구성과 비교하여 주석 기반 구성인 @Enable입니다.AutoConfiguration은 포함된 jar 파일을 기반으로 Spring 응용 프로그램을 자동으로 구성하고 pom.xml의 종속성에 따라 기본값 또는 도우미를 설정합니다.자동설정은 보통 클래스 경로와 정의된 콩에 따라 적용됩니다.따라서 DataSource, EntityManagerFactory, TransactionManager 등을 정의할 필요가 없으며 클래스 패스에 따라 Spring Boot에 의해 적절한 콩이 자동으로 생성되어 등록됩니다.예를 들어 클래스 경로에 Tomcat-embedded.jar가 있는 경우 Tomcat Embedded Servlet Container Factory가 필요할 수 있습니다(자신의 Embedded Servlet Container Factory를 정의하지 않은 경우).@활성화Auto Configuration에는 자동 설정을 명시적으로 디세블로 하는 제외 속성이 있습니다.그렇지 않으면 pom.xml에서 제외합니다.예를 들어 spring이 Tomcat을 설정하지 않도록 하려면 spring-boot-starter-tomcat을 spring-boot-web에서 제외합니다.

@ComponentScan은 스프링 컴포넌트 스캔의 스코프를 제공합니다.이것은 단순히 제공된 기본 패키지를 통해 @Bean 또는 @Autowired 등에 의해 요구되는 의존관계를 픽업합니다.일반적인 스프링 어플리케이션에서는 @ComponentScan은 @Configuration으로 주석이 붙은 설정 클래스에서 사용됩니다.컨피규레이션클래스에는 @Bean으로 주석이 달린 메서드가 포함되어 있습니다.이러한 @Bean 주석이 달린 메서드는 Spring 컨테이너에 의해 관리되는 콩을 생성합니다.이러한 콩은 @ComponentScan 주석으로 자동 검출됩니다.@Repository, @Service, @Controller, @Configuration, @Component 등 콩을 자동 검출할 수 있는 주석이 있습니다.아래 코드에서는 스프링이 BeanA 클래스를 포함한 패키지에서 스캔을 시작합니다.

@Configuration
@ComponentScan(basePackageClasses = BeanA.class)
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class Config {

  @Bean
  public BeanA beanA(){
    return new BeanA();
  }

  @Bean
  public BeanB beanB{
    return new BeanB();
  }

}

@EnableAutoConfiguration in spring boot는 클래스 패스에 추가한 jar를 기반으로 spring 설정 방법을 나타냅니다.예를 들어,spring-boot-starter-web클래스 패스 「Tomcat」스프링 MVC.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

하시면 됩니다.@EnableAutoConfiguration with annot annot along annot annotation@Configuration주석입니다.2개의 옵션 요소가 있습니다.

  • exclude : 클래스의 자동 설정을 제외하는 경우.
  • excludeName : 완전 수식 클래스 이름을 사용한 클래스의 자동 설정을 제외하는 경우.

예:

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
  public class MyConfiguration {
}


@EnableAutoConfiguration(excludeName = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication는 최신 입니다.@EnableAutoConfiguration스프링 부츠 1.2 장화

@SpringBootApplication는 3개의 3개의 주석으로 조합입니다.

  • @Configuration Java의 경우.

  • @ComponentScan컴포넌트 스캔을 활성화하려면 @SpringBootApplication이 적용된 루트 패키지 아래에 있는 모든 패키지와 서브패키지가 자동으로 스캔됩니다.

  • @EnableAutoConfiguration - 의을 유효하게 .
    classpath.classpath에 으로 합니다.

@ComponentScan 컴포넌트 스캔을 유효하게 하면 작성한 웹 컨트롤러 클래스 및 기타 컴포넌트가 봄 어플리케이션 컨텍스트에서 자동으로 검출되어 콩으로 등록됩니다.콩 자동 검색 및 등록을 위해 검색할 기본 패키지를 지정할 수 있습니다.

옵션 요소 중 하나는 다음과 같습니다.

  • basePackages - 검색할 특정 패키지를 기술하는 데 사용할 수 있습니다.

예,

@ComponentScan(basePackages = {"com.example.test"})
@Configuration
public class SpringConfiguration { }

언급URL : https://stackoverflow.com/questions/35005158/what-is-the-difference-between-componentscan-and-enableautoconfiguration-in-sp

반응형