https://programmingrecoding.tistory.com/13
@Component
스프링에서 관리하는 객체임을 표시하기 위해 사용하는 어노테이션.
@Configuration
스프링에서 Bean을 수동으로 등록하기 위해 사용하는 어노테이션.
class 위에 선언하고(설정 클래스로 지정), @Bean을 사용해 수동으로 빈을 등록.
* 설정 클래스 : 스프링 컨테이너가 Bean 정의를 읽어들일 때 사용하는 클래스.
@Bean
메소드 위에 선언해서 반환 객체를 스프링 컨테이너의 Bean으로 등록. (메서드 이름이 Bean의 이름으로 사용.)
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
class MyBean {
public void doSomething() {
System.out.println("....");
}
}
스프링 컨테이너가 @Configration이 붙은 클래스를 빈으로 등록해두고, @Bean이 있는 메소드를 찾아서 빈을 생성.
스프링 빈으로 등록된 다른 클래스 안에서 @Bean으로 등록해도 동작은 하지만,
@Configuration 내부에서 @Bean을 사용해야 싱글톤(singleton)이 보장된다.
1. @Configuration 클래스를 스프링 빈으로 등록
@Configuration 이 붙은 클래스는 설정클래스로 인식되어, 스프링은 이 클래스 내부에 정의된 @Bean 메서드들을 찾아서 처리한다.
2. @Bean 메서드들을 찾아서 빈으로 등록.
스프링은 이 @Bean 메서드들을 호출하여 그 반환값을 빈 객체로 만들어 스프링 컨테이너에 저장.
(등록된 빈은 싱글톤으로 관리)
3. 프록시(proxy)를 사용한 @Bean 메서드 관리.
@Configuration 클래스를 사용할 때 스프링은 내부적으로 프록시 객체를 생성하여 @Bean 메서드들의 호출을 가로챔.
따라서, @Bean 메서드가 여러번 호출되더라도 스프링은 이미 생성된 싱글톤 빈을 반환.
@Component
스프링에서 Bean을 자동으로 등록하기 위해 사용하는 어노테이션.
하위(메타) 어노테이션으로 @Configuration, @Controller, @Service, @Repository 등이 있음.
=> @Component의 모든 기능을 상속하고 추가적인 기능들이 들어간 어노테이션.
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public void doSomething() {
System.out.println("......");
}
}
@Autowired
이렇게 자동으로 해당 클래스의 인스턴스가 빈으로 등록이 되면, 이후 @Autowired 를 사용해서 의존성 주입.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MyService {
private final MyComponent myComponent;
@Autowired
public MyService(MyComponent myComponent) {
this.myComponent = myComponent;
}
public void useMyComponent() {
myComponent.doSomething();
}
}
MyService 클래스가 @Autowired 를 사용해서 MyComponent 의 인스턴스를 MyService에 주입,
useMyComponent 메서드에서 MyComponent 의 메서드를 사용할 수 있다.
'Spring > 공부공부' 카테고리의 다른 글
[Spring] Quartz 스케줄러 (0) | 2024.11.26 |
---|---|
[Spring] @Async 비동기 처리 ( SimpleAsyncTaskExecutor ) (0) | 2024.10.24 |
[Spring] 뷰 리졸버(View Resolver) 설정 (https 오류) (0) | 2024.09.25 |
[Spring / HTTP] ResponseEntity (0) | 2024.06.20 |
[Spring] Bean의 생명주기 / @PostConstruct (0) | 2024.03.21 |