반응형

Spring Autowiring by Constructor


(원문 위치 : http://www.tutorialspoint.com/spring/spring_autowiring_byconstructor.htm )

'byType'과 매우 유사하지만 생성자의 인자에 적용된다. Spring container는 XML설정파일에서 outwore 속성(attribute)이 'constructor'로 설정되어진 bean을 찾는다. 긜고 설정파일에서 생성자의 인자가 정확하게 bean이름의 하나와 일치하는 것을 찾고 묶으려고 한다.(wire) 만약 일치하는 것을 찾으면 해당 bean을 삽입(injection)하지만 그렇지 않으면 exception을 발생시킨다.

예를 들면, 만약 설정파일에서 bean 정의가 'constructor'로 autowire가 설정되고 SpellChecker type의 인자중 하나로 생성자를 갖는다면 Spring은 SpellChecker로 이름지어진 bean 정의를 찾고 생성자의 인자로 이것을 사용한다. 남은 인자는 <constructor-arb> 태그를 이용하여 묶을 수 있다.(wire)

[003] HelloWorld Example 강좌를 참조하여 프로젝트를 생성한다.

TextEditor.java:

package com.tutorialspoint;

public class TextEditor {
   private SpellChecker spellChecker;
   private String name;

   public TextEditor( SpellChecker spellChecker, String name ) {
      this.spellChecker = spellChecker;
      this.name = name;
   }
   public SpellChecker getSpellChecker() {
      return spellChecker;
   }
   public String getName() {
      return name;
   }

   public void spellCheck() {
      spellChecker.checkSpelling();
   }
}

SpellChecker.java:

package com.tutorialspoint;

public class SpellChecker {
   public SpellChecker(){
      System.out.println("Inside SpellChecker constructor." );
   }

   public void checkSpelling()
   {
      System.out.println("Inside checkSpelling." );
   }
   
}

MainApp.java:

package com.tutorialspoint;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = 
             new ClassPathXmlApplicationContext("Beans.xml");

      TextEditor te = (TextEditor) context.getBean("textEditor");

      te.spellCheck();
   }
}

Beans.xml일반적인 설정을 사용하는 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-3.0.xsd">

   <!-- Definition for textEditor bean -->
   <bean id="textEditor" class="com.tutorialspoint.TextEditor">
      <constructor-arg  ref="spellChecker" />
      <constructor-arg  value="Generic Text Editor"/>
   </bean>

   <!-- Definition for spellChecker bean -->
   <bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
   </bean>

</beans>

'byConstructor'를 사용하는 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-3.0.xsd">

   <!-- Definition for textEditor bean -->
   <bean id="textEditor" class="com.tutorialspoint.TextEditor" 
      autowire="constructor">
      <constructor-arg value="Generic Text Editor"/>
   </bean>

   <!-- Definition for spellChecker bean -->
   <bean id="SpellChecker" class="com.tutorialspoint.SpellChecker">
   </bean>

</beans>

실행 결과는 아래와 같다.

Inside SpellChecker constructor.
Inside checkSpelling.


반응형

+ Recent posts