자바 코드로 직접 스프링 빈 등록하기
./hello.hellospring/SpringConfig.java
package hello.hellospring;
import hello.hellospring.repository.JdbcTemplateMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
private DataSource dataSource;
@Autowired
public SpringConfig(DataSource dataSource){
this.dataSource = dataSource;
}
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
// return new MemoryMemberRepository();
return new JdbcTemplateMemberRepository(dataSource);
}
}
이렇게 자바로 직접 빈을 등록할 수 있지만, controller같은 경우는 이전 방법과 같이 컴포넌트 스캔(autowired)을 이용해야한다.
참고: DI에는 필드 주입, setter 주입, 생성자 주입 이렇게 3가지 방법이 있다. 의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.
참고: 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.
주의: @Autowired 를 통한 DI는 helloController , memberService 등과 같이 스프링이 관리하는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.
'Back End > Spring' 카테고리의 다른 글
Spring - 웹 MVC 예제 (회원 등록) (0) | 2023.07.04 |
---|---|
Spring - 웹MVC 예제 (홈화면 추가) (0) | 2023.07.04 |
Spring - 스프링 빈과 의존관계1 (0) | 2023.07.04 |
Spring - 회원관리예제 (회원 서비스 테스트) (0) | 2023.07.04 |
Spring - 회원관리예제 (회원 서비스 개발) (0) | 2023.07.04 |