Spring - Java를 이용한 주입(생성자,getter,autowire)

2020. 8. 20. 21:57Java/Spring

반응형

beans.xml에서 빈 객체에 값을 주입했던 생성자,getter,autowire 주입 방법을 java를 통해 알아보겠다.

 

 

먼저 아래와 같이 TestBean1 클래스를 만든다.

 

public class TestBean1 {
	private int data1;
	private String data2;
	private DataBean1 data3;
	
	public TestBean1() {
		
	}
	
	public TestBean1(int data1,String data2,DataBean1 data3) {
		this.data1 = data1;
		this.data2 = data2;
		this.data3 = data3;
	}
	
	public int getData1() {
		return data1;
	}
	public void setData1(int data1) {
		this.data1 = data1;
	}
	public String getData2() {
		return data2;
	}
	public void setData2(String data2) {
		this.data2 = data2;
	}
	public DataBean1 getData3() {
		return data3;
	}
	public void setData3(DataBean1 data3) {
		this.data3 = data3;
	}
	
	
}

1.생성자를 통한 주입 

 

기존 beans.xml에서는 아래와 같이 생성자를 통해 주입했다.

<bean id="t1" class="cookingcoding.beans.TestBean1">
	<constructor-arg value="100" type="int" index="0" />
	<constructor-arg value="안녕" type="String" index="1" />
	<constructor-arg ref="data1" index="2" />
</bean>

이를 java 파일에서 적용하기 위해 beanconfig 클래스를 만들었다.

@Configuration
public class beanconfig {
	
	@Bean
	public TestBean1 java1() {
		//여기서 코드를 설정하여 파일 등으로 값을 주입 가능하다.
		return new TestBean1(100,"반가워",new DataBean1());
	}
}

해당 코드에 생성자에 값을 넣어서 리턴해준다.

주석 처리된 부분에 코드를 작성하여 파일로 부터 값을 받아와 주입도 가능하다.

 


2.Getter를 통한 주입 

 

기존 beans.xml에서는 아래와 같이 property를 통해 주입했다.

<bean id="t2" class="cookingcoding.beans.TestBean1" lazy-init="true">
	<property name="data1" value="100"/>
	<property name="data2" value="두번째 안녕"/>
	<property name="data3" ref="data1"/>
</bean>

위 태그를 구현하기 위해 beanconfig 클래스에 아래 코드를 추가하자.

@Bean
public TestBean1 java2() {
	TestBean1 tb1 = new TestBean1();
	tb1.setData1(100);
	tb1.setData2("두번째 반가워");
	tb1.setData3(new DataBean1());
	return tb1;
}

3.autowire를 통한 자동 주입 

 

기존 beans.xml에서는 아래와 같이 auto-wire를 사용해 자동으로 주입했다.

<bean id="t3" class="cookingcoding.beans.TestBean2" lazy-init="true" autowire="byName"/>
<bean id="t4" class="cookingcoding.beans.TestBean2" lazy-init="true" autowire="byType"/>
	
<bean id="data1" class="cookingcoding.beans.DataBean1" lazy-init="true" />
<bean id="data2" class="cookingcoding.beans.DataBean2" lazy-init="true" />

위 코드를 구현하기 위해 beanconfig 클래스에 아래 코드를 추가하자

@Bean
public DataBean1 data1() {
	return new DataBean1();
}
@Bean
public DataBean2 data2() {
	return new DataBean2();
}
@Bean(autowire = Autowire.BY_NAME)
public TestBean2 java3() {
	return new TestBean2();
}
	
@Bean(autowire = Autowire.BY_TYPE)
public TestBean2 java4() {
	return new TestBean2();
}

autowire = Autowire.원하는 설정

원하는 설정에 따라서 이름 및  타입 등으로 빈 객체를 구분해 자동으로 주입한다.

 


실행 Mainclass

public class Mainclass {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("cookingcoding/config/beans.xml");
		
		TestBean1 t1 = ctx.getBean("t1",TestBean1.class);
		System.out.println("data1 => "+t1.getData1());
		System.out.println("data2 => "+t1.getData2());
		System.out.println("data3 => "+t1.getData3());
		
		System.out.println("====================================================================");
		TestBean1 t2 = ctx.getBean("t2",TestBean1.class);
		System.out.println("data1 => "+t2.getData1());
		System.out.println("data2 => "+t2.getData2());
		System.out.println("data3 => "+t2.getData3());
		System.out.println("====================================================================");
		TestBean2 t3 = ctx.getBean("t3",TestBean2.class);
		System.out.println("data1 => "+t3.getData1());
		System.out.println("data2 => "+t3.getData2());
		System.out.println("====================================================================");
		TestBean2 t4 = ctx.getBean("t4",TestBean2.class);
		System.out.println("data1 => "+t4.getData1());
		System.out.println("data2 => "+t4.getData2());
		System.out.println("====================================================================");
		ctx.close();
		
		AnnotationConfigApplicationContext ctx2 = new AnnotationConfigApplicationContext(beanconfig.class);
		
		TestBean1 z1 = ctx2.getBean("java1",TestBean1.class);
		System.out.println("Z data1=>"+z1.getData1());
		System.out.println("Z data2=>"+z1.getData2());
		System.out.println("Z data3=>"+z1.getData3());
		System.out.println("====================================================================");
		TestBean1 z2 = ctx2.getBean("java2",TestBean1.class);
		System.out.println("Z data1=>"+z2.getData1());
		System.out.println("Z data2=>"+z2.getData2());
		System.out.println("Z data3=>"+z2.getData3());
		System.out.println("====================================================================");
		TestBean2 z3 = ctx2.getBean("java3",TestBean2.class);
		System.out.println("Z data1=>"+z3.getData1());
		System.out.println("Z data2=>"+z3.getData2());
		System.out.println("====================================================================");
		TestBean2 z4 = ctx2.getBean("java4",TestBean2.class);
		System.out.println("Z data1=>"+z4.getData1());
		System.out.println("Z data2=>"+z4.getData2());
		ctx2.close();
	}

}

 

출력 결과

 

 


 

반응형