My Melody Is Cute Spring Framework DI 2
본문 바로가기

개발공부🌷/Spring

Spring Framework DI 2

애너테이션

🌼@Configuration

생성할 객체 클래스 위에 작성

스프링 설정정보를 포함하고있음을 알림

 

컨텍스트를 초기화 하는데 필요한 Bean정의를 제공하는 클래스인것을 나타낸다

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration 
//@Configuration을 사용하는 클래스에서는 @Bean을 사용해서 빈을 정의할 수 있다
public class AppConfig {// 스프링 설정정보를 제공하는 클래스 AppConfig

    @Bean
    public MyBean myBean() {
        return new MyBean();
        //이 메서드가 생성한 객체는 스프링 컨테이너에서 관리
    }

    // 다른 @Bean 메서드들...

}

 

🌼@Bean

스프링 컨테이너에 의해 관리되는 빈(Bean)을 생성하는 메서드임을 알림

빈은 스프링 컨테이너에 의해 생성,관리되는 객체

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean //@Bean이 붙은 메서드를 통해 스프링 빈 등록 
    public MyComponent myComponent() {
        return new MyComponent();
    }
}

🌼AnnotationConfigApplicationContext 클래스를 사용해서

스프링컨테이너를 초기화한다 (컨테이너 생성 ,관리)

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MyApp {
    public static void main(String[] args) {
        // AppConfig는 @Configuration 어노테이션을 가진 Java Config 클래스
        AnnotationConfigApplicationContext context 
        	= new AnnotationConfigApplicationContext(AppConfig.class);
            //스프링 컨테이너를 초기화

        // 이제 스프링 컨테이너를 사용하여 빈들을 가져와서 활용할 수 있음

        // 컨테이너 종료
        context.close();
    }
}

 

🌼@Component 클래스

클래스 위에 작성하면 해당 클래스를 스프링의 빈(Bean)으로 등록한다

 

컴포넌트 스캔을 통해 붙어있는 클래스를 찾아서 등록함

import org.springframework.stereotype.Component;

@Component // 어노테이션이 붙은 클래스를 스프링 빈으로 등록
public class MyComponent {
    // ...
}

 

더보기

일반적으로 @Component 어노테이션은 일반적인 빈으로 등록할 때 사용되고,

@Bean 메서드는 더 복잡한 설정이나 특별한 조건이 필요한 경우에 사용됩니다.

@Bean 메서드를 사용하면 빈의 생성과 초기화를 직접 제어할 수 있습니다.

 

🌼컴포넌트 스캔의존성 자동주입

 

@Configuration과 @Bean을 사용한 수동주입방식이 아닌

 

자동으로 빈을 등록하는 컴포넌트 스캔(Component Scan)기능과

@Autowired 애너테이션을 통해 의존관계가 설정될 수있도록 하는 기능

 

컴포넌트 스캔이 붙은 클래스의 패키지가 스캔의 시작 위치이고

스캔의 시작 대상은 클래스의 패키지 즉 burgerqueenspring 디렉토리 전체가 스캔의 대상이다

구성정보 클래스의 위치를 프로젝트 최상단에 두어

자동으로 디렉토리 전체가 스캔의 대상이 되도록 하는게 일반적인 사용법

범위를 변경하고싶다면 @ComponentScan(basePackages= "") ""부분에 패키지 이름을 표시하면 스캔범위를 변경가능

@Component 애너테이션을 붙여주면 스프링 컨테이너가 해당 클래스의 인스턴스를 생성하여 스프링 빈으로 관리한다. 생성자에 @Autowired 애너테이션을 붙이면 스프링이 관리하고 있는 해당 타입의 객체가 자동으로 주입되어 의존 관계가 완성된다. 생성자가 단 하나만 존재하는 경우에는 @Autowired 애너테이션을 붙이지 않아도 자동으로 의존 관계가 연결됨

 

🌼@Autowired

자동으로 의존성을 주입하는 데 사용되는 기능

public class Engine {
    // 엔진 관련 코드
}

public class Car {
    @Autowired
    private Engine engine;

    // 이제 Car 객체를 생성할 때 Engine 객체가 자동으로 주입됩니다.
}

 

 

@Autowired는 기본적으로 타입으로 빈을 조회한다

빈의 타입이 2개이상이면 어떤 객체가 들어와야하는지 알 수있는 방법이 없어서 오류가 발생

 

@Autowired 필드명 매칭

@Qualifier사용

@Primary 사용

 

 

 

 

'개발공부🌷 > Spring' 카테고리의 다른 글

Spring framework AOP  (0) 2023.11.17
Spring Framework DI  (0) 2023.11.15
Spring Framework 기본  (0) 2023.11.15