ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7장 di 생성자를 이용한 주입
    스프링 프레임워크 기초 공부 2020. 4. 27. 00:42

    의존성 주입은 spring에서 아주 중요한 개념이자 장점이다.

     

    bean객체를 생성할 때 bean 객체가 관리할 값이나 객체를 주입하는 것을 의미한다

     

    bean객체 생성후 bean객체가 가질 기본 값을 자바 코드로 설정하는 것이 아닌 bean을 정의하는 xml코드에서  정의하는 것이다.

     

    package kr.co.softcampus.beans;
    
    public class TestBean {
    	
    	private int data1;
    	private double data2;
    	private String data3;
    	
    	public TestBean() {
    		System.out.println("TestBean의 기본 생성자");
    		this.data1=0;
    		this.data2=0.0;
    		this.data3=null;
    	}
    	
    	public TestBean(int data1)
    	{
    		System.out.println("TestBean의 생성자:int 변수 1개");
    		this.data1=data1;
    		this.data2=0.0;
    		this.data3=null;
    	}
    	
    	public TestBean(double data1)
    	{
    		System.out.println("TestBean의 생성자:double 변수 1개");
    		this.data1=0;
    		this.data2=data1;
    		this.data3=null;
    	}
    	
    	public TestBean(String data1)
    	{
    		System.out.println("TestBean의 생성자:String 변수 1개");
    		this.data1=0;
    		this.data2=0.0;
    		this.data3=data1;
    	}
    	
    	public void printData() {
    		System.out.println(data1);
    		System.out.println(data2);
    		System.out.println(data3);
    	}
    }
    

     

    TestBean 클래스 생성후 매개변수가 각각다른 생성자 3개를 선언한다.

     

    <?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">
    <!-- 생성자에 매개변수 타입이 int형과 double형 String형 3개가 있다면 String형이 가장 우선 다음으로 double형을 마지막 순위가 int형임-->
    	<bean id='obj1' class='kr.co.softcampus.beans.TestBean' lazy-init='true'/>
    	
    	<bean id='obj2' class='kr.co.softcampus.beans.TestBean' lazy-init='true'>
    		<constructor-arg value = '100' type='int'/><!-- 주입 -->
    	</bean>
    	
    	<bean id='obj3' class='kr.co.softcampus.beans.TestBean' lazy-init='true'>
    		<constructor-arg value = '11.11' type='double'/><!-- 주입 -->
    	</bean>
    	
    	<bean id='obj4' class='kr.co.softcampus.beans.TestBean' lazy-init='true'>
    		<constructor-arg value = '문자열' type='String'/><!-- 주입 -->
    	</bean>
    </beans>
    
    

     

    객체를 만들기위해 xml파일 작성

     

    package kr.co.softcampus.main;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import kr.co.softcampus.beans.TestBean;
    
    public class MainClass {
    
    	public static void main(String[] args) {
    
    		// TODO Auto-generated method stub
    		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("kr/co/softcampus/config/beans.xml");
    
    		TestBean t1 = new TestBean();
    		t1.printData();
    
    		System.out.println("------------------------");
    
    		TestBean t2 = new TestBean(100);
    		t2.printData();
    
    		System.out.println("------------------------");
    
    		TestBean t3 = new TestBean(11.11);
    		t3.printData();
    
    		System.out.println("------------------------");
    		
    		TestBean t4 = new TestBean("문자열");
    		t4.printData();
    
    		System.out.println("-----------자바객체-------------");
    		
    
    		TestBean obj1 = ctx.getBean("obj1", TestBean.class);
    		obj1.printData();
    
    		System.out.println("------------------------");
    
    		TestBean obj2 = ctx.getBean("obj2", TestBean.class);
    		obj2.printData();
    
    		System.out.println("------------------------");
    
    		TestBean obj3 = ctx.getBean("obj3", TestBean.class);
    		obj3.printData();
    		
    		System.out.println("------------------------");
    
    		TestBean obj4 = ctx.getBean("obj4", TestBean.class);
    		obj4.printData();
    
    		ctx.close();
    	}
    
    }

     

    자바로 객체를 생성하는 방법과 xml을 통한 객체생성방법의 차이를 볼수있다.

     

    결과문

    TestBean의 기본 생성자
    0
    0.0
    null
    ------------------------
    TestBean의 생성자:int 변수 1개
    100
    0.0
    null
    ------------------------
    TestBean의 생성자:double 변수 1개
    0
    11.11
    null
    ------------------------
    TestBean의 생성자:String 변수 1개
    0
    0.0
    문자열
    -----------자바객체-------------
    TestBean의 기본 생성자
    0
    0.0
    null
    ------------------------
    TestBean의 생성자:int 변수 1개
    100
    0.0
    null
    ------------------------
    TestBean의 생성자:double 변수 1개
    0
    11.11
    null
    ------------------------
    TestBean의 생성자:String 변수 1개
    0
    0.0
    문자열

     

    생성자를 이용한 객체주입

     

    java를 사용하여 DataBean객체를 2개 생성한후 TestBean2객체에 넣어보았다. 출력값이 잘 나오는것을 볼 수 있다.

     

    이제 spring을 이용한 객체 주입을 사용해보겠다.

     

    먼저 TestBean2 객체를 생성한 후 constructor-arg태그를 사용하여 DataBean 객체를 두개 생성한후 주입하는 방식.

Designed by Tistory.