Spring - Java를 이용한 주입(생성자,getter,autowire)
2020. 8. 20. 21:57ㆍJava/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();
}
}
출력 결과
반응형
'Java > Spring' 카테고리의 다른 글
Spring - JSR-250 어노테이션 (0) | 2020.08.25 |
---|---|
Spring - Annotation을 통한 Bean 설정 (0) | 2020.08.24 |
Spring - Java를 이용한 init-method, destroy-method (0) | 2020.08.19 |
Spring - Java를 이용한 Bean 등록(어노테이션) (0) | 2020.08.18 |
Spring - 빈 객체 값 주입(자동주입) (0) | 2020.08.17 |