> Java > java지도 시간 > Spring- : @-depth 구성

Spring- : @-depth 구성

Barbara Streisand
풀어 주다: 2025-01-28 22:06:15
원래의
438명이 탐색했습니다.

-스프링 프레임 워크에서 @configuration 주석에 대한 이해 관계 스프링 프레임 워크에서의 주석은 클래스에 의해 정의 된 클래스를 표시하는 데 사용됩니다. Spring의 Java 기반 구성 에서이 주석은 XML없이 응용 프로그램 컨텍스트를 구성 할 수 있습니다. spring-: @Configuration-in-depth 클래스가

주석을 사용하면 Spring은이를 구성 클래스로 취급하여 스프링 Bean을 생성하고 관리하도록 처리합니다. 이 유형에는 일반적으로 하나 이상의

주석이 포함되어 있습니다.

@Configuration

클래스를 구성 클래스

로 표시하십시오. 이 클래스는 Bean 정의의 원인이되고 Spring은 이러한 정의를 사용하여 응용 프로그램 컨텍스트를 설정합니다. @Configuration @Bean

에이전시 메커니즘

스프링은 cglib 기반 서브 클래스 (proxy)를 생성하여

메소드가 기본적으로 동일한 단일 -측정 인스턴스를 반환하는지 확인합니다. 이 동작을 완료 모드 라고합니다. 에이전트를 수행하지 않으면 여러 번
    메소드를 호출하면 여러 인스턴스가 생성 될 수 있습니다.
  1. 구성 요소와 통합

    (또는

    주석이있는 클래스)와 함께 사용될 때

    주석 클래스는 명시 적으로 정의 될 수 있으며 스프링은 다른 콩을 자동으로 스캔하고 등록 할 수 있습니다.
  2. 주입 를 허용합니다 클래스 지원 생성자 또는 필드 기반의 종속성 주입을 지원합니다.

    @Bean 기본 예 @bean 메소드 @Bean : 명시 적으로 Bean을 정의하십시오.

    단일 -예 -예비 동작 :
  3. 가 호출하더라도 에이전시 메커니즘으로 인해 한 번만 생성됩니다.

    모범 사례 1. 모듈 형 구성 함수 (예 : DataConfig, ServiceConfig 및 WebConfig)에 따라 구성이 여러 클래스로 분리됩니다. 이는 가독성과 유지 보수를 향상시킵니다.

    @ComponentScan 2. 하드 코딩 값을 피하십시오 외부 구성 소스 (예 : Application.Properties 또는 Application.yml)를 사용하고 또는 주입 값을 사용하십시오. @SpringBootApplication @Configuration 3. @componentscan을 사용하여

    를 스캔하십시오 모든 콩을 보여주지 말고 레지스터 ,
  4. 구성 요소를 사용하십시오.

    4. 사용 조건 Bean > 또는 와 같은 주석을 사용하여 콩을 조건부로 정의하고 특정 환경이나 구성에서만 콩 만로드했습니다.

    <code class="language-java">import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class AppConfig {
    
        @Bean
        public MyService myService() {
            return new MyServiceImpl();
        }
    
        @Bean
        public MyController myController() {
            return new MyController(myService());
        }
    }</code>
    로그인 후 복사
    5. 조직 응용 프로그램 속성

    를 사용하여 구성 속성을 그룹화하여 분산화 된 주석을 최소화하십시오.

    에 주목 해야하는 문제 @ConfigurationProperties @Value 수동 인스턴스형 Bean

    를 피하십시오
    <code class="language-java">@Configuration
    public class DataConfig {
        @Bean
        public DataSource dataSource() {
            // 配置并返回数据源
        }
    }
    
    @Configuration
    public class ServiceConfig {
        @Bean
        public UserService userService() {
            return new UserServiceImpl();
        }
    }</code>
    로그인 후 복사
    를 사용하지 마십시오. 클래스에서 Bean을 만들지 마십시오. Spring의 종속성 주입 및 수명주기 관리를 우회하기 때문입니다.

    잘못된 글쓰기 :

    1. 사이클론 의존성 상호 종속 Bean을 정의 할 때 조심하십시오. 순환 의존성을 유발할 수 있습니다. @Configuration 솔루션 : new 코드를 재구성하여 주입하거나 를 주입합니다.

    @bean 메소드 주석은 다시로드하는 메소드를 피하십시오. 예상치 못한 결과를 유발할 수 있기 때문입니다.

    <code class="language-java">@Configuration
    public class AppConfig {
    
        @Value("${app.name}")
        private String appName;
    
        @Bean
        public AppService appService() {
            return new AppService(appName);
        }
    }</code>
    로그인 후 복사
    에이전트 제한
    1. 의 대행사 메커니즘은 클래스가 최종적이지 않을 때 효과적이지 않습니다. 구성 클래스를 최종적으로 표시하지 마십시오.
    2. @Component를 조심스럽게 사용하십시오
    같은 클래스에서

    를 혼합하지 마십시오. 처리 방법이 다르기 때문에 예상치 못한 행동으로 이어질 수 있습니다. @Lazy

    1. 의 고급 예제 사용 의 의존 : 각 콩은 다른 콩에 따라 다르고 스프링은 종속성 관계를 자동으로 해결합니다. @Bean 는 Bean 에 의해 재사용 될 수 있고 Bean은 여러 서비스에서 재사용 할 수 있습니다.
    2. 요약 목적 : @Configuration는 농축 된 유형 보안 방법에서 Bean을 정의 할 수 있습니다.

      모범 사례 : 구성을 모듈화하고, 외부화 된 속성을 사용하고, Spring의 주석 (예 :
    3. 및 )을 사용하십시오.

      피해야하는 트랩 : 수동으로 인스턴스화 된 Bean, 사이클 종속성, 무거운 하중 메소드 및 @Component 최종 사용. @Configuration @Configuration 이러한 관행을 따르면 효과적으로

      를 사용하여 강력하고 쉬운 -용이한 스프링 애플리케이션을 구축 할 수 있습니다.

위 내용은 Spring- : @-depth 구성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿