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)이 보장된다.
@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] 뷰 리졸버(View Resolver) 설정 (https 오류) (0) | 2024.09.25 |
---|---|
[Spring / HTTP] ResponseEntity (0) | 2024.06.20 |
[Spring] Bean의 생명주기 / @PostConstruct (0) | 2024.03.21 |