Spring Framework의 공부 노트【그 1】DI 컨테이너
소개
소재
UserService UserRep PasswdEnc 
종속성 주입(Dependency Injection, DI)
UserService 클래스의 생성자가 UserRep와 PasswdEnc 각각의 구현을 인수로 취한다고 가정합니다. UserServiceImpl 클래스의 사용예는 이하와 같다. PasswdEnc passwdEnc = new PasswdEncImpl();
UserRep userRep = new UserRepImpl();
UserService userService = new UserServiceImpl(passwdEnc, userRep);
DI를 자동으로 수행하는 기반을 DI 컨테이너라고합니다.
Bean 정의 파일
@Configuration 어노테이션이 부여 된 클래스 (Bean 정의 파일)에서 정의를 수행합니다. @Bean 어노테이션이 부여 된 구성 요소를 부여하여 매번 호출하려는 구현을 지정합니다. @Configuration
public class AppConfig{
@Bean
UserRep userRep(){
return new UserRepImpl();
}
@Bean
PasswdEnc passwdEnc(){
return new PasswdEncImpl();
}
@Bean
UserService userService(){
return new UserServiceImpl(userRep(), passwdEnc());
}
}
UserService 인터페이스형의 초기화는 DI 컨테이너를 경유해 편하게 실현할 수 있다. ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// DIコンテナを生成
UserService userService = context.getBean(UserService.class)
// DIコンテナを経由してあらかじめ設定した実装を取得
컴포넌트 스캔
@Component 어노테이션을 부여해 Bean 등록해, 다른 컴퍼넌트로부터 호출하고 싶을 때는 @Autowired 어노테이션을 부여한다. @Component // 自身をBean登録する
public class UserRepImpl implemente UserRep {
// 省略
}
@Component // 自身をBean登録する
public class PasswdEncImpl implemente PasswdEnc {
// 省略
}
@Component // 自身をBean登録するとともに...
public class UserServiceImpl implemente UserService {
@Autowired // 他のBeanを注入する
public UserServiceImpl(UserRep userRep, PasswdEnc passwdEnc)
}
@Autowired (은)는 디폴트로 대상의 형태가 일치하는 Bean 를 DI 컨테이너로부터 찾는다. @Configuration
@ComponentScan("com.example.hoge")
public class AppConfig{
}
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// DIコンテナを生成
UserService userService = context.getBean(UserService.class)
// DIコンテナを経由してあらかじめ設定した実装を取得
계속
참고문헌
Reference
이 문제에 관하여(Spring Framework의 공부 노트【그 1】DI 컨테이너), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/RyomaTaniyama/items/811de580d2de60238c5c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)