@Configuration : 빈 설정 메타 정보를 담고 있는 클래스 선언
@Bean : 클래스 내의 메서드를 정의하여 새로운 빈 객체를 정의할 때 사용
- @Bean과 메서드 이름을 이용해 컨테이너가 사용할 빈 객체를 생성
- 자바 설정은 빈 객체를 직접 생성
- @Bean 매서드를 불러들여서 객체를 취득
- 매서드 이름이 memberDAO를 빈의 식별자로 사용
- XML에서는 <
property
> or <constructor-arg
> 태그를 이용해 설정 But 자바 설정에서는 직접 의존 객체를 주입
di-java 경로 구성
Java 코드 설정 - @Bean 매서드를 불러서 취득
JavaConfig.java
package org.tukorea.di.config;
import org.tukorea.di.persistence.MemberDAO;
import org.tukorea.di.persistence.MemberDAOImpl;
import org.tukorea.di.service.MemberService;
import org.tukorea.di.service.MemberServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration
@Configuration
public class JavaConfig {
@Bean
public MemberDAO memberDAO() {
return new MemberDAOImpl();
}
@Bean(name="service")
public MemberService memberService() {
return new MemberServiceImpl(memberDAO());
}
}
package org.tukorea.di.main;
import org.tukorea.di.config.JavaConfig;
import org.tukorea.di.domain.StudentVO;
import org.tukorea.di.service.MemberService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MemberSampleMain {
private static ApplicationContext ctx = null;
public static void main(String[] args) throws Exception {
System.out.println("안녕하세요 DI-JavaConfig");
ctx = new AnnotationConfigApplicationContext(JavaConfig.class); //자바설정코드 클래스
MemberService memberService = ctx.getBean("service", MemberService.class);
StudentVO vo = new StudentVO();
vo.setId("kanadara");
StudentVO member = memberService.readMember("kanadara");
System.out.println(member);
}
package org.tukorea.di.service;
import org.tukorea.di.domain.StudentVO;
import org.tukorea.di.persistence.MemberDAO;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean;
public class MemberServiceImpl implements MemberService, InitializingBean, DisposableBean {
private MemberDAO memberDAO;
.................................................................................................................................
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Init MemberServiceImple");
}
@Override
public void destroy() throws Exception {
System.out.println("Destroy MemberServiceImple");
}
}
- singleton : 기본 설정, 컨테이너당 한 개의 빈 객체 생성
- prototype : 빈을 요청할 때마다 빈 객체 생성
- request : 각 요청용 한개의 빈 객체 생성
- session : 각 세션용 한개의 빈 객체 생성
- application : 서블릿 context 생성될 때 빈 객체 생성