-
Bean이란?
- 스프링 IoC 컨테이너에 의해서 인스턴스화되어 조립되거나 관리되는 객체를 말한다.
- 스프링부트의 경우 @Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로 필요한 빈들을 등록하고 필요한 곳에서 의존관계 주입을 통해 사용하는 것이 일반적이다.
- Bean 등록
1. xml 설정 파일에 등록
<bean id="aaa" class="com.example.aaa.AAA">
<property name="prop"></property>
</bean>2. Annotation을 이용한 등록(class를 bean으로 등록)
// @Component
// @Service
// @Controller
@Repository
public interface HelloWorldMapper { HelloWorld selectHelloWorld(); }※ Controller, Service, Repository는 Component을 상속받는다. 해당 어노테이션으로 등록된 클래스들은 스프링 컨테이너에 의해 자동으로 생성되어 스프링 빈으로 등록된다.
@Component 컴포넌트를 나타내는 일반적인 스테리오 타입으로 태그와 동일한 역할을 함 @Repository 퍼시스턴스 레이어, 영속성을 가지는 속성(파일, 데이터베이스)을 가진 클래스 @Service 서비스 레이어, 비지니스 로직을 가진 클래스 @Controller 프리젠테이션 레이어, 웹 어플리케이션에서 웹 요청과 응답을 처리하는 클래스 3. 자바코드로 bean 등록하기
@Configuration
public class ConfigurationBeanFactory {
@Bean
public HelloWorld helloWorld() {
return new HelloWorld();
}
}→ 이미 만들어진 객체를 bean으로 등록하는 것
→ 클래스 레벨에서는 @Configuration을 붙이고, 메서드 레벨에서는 @Bean Annotation을 붙인다. 메서드명이 각각 bean의 이름이 된다. 리턴되는 객체를 스프링 컨테이너가 빈으로 활용한다.
◎ 빈 의존관계 주입 Annotation
@Autowired 정밀한 의존관계 주입이 필요한 경우에 유용.
@Autowired는 프로퍼티, setter 메서드, 생성자, 일반 메서드에 적용 가능.
의존하는 객체를 주입할 때 주로 Type을 이용@Resource 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용
@Resource는 poperty, setter 메서드에 적용 가능
의존하는 객체를 주입할 때 주로 Name을 이용@Value 단순한 값을 주입할 때 사용되는 annotation.
@Value(“Spring”)은 <property.. value="Spring" />와 동일한 역할@Qualifier @Qualifier는 @Autowired annotation과 같이 사용.
@Autowired는 타입으로 찾아서 주입하므로, 동일 타입의 Bean 객체가 여러 개 존재할 때 특정 Bean을 찾기 위해 사용- 필드 주입
@Controller
public class HelloWorldApiController {
@Autowired
private HelloWorldService helloWorldService;
}- 생성자 주입
@Controller
public class HelloWorldApiController {
private HelloWorldService helloWorldService;
@Autowired
public HelloWorldApiController(HelloWorldService helloWorldService) {
this.helloWorldService = helloWorldService;
}
}※ Spring 4.3부터는 클래스의 생성자가 하나이고 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면 @Autowired를 생략할 수 있다.
- Setter 주입
@Controller
public class HelloWorldApiController {
private HelloWorldService helloWorldService;
@Autowired
public void setHelloWorldService(HelloWorldService helloWorldService) {
this.helloWorldService = helloWorldService;
}
}출처
'STUDY > 백엔드' 카테고리의 다른 글
@Mock, @MockBean (0) 2021.02.03 @ControllerAdvice / @RestControllerAdvice (0) 2021.02.03 Mybatis (0) 2020.12.31 Server Log (0) 2020.12.28 Apache Spring boot(내부 tomcat) 연동 (0) 2020.12.24