1. 스프링 빈이란?
스프링 빈이란 Sping IoC 컨테이너가 관리하는 자바 객체를 말한다.
우리가 알던 기존의 Java Progrmming 에서는 Class를 생성하고 new를 입력하여 원하는 객체를 직접 생성한 후에 사용했다. 하지만 Spring에서는 new를 이용하여 직접 객체를 생성하지 않고 Sping에 의해 관리당하는 자바 객체를 사용한다. 이렇게 Spring에 의해 생성되고 관리되는 자바 객체를 빈이라고 한다.
2. 스프링 빈 등록 방법 2가지
1. 컴포넌트 스캔과 자동 의존 관계 설정
@Component, @Controller, @Service, @Repository 와 같은 어노테이션을 사용하여 스프링 빈에 등록할 수 있다. @Autowired 를 이용하면 의존 관계를 자동으로 설정할 수 있다.
▶ @Component:
▶ @Controller:
▶ @Service:
▶ @Repository:
▶ @Autowired: @Component를 사용한 Bean의 의존성 주입
// HelloController.java
@Controller
public class HelloController {
// Http Get method 의 /hello 경로로 요청이 들어올 때 처리할 Method를 아래와 같이 @GetMapping Annotation을 사용하여 Mapping을 사용할 수 있습니다.
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "This is data!!");
return "hello";
}
}
<컴포넌트 스캔 원리>
@Component 어노테이션이 있으면 스프링 빈으로 자동 등록된다.
@Component 를 포함하는 @Controller, @Service, @Repository는 스프링 빈으로 자동 등록된다.
컴포넌트 스캔 범위는 main을 포함하는 패키지와 그 하위 패키지로 한정된다.
2. Java Config 파일에 직접 스프링 빈 등록
▶ @Configuration: 스프링 설정 클래스를 선언하는 어노테이션
▶ @Bean:
// Hello.java
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController() {
return new SampleController;
}
}
스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.
실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
정형화되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.
@Autowired를 통한 DI는 스프링이 관리하는 객체(즉, 스프링 빈으로 등록된 것)에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다!
[참고] http://melonicedlatte.com/2021/07/11/232800.html
[참고] https://kjh95.tistory.com/59
'Spring > Spring 학습' 카테고리의 다른 글
[Spring Security] CSRF /logout 설정 (0) | 2022.10.11 |
---|---|
[Spring] 스프링의 JDBC(DAO, JDBC, JdbcTemplate, DataSource) (0) | 2022.04.29 |