DI - XML 설정 방법 코드
XML을 이용한 DI
di-xml 예제 프로젝트 구성
di-xml 예제 프로젝트 만들기
자바 버전 설정
di-xml 프로젝트 환경 : POM.xml
- spring-context -> Spring 프레임워크 버전
- 로깅 프레임워크 → slf4j-api, logback-classic
-
src/main/resources/applicationContext.xml 생성
-
src/main/resources/applicationContext.xml 네임스페이스 추가
beans 네임 스페이스 : 빈(컴포넌트) 설정
C 네임 스페이스 : 생성자 인자를 <bean
> 요소 어트리뷰트로 선언
context 네임 스페이스 : 빈 검색과 어노테이션 설정 (ex. context:component-scan)
di-xml 예제 프로젝트의 DI 애플리케이션 구성
- DI를 이용한 인터페이스 기반의 컴포넌트화 완성
- 인터페이스와 컨테이너 이용하여 클래스 구현 -> 변경 or 확장되더라도 해당 클래스를 이용하는 다른 클래스에 영향 범위를 최소화
예제 코드
StudentVO.java
package org.tukorea.di.domain;
public class StudentVO {
private String id;
private String passwd;
private String username;
private String snum;
private String depart;
private String mobile;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSnum() {
return snum;
}
public void setSnum(String snum) {
this.snum = snum;
}
public String getDepart() {
return depart;
}
public void setDepart(String depart) {
this.depart = depart;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "StudentVO [id=" + id + ", passwd=" + passwd + ", username=" + username + ", snum=" + snum + ", depart="
+ depart + ", mobile=" + mobile + ", email=" + email + "]";
}
}
MemberrDAO.java
package org.tukorea.di.persistance;
import org.tukorea.di.domain.StudentVO;
public interface MemberDAO {
public StudentVO read (String id) throws Exception;
public void add(StudentVO student) throws Exception;
}
MemberDAOImpl.java
package org.tukorea.di.persistance;
import java.util.HashMap;
import java.util.Map;
import org.tukorea.di.domain.StudentVO;
public class MemberDAOImpl implements MemberDAO {
public Map<String, StudentVO> storage = new HashMap<String, StudentVO>();
@Override
public StudentVO read(String id) throws Exception {
// TODO Auto-generated method stub
return storage.get(id);
}
@Override
public void add(StudentVO student) throws Exception {
// TODO Auto-generated method stub
storage.put(student.getId(), student);
}
}
MemberService.java
package org.tukorea.di.service;
import org.tukorea.di.domain.StudentVO;
public interface MemberService {
public StudentVO readMember(String userid) throws Exception;
public void addMember(StudentVO student) throws Exception;
}
MemberServiceImpl.java
package org.tukorea.di.service;
import org.tukorea.di.domain.StudentVO;
import org.tukorea.di.persistance.MemberDAO;
public class MemberServiceImpl implements MemberService {
private MemberDAO memberDAO;
public MemberServiceImpl(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
public StudentVO readMember(String userid) throws Exception {
return memberDAO.read(userid);
}
public void addMember(StudentVO student) throws Exception {
memberDAO.add(student);
}
}
MemberSampleMain.java
package org.tukorea.di.main;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.tukorea.di.domain.StudentVO;
import org.tukorea.di.service.MemberService;
public class MemberSampleMain {
private static ApplicationContext ctx = null;
public static void main(String[] args) throws Exception {
System.out.println("안녕하세요 DI-XML");
ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml"); // 스프링 컨테이너 생성
MemberService memberService = (MemberService)ctx.getBean("memberService"); // 스프링 컨테이너에서 컴포넌트를 가져온다
StudentVO vo = new StudentVO();
vo.setId("kanadara");
memberService.addMember(vo);
StudentVO member = memberService.readMember("kanadara");
System.out.println(member);
}
}
Dependency Injection 의존성 주입 방식
생성자 기반 의존성 주입 (Constructor based dependency Injection)
- 생성자의 인수를 사용해 의존성 주입
- XML에 <
constructor-arg
>태그를 사용하여 주입할 컴포넌트 설정
설정자 기반 의존성 주입(Setter based dependency Injection)
- 메서드의 인수를 통해 의존성 주입
- XML에 <
property
>요소의 name 속성에 주입할 컴포넌트의 이름을 설정
bean 태그 속성
- id : 오브젝트를 유일하게 하는 ID
- name : 오브젝트명을 정의
- class : id의 실체, 패키지명과 클래스 명으로 구성
- scope : 오브젝트의 스코프를 지정 (singleton, prototype,..)
- parent : 설정을 물려받을 오브젝트 명
- abstract
- true : 인스턴스를 만들지 않고 공통 설정을 정의해두고 싶을 때 지정
- false : 속성 생략 시 기본값. 인스턴스를 만들고 싶을 때 지정
- singleton
- true : 속성 생략 시 기본값. getBean 메서드로 얻는 인스턴스는 싱글턴
- false : getBean 메서드로 얻는 인스턴스는 매번 인스턴스화된 것
- laze-init
- true : 인스턴스 생성을 지연시킴
- false : 속성 생략 시 기본값. BeanFactory 시작 시 인스턴스를 생성
- depend-on : 의존 관계의 대상이 되는 오브젝트가 있는지 검사
- init-method : 메서드 명을 기술함으로써 인스턴스 변수의 설정 후에 호출함
- destroy-method : 메서드 명을 기술함으로써 시스템 종료시 호출됨
- parent : 설정을 물려받을 오브젝트명을 지정
- autowire
- no :속성 생략 시 기본값
- byName : 프로퍼티 명과 일치하는 오브젝트 명의 Bean이 자동으로 인젝션됨
- byType : 프로퍼티 형과 일치하는 Bean이 인젝션됨
- constructor : 생성자를 이용해 인젝션
Author And Source
이 문제에 관하여(DI - XML 설정 방법 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dlwldbs/DI-XML-설정-방법-코드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)