package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import spring.ChangePasswordService;
import spring.MemberDao;
import spring.MemberInfoPrinter;
import spring.MemberListPrinter;
import spring.MemberPrinter;
import spring.MemberRegisterService;
import spring.VersionPrinter;
@Configuration
public class AppCtx {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
//ChangePasswordService클래스의 memberDao 필드에 @AUTOWIRED 애노테이션을 붙이기 전
@Bean
public ChangePasswordService changePwdSvc() {
ChangePasswordService pwdSvc = new ChangePasswordService();
pwdSvc.setMemberDao(memberDao());
return pwdSvc;
}
//ChangePasswordService클래스의 memberDao 필드에 @AUTOWIRED 애노테이션을 붙인 후
@Bean
public ChangePasswordService changePwdSvc() {
ChangePasswordService pwdSvc = new ChangePasswordService();
return new ChangePasswordService();
}
}
@Autowired 애노테이션을 memberDao 필드에 붙였으므로 ChangePasswordService 클래스의 setMemberDao() 메서드를 호출해서 MemberDao 빈 객체를 주입하지 않아도 스프링이 MemberDao타입의 빈 객체를 주입하기 떄문이다.
@Autowired
public void setMemberDao(MemberDao memberDao) {
this.memDao = memberDao;
}
@Autowired
@Qualifier("printer")
public void setPrinter(MemberPrinter printer) {
this.printer = printer;
}
@Autowired 애놑이션은 메서드에도 붙일 수 있다.
빈 객체의 메서드에 @Autowired 애노테이션을 붙이면 스프링은 해당 메서드를 호출한다. 이떄 메서드 파라미터 타입에 해당하는 빈 객체를 찾아 인자로 주입한다.