@Component와 @Bean
🌱 스프링이 내 코드를 "일하게" 하려면?
스프링 프레임워크는 기본적으로 스프링 컨테이너가 관리하는 객체들만 다룰 수 있다.
-> "스프링 빈으로 등록이 되어야만, 스프링은 그 코드랑 일을 한다."
스프링 빈을 등록하는 2가지 방법
1. @Component
ex. @Controller, @Service, @Repository
2. @Configuration + @Bean
@Configuration
원래 설정 파일(.xml)이었는데, 자바로 쓴 것
잠깐! .xml 설정 파일은 뭐였을까?
.xml (eXtensible Markup Language)
: 데이터의 의미, 전송을 위해 <태그> </태그> 사이에 있는 글자가 어떤 구성을 나타내는지 표현하기 위해 사용하는 언어 (= 마크업 언어)
- 네트워크로 데이터 전송할 때, 서로 다른 시스템끼리 데이터를 잘 알아보게 하기 위해
- ✨특정 시스템 안에서 데이터의 의미를 나타내는 설정 파일✨
- ..
<->
html : 사용자의 화면에서 <태그> </태그> 사이에 있는 글자가 어떤 구성을 나타내는지 표현하기 위해 사용하는 언어 (= 마크업 언어)
@Configuration
- 어노테이션 위치 : 클래스 상단
- 스프링(부트) 프로젝트 안에서 데이터의 의미를 나타낼게 있나?
[xml 버전]
-> 스프링아 이 클래스는 너가 스프링 빈으로 등록해야 해.
<bean> Prodect 클래스 </bean>
아직 많이들 사용하지만 레거시(=옛날 방식의)
[Java 버전]
-> 스프링아 이 클래스는 너가 스프링 빈으로 등록해야 해.
@Bean 사용
@Configuration
public class AppConfig {
@Bean // 스프링아, 아래 메소드가 반환하는 객체를 스프링 빈으로 등록해줘
public ProductRepository productRepository() {
return new ProductRepository();
}
}
@Repository vs @Configuration + @Bean
@Repository 에는
- @Component가 들어있는 건 당연
- DB랑 연결할 때 기본적으로 필요할 것 같은 예외 처리 (ex. DB명령어=SQL 문법 틀렸을 때, 제약 조건 틀렸을 때 ... )
cf. @Controller, @Service
@Configuration 파일을 스프링이 읽어주는 이유
: 설정 파일이기 전에, 이 파일도 스프링 빈으로 등록되어 있기 때문