JAVA를 이용한 DI 설정
Java를 이용한 DI 설정 방법
Java로 DI 설정
- xml 문법 대신 자바 코드로 빈 설정
- 개발 환경에 따라 설정 방식 선택
- Java로 DI 설정 코드의 장점
- TypeSafe하고 Refactoring에 매우 적합
- 프로퍼티 명 or 클래스 명이 틀렸을 경우 컴파일 에러* 컨테이너 생성 클래스
- AnnotationConfigApplicationContext
주요 Annotation
- XML 설정 없이 자바 코드를 이용해 빈 객체 생성과 빈 객체 간의 의존 관계 설정
@Configuration : 빈 설정 메타 정보를 담고 있는 클래스 선언
@Bean : 클래스 내의 메서드를 정의하여 새로운 빈 객체를 정의할 때 사용
자바 설정과 XML 관계
- @Bean과 메서드 이름을 이용해 컨테이너가 사용할 빈 객체를 생성
- 자바 설정은 빈 객체를 직접 생성
- @Bean 매서드를 불러들여서 객체를 취득
- 매서드 이름이 memberDAO를 빈의 식별자로 사용
- XML에서는 <
property
> or <constructor-arg
> 태그를 이용해 설정 But 자바 설정에서는 직접 의존 객체를 주입
di-java 예제 프로젝트 만들기
-
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());
}
}
- MemberSampleMain.java
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);
}
- di-java 빈 객체의 라이프사이클 테스트
- MemberServiceImpl.java
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");
}
}
빈 객체의 스코프와 라이프 사이클
빈 객체 스코프(Scope)
- 빈이 생성될 수 있는 범위를 설정하기 위해 scope 속성 사용
- singleton : 기본 설정, 컨테이너당 한 개의 빈 객체 생성
- prototype : 빈을 요청할 때마다 빈 객체 생성
- request : 각 요청용 한개의 빈 객체 생성
- session : 각 세션용 한개의 빈 객체 생성
- application : 서블릿 context 생성될 때 빈 객체 생성
빈 객체의 라이프사이클
- 빈 초기화 -> 빈 이용 -> 빈 종료
순으로 진행 - 빈 생성 후 초기화 작업과 빈 종료 전 전처리 과정을 수행할 수 있는 방법 제공
- 빈의 전 처리와 후 처리가 InitializingBean, DisposableBean 인터페이스의 메서드를 통해 실행되는 형태
Author And Source
이 문제에 관하여(JAVA를 이용한 DI 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dlwldbs/JAVA를-이용한-DI-설정저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)