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.)