의존관계 주입2

언젠간·2022년 8월 21일
0

토비의스프링

목록 보기
8/16

일반적인 의존관계 주입

  • 생성자를 이용한 주입
    • 생성자에 파라미터를 만들어주고, DI 컨테이너가 의존할 오브젝트 레퍼런스 넘겨줌.
    • 한 번에 여러 개의 파라미터 받을 수 있음.
	public class UserDao {
      private ConnectionMaker connectionMaker; //초기에 설정하면 사용 중에는 바뀌지 않는 읽기전용 인스턴스 변수

      public UserDao(ConnectionMaker connectionMaker) { //생성자
          this.connectionMaker = connectionMaker;
	}
  • 수정자(Setter) 메소드를 이용한 주입
    • 파라미터로 전달된 값을 내부의 인스턴스 변수에 저장
    • 외부에서 오브젝트 내부의 애트리뷰트 값을 변경하려는 용도로 사용
    • 수정자 메소드가 가장 많이 사용 됨(일반적으로). 이유 : XML로 의존관계 정보 만들 때 편리
 	public class UserDao {
	
      private ConnectionMaker connectionMaker; //초기에 설정하면 사용 중에는 바뀌지 않는 읽기전용 인스턴스 변수

      public void setConnectionMaker(ConnectionMaker connectionMaker) { //파라미터로 받은 오브젝트는 인스턴스 변수에 저장해두도록 만든다.
          this.connectionMaker = connectionMaker;
	}
  • 일반 메소드를 이용한 주입

    • 수정자 메소드와 같이 set으로 시작해야 하거나, 파라미터를 한 개 밖에 사용하지 못하는 제약이 싫다면 여러 개의 파라미터를 갖는 일반 메소드를 DI용으로 사용할 수 있음.
    • 생성자와는 다르게 한 번에 모든 필요한 파라미터를 받지 않아도 된다.

DI 구성이 바뀔 때마다 자바 코드를 수정하고 클래스를 다시 컴파일하는 의존관계 주입 방법(생성자, 수정자, 일반메소드) 이외에도, XML를 이용한 의존관계 설정방법도 있음


XML을 이용한 의존관계 주입

	       JAVA           XML
	  @Configuration  =  <beans>
      @Bean 		  =  <bean>
	- 빈의 이름 : @Bean 메소드 이름이 빈의 이름이다. 이 이름은 getBean()에서 사용된다.
	- 빈의 클래스 : 빈 오브젝트를 어떤 클래스를 이용해서 만들지 정의
    - 빈의 의존 오브젝트(생략가능) : 빈의 생성자나 수정나 메소드를 통해 의존 오브젝트를 넣어준다. 
	@Bean    //-------------------------------------><bean
	public ConnectionMaker 
		connectionMaker() {//----------------------->id="connectionMaker"
		return new DConnectionMaker();//------------>class="~~~...DConnectionMaker"/>
	}
  • XML에서는 < property > 태그를 사용해 의존 관계 설정
  • 프로퍼티 이름은 메소드 이름에서 set 을 제외한 나머지 부분
    • setConnectionMaker() ---> property : connectionMaker
  • property 태그는 name과 ref로 구성

    • name = 프로퍼티 이름
    • ref = 수정자 메소드를 통해 주입해줄 오브젝트의 빈 이름
    userDao.setConnectionMaker(connectionMaker());
    		//<property name = "connectionMaker" ref="connectionMaker"/>
  • 완성된 applicationContext.xml

	<?xml version="1.0" encoding="UTF-8"?>
	<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<bean id="connectionMaker" class="com.toby.dao.DConnectionMaker"/>
	
	<bean id="userDao" class="com.toby.dao.UserDao">
		<property name="connectionMaker" ref="connectionMaker"/>
	</bean>

	</beans>
  • 사용하기 위해서는 GenericXmlApplicationContext를 써야 함
	//ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
	ApplicationContext ac = new GenericXmlApplicationContext("applicationContext.xml");
profile
코딩왕이될사나이

0개의 댓글