본문 바로가기
자바,스프링 - Java,Spring Framework

Spring의 Bean 관련 annotation @Bean, @Component, @Configuration, @Service, @Controller, @Repository

by devscb 2023. 5. 21.
반응형

Spring의 Bean 관련 annotation @Bean, @Component, @Configuration,  @Service, @Controller, @Repository


목차
1. annotation이란? java @
2. Spring Bean과 @Bean
3. @Component
4. @Configuration, @Controller, @Service, @Repository




1. annotation이란? java @


annotation을 구글에서 검색해보면 뜻이 "주석" 이란 뜻으로 나옵니다.
그러나, 프로그래밍에서 일반적으로 쓰이는 주석과는 다릅니다.
무엇인가를 설명하기 위한 주석( /* */ 나 //)은 영어로는 comment(코멘트)라고 합니다.

자바에서의 annotation(어노테이션)은 주석과는 달리, 코드사이에 쓰여서 특별한 의미를 가지거나 기능을 수행할 수 있도록 하는 기술입니다.
코딩시 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있습니다.

다음은 어노테이션의 주된 용도입니다

1) 컴파일러에 대한 정보 - 컴파일러가 오류를 탐지하거나 경고를 억제하는 데 사용할 수 있다.
2) 컴파일 시간 및 배포 시간 처리 - 소프트웨어 도구는 주석 정보를 처리하여 코드, XML 파일 등을 생성할 수 있다.
3) 런타임 처리 - 일부 어노테이션은 런타임에 검사할 수 있다.

어노테이션은 @{문자열} 로 사용되며, Java built in 어노테이션은 다음과 같은 것들이 있습니다.

@Override : 컴파일시 오버라이딩이 잘 된 형식인지 확인
@SuppressWarnings : 컴파일 경고를 사용하지 않도록 설정
@Deprecated : 어떤 이유로 사라지며 대신 어떻게 사용하라는 내용을 담아줄 수 있다. Javadoc을 보는 사용자에게 알려준다.


어노테이션은 개발자가 추가적으로 개발할 수 있으며, 이 부분에 대해서는 다음에 기회가 되면 다뤄보겠습니다.


2. @Bean, bean 어노테이션과 Spring Bean, @Configuration


@Bean은 메소드 수준의 어노테이션이으로, Spring Bean을 등록하기 위한 어노테이션입니다.
Spring Bean이란 스프링이 관리하는 오브젝트로, 스프링 프레임워크 컨테이너에 의해 인스턴스화되고, 구성되고, 관리되는 객체입니다.

Spring에서 Framework에서 아래와 같은 Bean을 등록해보려고 합니다.


<beans>
    <bean name="transferService" class="com.acme.TransferServiceImpl"/>
</beans>



@Bean을 이용하여 등록하려 한다면, 아래와 같이 코드를 작성하면 됩니다.


@Configuration
public class AppConfig {
    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }
}


@Configuration은 설정파일을 만들기 위한 어노테이션 또는 Bean을 등록하기 위한 어노테이션입니다.


3. @Component, component 어노테이션



@Component 어노테이션은 스프링이  우리가 작성한 커스텀 bean을 자동으로 감지할 수 있도록 하는 어노테이션입니다.

@Component 어노테이션을 사용하면, 스프링은 다음과 같은 로직으로 동작합니다.
1) @Component 어노테이션이 달린 클래스에 대한 응용 프로그램을 검색한다.
2) @Componnet 어노테이션이 달린 클래스를 인스턴스화하고 지정된 종속성을 주입한다. (Bean 생성및 Bean 주입)
3) 2에서 생성된 인스턴스(Bean)이 필요한곳에 injection 됩니다.



4. 다양한 어노테이션 :  @Controller, @Service, @Repository


스프링에서는 몇가지 특별한 @Component 관련 annotation을 제공하는데요,
그 중에 대표적인 것들이 @Controller, @Service, @Repository 가 있습니다.
모두 @Component와 동일하게 Bean으로 등록되고, Bean을 주입할 수 있는 동일한 기능을 제공합니다.

각각은 다음과 같은 의미로 사용됩니다.
@Controller : "MVC Controller" 임을 나타냄
@Service : "서비스" 임을 나타냄
@Repository : "데이터를 저장하는 리포지토리" 임을 나타냄

각각은 클래스를 선언하기 전에 어노테이션을 명시할 수 있으며,
아래와 같이 사용할 수 있습니다.


@Controller
public class ControllerExample {
}

@Service
public class ServiceExample {
}

@Repository
public class RepositoryExample {
}



@Component를 써도 되는데, 왜 @Controller, @Service, @Repository를 따로 쓰느냐에 대해서는,
각 어노테이션에 대해 어떤 클래스인지 분류를 명확히 할 수 있고,
특정 속성값들을 적용하는 등을 수행하기 위해 사용하는 측면도 있습니다.
예를 들어, @Controller의 경우는 아래와 같이 @RequestMapping과 같이 쓰여서
어떤 request url 을 mapping하는지 자동으로 등록될 수 있도록 하는 역할을 해 줄 수 있습니다.


@Controller
public class SpringMemberController {
    @RequestMapping("/spring/members")
    private ModelAndView process() {
        return new ModelAndView("form");
    }
}



나머지 어노테이션에 대해서도 시간이 된다면 더 다뤄볼 수 있도록 하겠습니다.
#component,#@component,#@service,#@repository,#service,#repository,#bean,#@bean,#component,#@component,#annotation,#어노테이션

https://devscb.com/post/171

 

Spring's bean-related annotations @Bean, @Component, @Configuration, @Service, @Controller, @Repository

Spring’s bean-related annotations @Bean, @Component, @Configuration, @Service, @Controller, @Repository What is annotation? java @If you search for annotation on Google, it means “annotation.”However

devscb.com

 

728x90
반응형

댓글