2013년 7월 23일 화요일

Spring IoC 세터주입(Setter Injection)을 애노테이션을 이용하여 만들어 보자.

Spring IoC 세터주입(Setter Injection)을 애노테이션을 이용하여 만들어 보자.


1.     /src/main/resources/xmlBeanFactory.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

       <description>Example configuration to get you started.</description>

       <context:annotation-config/>  <!—코드 기반의 의존성 요구조건이 가능토록 à
       <context:component-scan base-package="onj.spring.di" />
      
</beans>


2.     CarMaker.java

package onj.spring.di;

public interface CarMaker {
       public Car sell();
}



3.     Audi.java

package onj.spring.di;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;



//자바코드에서 주입될 빈이라고 정의함. XML파일에서 "sudi"정의안해도됨
@Service("audi")
public class Audi implements CarMaker {
       private Car car;
      
       public Audi() {}
      
       @Autowired  //이부분은 @Resource(name="car") 라고 해도 결과는
       public void setCar(Car car) {
             this.car = car;
       }
      

       public Car sell() {
             this.car.setName("Audi A6");
             return car;
       }
}

4.     Car.java

package onj.spring.di;

import org.springframework.stereotype.Service;

@Service("car")   //Car클래스가 Audi setCar 인자로 들어가야 되므로...빈으로 정의되야 한다.
public class Car {
       private String name;
         public Car() {
         }

         public String getName() {
            return this.name;
         }
         public void setName(String name) {
            this.name  = name;
         }
}


5.     SetterInjectionExam.java

package onj.spring.di;

import org.springframework.context.support.GenericXmlApplicationContext;

public class SetterInjectionExam {
       public static void main(String[] args) {
             GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
             ctx.load("classpath:xmlBeanFactory.xml");
             ctx.refresh();
            
             CarMaker carMaker = ctx.getBean("audi", Audi.class);

             Car c = carMaker.sell();
             System.out.println("I sold a car... " + c.getName());
       }
}


6.     [결과]
I sold a car... Audi A6

댓글 없음:

댓글 쓰기