스프링 빈을 생성할 때마다 @ Component 어노테이션을 추가 했었습니다.
이밖에도 사용할 수 있는 어노테이션은 많습니다.
@Component는 제네릭 어노테이션으로 모든 클래스에 적용할 수 있습니다.
특정 클래스에 대해 스프링 빈을 생성한다면 @Component를 추가할 수 있습니다.
이것이 모든 스프링 스테레오타입 어노테이션의 이본입니다.
@service
일반적으로 어노테이션된 클래스가 비즈니스 로직을 가지고 있다는 것을 가르킵니다.
즉 클래스가 비즈니스 로직을 가지고 있다면 @Component 대신 @Service를 사용할 수있습니다.
@Controller
클래스가 controller인 경우 가령 웹 컨트롤러 라면 자주 사용할 어노테이션은 @Controller 입니다
웹 애플리케이션과 REST API에서 컨트롤러를 정의하는 데 쓰입니다.
@Repository
빈이 데이터베이스에 데이터 저장이나 데이터 검색, 데이터 조작 등을 요청하는 경우가 있습니다
이때 클래스에 @Component대신 @Repository 어노테이션을 추가할 수 있습니다.
가능한 가장 정확한 어노테이션을 사용할 것을 추천드립니다.
위 모든 경우에 해당하지 않는다면 제네릭 어노테이션인 @Component 을 사용합니다
가능한 정확한 어노테이션을 사용해야 하는이유
1.정확한 어노테이션을 사용하면 의도에 대해 더 많은 프레임워크에 제공할 수 있기 때문입니다.
특정 클래스가 무엇을 하는지에 대한 더 많은 정보를 제공합니다
2.추후에 AOP, 즉 관점 지향 프로그래밍을 사용하여 어노테이션을 감지하고 추가 행동을 덧붙일수 있기 때문입니다.
스프링 프레임워크가 자동으로 하는일을 예로 @Repository 어노테이션을 갖고 있다면 JDBC 예외 전환 기능에서
자동으로 와이어링하게 됩니다.
@Configuration | 클래스가 1개 이상의 @Bean 메소드를 선언하고 스프링 컨테이너로 처리되어 빈 정의를 생성 많은 메소드를 정의할 수 있으며, 이메소드에 @Bean어노테이션을 추가할 수있습니다. 스프링은 자동으로 모든 값에 대한 빈을 생성하는데, 이빈은 메소드에 의해 반환됩니다. |
@ComponentScan | 특정 패키지를 정의하여 컴포넌트를 스캔할 수 있습니다. 스프링 프레임워크는 어디에서 모든 컴포넌트를 정의하고 있는지 알아야 합니다 이것이 바로 @ComponentScan 을통해 할수 있는 일입니다 패키지를 지정하지 않으면 이 이노테이션ㅇㄹ 선언한 클래스의 패키지에서 스캔이 이루어지게 됩니다.그리고 하위 패키지에서도 스캔을 합니다 |
@Bean | |
@Component | 어노테이션된 클래스가 Component라는 것을 나타냅니다 @Component클래스가 @ComponentScan의 일부라면 스프링 빈은 이에 대해 생성될 겁니다. |
@Service | @Component의 한종류로 어노테이션된 클래스가 비즈니스 로직을 가지고 있다는 것을 나타냅니다. |
@Controller | @Component 한 종류로 어노테이션된 클래스가 Controller임을 나타냅니다. Controller의 예로는 웹 컨트롤러가 있습니다 대체로 이것은 웹 애플리케이션과 REST API에서 컨트롤러를 정의하는 데 쓰입니다. |
@Repository | @Component의 한 종류입니다. 어노테이션된 클래스가 데이터베이스에서 데이터 검색 또는 데이터 조작에 쓰인다는 것을 가리킵니다. |
@Primary | 여러 후보가 단일 값 의존성을 자동 와이어링할 자격이 있는 경우 bean에 우선권을 부여해야 한다는 사실을 나타냅니다. 우선권을 부여할때 쓰는 어노테이션 입니다. |
@Qualifier | 와이어링 시 후보 빈에 대한 Qualifier로서 필드 또는 매개변수에서 쓰입니다. Qualifier는 모든 컴포넌트에 추가할수 있으며 Qualifier를 이용하여 자동 와이어링을 할 수 있습니다. 매우 구체적으로 하나의 빈을 적용시킵니다. |
@Lazy | 일반적으로 스프링 빈은 이른 시기에 초기화 됩니다 컨텍스트가 실행되자마자 초기화 됩니다 하지만 초기화를 지연해야 하는경우,@Lazy 어노테이션을 활용합니다. |
@Scope(value= ConfigurableBeanFactory.SCOPE_PROTOTYPE) 프로토타입 유효범위 |
특정 컴포넌트에서 프로토타입 유효 범위를 정의하는 방법입니다 이 특정 방식은 빈을 프로토타입으로 정의합니다. 프로토 타입이란 빈을 참조할 때마다 새 인스턴스가 생성 됩니다. 하지만 휴효 범위 기본값은 싱글톤 입니다. @Scope 어노테이션을 갖고 있지 않거나 싱글톤 유효 범위로 값을 사용하여 @Scope 어노테이션을 지정하는 경우 IoC 컨테이너당 특정 인스턴스를 단 하나만 갖게 됩니다. 빈을 100번 참조하더라도 유효 범위가 싱글톤이라면 동일한 인스턴스가 사용될 겁니다. |
@PostConstruct | 의존성 주입이 완료되어 초기화가 수행된 후 실행되는 메소드를 식별합니다 결국 초기화를 수행해야 하는 경우, 모든 의존성 빈으로 주입됩니다 데이터베이스에서 값을 몇개 검색하는 경우, 모든 의존성이 준비되자마자 @PostConstruct를 사용할 수 있습니다. |
@PreDestroy | 콜백 알림을 수신하는 메소드를 식별합니다 이 콜백 알림은 인스턴스가 컨테이너에 의해 제거되고 있다는 신호를 알려줍니다. 일반적으로 특정 빈이 보유하고 있는 리소스를 해제하는 데 사용됩니다. 컨테이너 또는 스프링 IoC 컨텍스트에 의해 빈이 제거되기 전에 @PreDestroy로 어노테이션된 메소드를 호출하는 건데 헤제할 리소스가 있거나 정리를 해야 하는 경우 , @PreDestroy로 어노테이션된 메소드에서 구현하는 것이 가장좋습니다 |
@Named | CDI 어노테이션을 구현합니다 @Named는 CDI 어노테이션으로@Component와 유사합니다. |
@Inject | @Inject는 @Autowired와 매우 유사합니다. |
'Spring > Spring Framework' 카테고리의 다른 글
스프링 시큐리티 (회원가입+ 로그인 /로그아웃) (0) | 2023.03.04 |
---|---|
빈 생명주기 관리하기 (@PostConstruct, @PreDestroy) (0) | 2023.02.27 |
스프링 프레임워크 중요한 용어 (0) | 2023.02.27 |
의존성주입 (0) | 2023.02.27 |
@Controller와 @RestController +@GetMapping (0) | 2023.02.19 |