애너테이션
🌼@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= "") ""부분에 패키지 이름을 표시하면 스캔범위를 변경가능
🌼@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 |