μ€νλ§μ κ°μ²΄ 컨ν μ΄λ
BeanFactory
- κ°μ²΄ μμ±κ³Ό κ²μμ λν κΈ°λ₯ μ μ
getBean()
: μμ±λ κ°μ²΄λ₯Ό κ²μνλλ° νμν λ©μλ- κ°μ²΄ κ²μ μ΄μΈμλ μ±κΈν€μΈμ§ νλ‘ν νμ λΉμΈμ§ νμΈνλ κΈ°λ₯λ μμ
AnnotationContext
- λ©μμ§, profile, νκ²½ λ³μ λ±μ μ²λ¦¬ν μ μλ κΈ°λ₯μ μΆκ°λ‘ μ©‘μ
μμ‘΄μ΄λ?
DIλ₯Ό ν΅ν μμ‘΄ μ²λ¦¬
μμ‘΄μ΄λ?
- ν ν΄λμ€κ° λ€λ₯Έ ν΄λμ€μ λ©μλλ₯Ό μ€νν λ μμ‘΄νλ€κ³ νν
-
λ³κ²½μ μν΄ μν₯μ λ°λ κ΄κ³λ₯Ό μλ―Έ
- DIλ μμ‘΄νλ κ°μ²΄λ₯Ό μ§μ μμ±νμ§ μκ³ , μμ‘΄ κ°μ²΄λ₯Ό μ£Όμ λ°λ λ°©μμ μ¬μ©
- DIλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μ£Όμ νλ©΄ μ μ§λ³΄μμ±μ΄ λ μ¬λΌκ°λ€.
μ€νλ§μ DI μ€μ
- μ€νλ§μ DIλ₯Ό μ΄μ©ν΄μ κ°μ²΄λ₯Ό μλ‘ μ°κ²°ν΄μ£Όλ 쑰립기μ΄λ€.
- νΉμ νμ μ ν΄λμ€λ§ μμ±νλ μ‘°λ¦½κΈ°κ° μλ λ²μ© 쑰립기μ΄λ€.
μ€μ ν΄λμ€
@Configuration
public class AppCtx {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
@Bean
public MemberRegisterService memberRegSvc() {
return new MemberRegisterService(memberDao()); // memberDao() κ° μμ±ν κ°μ²΄λ₯Ό μ£Όμ
}
@Bean
public ChangePasswordService changePwSvc() {
ChangePasswordService pwsSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao());
return pwdSvc;
}
}
@Configuration
: μ€νλ§ μ€μ ν΄λμ€@Bean
: ν΄λΉ λ©μλκ° μμ±ν κ°μ²΄λ₯Ό μ€νλ§ λΉμΌλ‘ μ€μ - λ©μλ μ΄λ¦μ λΉ κ°μ²΄μ μ΄λ¦μΌλ‘ μ¬μ©
μ€μ ν΄λμ€λ§ λ§λ€μ΄μ λλλ κ²μ΄ μλ, μ€μ ν΄λμ€λ‘ 컨ν μ΄λλ₯Ό μμ±ν΄μΌ νλ€.
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppCtx.class)
// ...
MemberRegisterService regSvc = ctx.getBean("memberRegSvc", MemberRegisterService.class)
- 컨ν
μ΄λλ₯Ό μμ±νλ©΄
getBean()
λ₯Ό μ΄μ©ν΄ μ¬μ©ν κ°μ²΄λ₯Ό ꡬν μ μμ - μ€νλ§ μ»¨ν
μ΄λ
ctx
λ‘ν° μ΄λ¦μ΄ βmemberRegSvcβμΈ λΉ κ°μ²΄λ₯Ό ꡬν¨
DI λ°©μ - μμ±μ λ°©μ
public class StationService {
private StationDao stationDao;
public StationService(StationDao stationDao) {
this.stationDao = stationDao;
}
}
DI λ°©μ - μμ±μ λ°©μ
public class StationService {
private StationDao stationDao;
public void setStationDao(StationDao stationDao) {
this.stationDao = stationDao;
}
}
@Configuration μ€μ ν΄λμ€μ @Bean μ€μ κ³Ό μ±κΈν€
@Configuration
public class AppCtx {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
@Bean
public MemberRegisterService memberRegSvc() {
return new MemberRegisterService(memberDao()); // memberDao() κ° μμ±ν κ°μ²΄λ₯Ό μ£Όμ
}
@Bean
public ChangePasswordService changePwSvc() {
ChangePasswordService pwsSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao());
return pwdSvc;
}
}
memberDao()
λ λ§€λ² μλ‘μ΄ MemberDao κ°μ²΄λ₯Ό μμ±ν΄μ λ°ννλ€.
κ·Έλ¬λ©΄ memberRegSvc()
κ° λ°ννλ κ°μ²΄μ changePwSvc()
κ° λ°ννλ κ°μ²΄λ μλ‘ λ€λ₯Έ MemberDao κ°μ²΄λ₯Ό μ¬μ©νλ κ²μΈκ°?
π
ββοΈ μ€νλ§ μ»¨ν
μ΄λκ° μμ±ν λΉμ μ±κΈν€ κ°μ²΄μ΄λ€.
@Bean
μ΄ λΆμ λ©μλμ λν΄ ν κ°μ κ°μ²΄λ§ μμ±νκ³ μ΄λ₯Ό 보κ΄νλ€κ°, λμΌν κ°μ²΄λ₯Ό λ°ννλ€.
λ κ° μ΄μμ μ€μ νμΌ μ¬μ©νκΈ°
μ€νλ§μ ν κ° μ΄μμ μ€μ νμΌμ μ΄μ©ν΄μ 컨ν μ΄λλ₯Ό μμ±ν μ μλ€.
@Configuration, @Autowired
AppConf1
@Configuration
public class AppConf1 {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
@Bean
public MemberPrinter memberPrinter() {
return new MemberPrinter();
}
}
AppConf2
@Configuration
public class AppConf2 {
@Autowired
private MemberDao memberDao;
@Autowired
private MemberPrinter memberPrinter;
@Bean
public MemberRegisterService memberRegSvc() {
return new MemberRegisterService(memberDao);
}
@Bean
public ChangePasswordService changePwdSvc() {
ChangePasswordService pwdSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao);
return pwdSvc;
}
@Bean
public MemberListPrinter listPrinter() {
return new MemberListPrinter(memberDao, memberPrinter);
}
@Bean
public MemberInfoPrinter infoPrinter() {
MemberInfoPrinter infoPrinter = new MemberInfoPrinter();
infoPrinter.setMemberDao(memberDao);
infoPrinter.setPrinter(memberPrinter);
return infoPrinter;
}
@Bean
public VersionPrinter versionPrinter() {
VersionPrinter versionPrinter = new VersionPrinter();
versionPrinter.setMajorVersion(5);
versionPrinter.setMinorVersion(0);
return versionPrinter;
}
}
@AutoWired
: μ€νλ§μ μλ μ£Όμ κΈ°λ₯. μ€νλ§ μ€μ ν΄λμ€ νλμ ν΄λΉ μ΄λ Έν μ΄μ μ λΆμ΄λ©΄ ν΄λΉ νμ λΉμ μ°Ύμμ νλμ ν λΉνλ€.- AppConf2μ memberDao νλμλ AppConf1 ν΄λμ€μμ μ€μ ν λΉμ΄ ν λΉλλ€.
- μ€νλ§ μ»¨ν
μ΄λλ AppConf2 κ°μ²΄λ₯Ό λΉμΌλ‘ λ±λ‘νκ³
@AutoWired
κ° λΆμ λμμ λν΄ μλ§μ λΉμ μλμΌλ‘ μ£Όμ νλ€.
μ€μ ν΄λμ€κ° μ¬λ¬κ°μΌ λ μ€νλ§ μ»¨ν μ΄λλ₯Ό μμ±νλ λ°©λ²μ?
ctx = new AnnotationConfigApplicationContext(AppConf1.class, AppConf2.class)
- AnnotationConfigApplicationContextμ μμ±μμ μΈμλ κ°λ³ μΈμμ΄λ€.
@Import μ΄λ Έν μ΄μ μ¬μ©
- ν¨κ» μ¬μ©ν μ€μ ν΄λμ€λ₯Ό μ§μ
@Configuration
@Import({AppConf2.class})
public class AppConfImport {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
@Bean
public MemberPrinter memberPrinter() {
return new MemberPrinter();
}
}
- μ§μ ν ν΄λμ€λ ν¨κ» μ¬μ©νκΈ° λλ¬Έμ μ€νλ§ μ»¨ν μ΄λλ₯Ό μμ±ν λ AppConfi2λ₯Ό μ§μ ν νμκ° μλ€.
getBean()
VersionPrinter versionPrinter = ctx.getBean("versionPrinter", VersionPrinter.class)
- 첫λ²μ§Έ μΈμλ λΉμ μ΄λ¦
- λλ²μ§Έ μΈμλ λΉμ νμ
- λΉμ μ΄λ¦μ μ§μ νμ§ μκ³ νμ
λ§μΌλ‘ λΉμ ꡬν μλ μλ€.
- λμ ν΄λΉ νμ μ λΉ κ°μ²΄κ° ν κ°λ§ μ‘΄μ¬ν΄μΌνλ€.
μ£Όμ λμ κ°μ²΄λ₯Ό λͺ¨λ λΉ κ°μ²΄λ‘ μ€μ ν΄μΌνλ?
π
ββοΈ μ€νλ§ μ»¨ν
μ΄λκ° κ°μ²΄λ₯Ό κ΄λ¦¬νλμ§ μ¬λΆλ§ λ€λ₯Ό λΏμ΄λ€.
μ°Έκ³ λ‘ μ€νλ§ μ»¨ν
μ΄λλ μλ μ£Όμ
, λΌμ΄νμ¬μ΄ν΄ κ΄λ¦¬ λ± κ°μ²΄ μμ± μΈμλ κ°μ²΄ κ΄λ¦¬λ₯Ό μν λ€μν κΈ°λ₯μ μ 곡νλ€.