- 이 글은 아래의 내용에서 이어지는 내용입니다.
# @Autowired
- 클래스 타입을 통한 자동 주입.
- 하나의 클래스만 유일하게 존재할 때 사용하는 것을 추천.
# @Qualifier
- 이름(아이디)을 통한 자동 주입.
- 여러개의 동일 클래스가 존재할 때 사용하는 것을 추천.
# Autowired 어노테이션은 setter DI의 형식을 취함.
# XML을 통한 방식 / JAVA을 통한 방식
0. Java , Xml 방식의 기본 Beans 생성.
- DataBean1.java
package AnnotationBean;
import org.springframework.stereotype.Component;
public class DataBean1 {
private int a = 10;
private String b = "간다";
public int getA() {
return a;
}
public String getB() {
return b;
}
public void setA(int a) {
this.a = a;
}
public void setB(String b) {
this.b = b;
}
}
- DataBean2.java
package AnnotationBean;
public class DataBean2 {
private int a = 20;
private String b = "온다";
public int getA() {
return a;
}
public String getB() {
return b;
}
public void setA(int a) {
this.a = a;
}
public void setB(String b) {
this.b = b;
}
}
- DataBean3.java
package AnnotationBean;
public class DataBean3 {
private int a = 20;
private String b = "온다";
public int getA() {
return a;
}
public String getB() {
return b;
}
public void setA(int a) {
this.a = a;
}
public void setB(String b) {
this.b = b;
}
}
- DataBean4.java
package AnnotationBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
public class DataBean4 {
private int a = 20;
private String b = "온다";
// 생성자 기본값을 지정.
public DataBean4(@Value("1000") int a , @Value("안녕하세요") String b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public String getB() {
return b;
}
}
- TestBean1.java
package AnnotationBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class TestBean1 {
// data1, data2의 주입은 사실상 동일하다고 생각해도 된다.
// @Autowired 어노테이션의 경우 data1에 대한 setter 메소드를 통해서 주입이 된다.
@Autowired
private DataBean1 data1;
// @Autowired가 setter 메소드에 붙힘으로써 setter 메소드를 통해서 주입이 된다.
private DataBean2 data2;
@Autowired
public void setData2(DataBean2 data2) {
this.data2 = data2;
}
// @Autowried는 클래스 형식으로 찾을 때,
// 동일한 클래스가 한 개 이상 지정되어 있으면,
// @Qualifier를 통해서 이름(id)값을 통해 지정한다.
@Autowired
@Qualifier("data3_1")
private DataBean3 data3_1;
// @Autowried는 클래스 형식으로 찾을 때,
// 동일한 클래스가 한 개 이상 지정되어 있으면,
// @Qualifier를 통해서 이름(id)값을 통해 지정한다.
@Autowired
@Qualifier("data3_2")
private DataBean3 data3_2;
@Autowired
@Qualifier("data4_1")
private DataBean4 data4_1;
@Autowired
@Qualifier("data4_2")
private DataBean4 data4_2;
public TestBean1() {
System.out.println("TestBean1 Created");
}
// Getter 부분.
public DataBean1 getData1() {
return data1;
}
public DataBean2 getData2() {
return data2;
}
public DataBean3 getData3_1() {
return data3_1;
}
public DataBean3 getData3_2() {
return data3_2;
}
public DataBean4 getData4_1() {
return data4_1;
}
public DataBean4 getData4_2() {
return data4_2;
}
}
1. JAVA을 통한 방식
- AnnotationJavaBeans.java : Object을 대한 정보를 정의.
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import AnnotationBean.DataBean1;
import AnnotationBean.DataBean2;
import AnnotationBean.DataBean3;
import AnnotationBean.DataBean4;
import AnnotationBean.TestBean1;
// XML이 방식이 아닌 JAVA의 형식으로 beans.xml을 대체한다.
@Configuration
public class AnnotationJavaBeans {
@Bean
public TestBean1 java1() {
TestBean1 t1 = new TestBean1();
return t1;
}
@Bean
public DataBean1 data1() {
DataBean1 d1 = new DataBean1();
return d1;
}
@Bean
public DataBean2 data2() {
DataBean2 d2 = new DataBean2();
return d2;
}
// DataBean3의 경우 setter형식
@Bean
public DataBean3 data3_1() {
DataBean3 d3 = new DataBean3();
d3.setA(111);
d3.setB("DataBean3_1");
return d3;
}
// DataBean3의 경우 setter형식
@Bean
public DataBean3 data3_2() {
DataBean3 d3 = new DataBean3();
return d3;
}
// DataBean4의 경우 생성자 형식
@Bean
public DataBean4 data4_1() {
DataBean4 d4 = new DataBean4(1000, "문자열1");
return d4;
}
// DataBean4의 경우 생성자 형식
@Bean
public DataBean4 data4_2() {
DataBean4 d4 = new DataBean4(2000, "문자열1");
return d4;
}
}
- main.java : 실행 코드 부분.
// JAVA 파일을 사용하는 방식
System.out.println("-------------------------------------------");
AnnotationConfigApplicationContext ctx2 = new AnnotationConfigApplicationContext(AnnotationJavaBeans.class);
TestBean1 java1 = ctx2.getBean("java1" , TestBean1.class);
System.out.println("java1.getData1().getA() = > " + java1.getData1().getA());
System.out.println("java1.getData1().getB() = > " + java1.getData1().getB());
System.out.println("----------------------");
System.out.println("java1.getData2().getA() = > " + java1.getData2().getA());
System.out.println("java1.getData2().getB() = > " + java1.getData2().getB());
System.out.println("----------------------");
System.out.println("java1.getData3_1().getA() = > " + java1.getData3_1().getA());
System.out.println("java1.getData3_1().getB() = > " + java1.getData3_1().getB());
System.out.println("----------------------");
System.out.println("java1.getData3_2().getA() = > " + java1.getData3_2().getA());
System.out.println("java1.getData3_2().getB() = > " + java1.getData3_2().getB());
System.out.println("----------------------");
System.out.println("java1.getData4_1().getA() = > " + java1.getData4_1().getA());
System.out.println("java1.getData4_1().getB() = > " + java1.getData4_1().getB());
System.out.println("----------------------");
System.out.println("java1.getData4_2().getA() = > " + java1.getData4_2().getA());
System.out.println("java1.getData4_2().getB() = > " + java1.getData4_2().getB());
System.out.println("----------------------");
ctx2.close();
실행결과
2. XML을 통한 방식
- Annotataionbeans.xml : Object을 대한 정보를 정의.
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- bean 클래스에 설정되어 있는 어노테이션을 이용한다. -->
<context:annotation-config></context:annotation-config>
<bean class="AnnotationBean.TestBean1"></bean>
<bean class="AnnotationBean.DataBean1"></bean>
<bean class="AnnotationBean.DataBean2"></bean>
<bean id="data3_1" class="AnnotationBean.DataBean3" lazy-init="true">
<property name="a" value="100"></property>
<property name="b" value="가나다라"></property>
</bean>
<bean id="data3_2" class="AnnotationBean.DataBean3" lazy-init="true">
<property name="a" value="200"></property>
<property name="b" value="뮤뮤뮤뮤뮤뮤~~"></property>
</bean>
<bean id="data4_1" class="AnnotationBean.DataBean4"></bean>
<bean id="data4_2" class="AnnotationBean.DataBean4">
<constructor-arg index="0" value="20000"></constructor-arg>
<constructor-arg index="1" value="Hello"></constructor-arg>
</bean>
</beans>
- main.java : 실행 코드 부분.
TestBean1 xml1 = ctx1.getBean(TestBean1.class);
System.out.println("xml1.getData1().getA() = > " + xml1.getData1().getA());
System.out.println("xml1.getData1().getB() = > " + xml1.getData1().getB());
System.out.println("----------------------");
System.out.println("xml1.getData2().getA() = > " + xml1.getData2().getA());
System.out.println("xml1.getData2().getB() = > " + xml1.getData2().getB());
System.out.println("----------------------");
System.out.println("xml1.getData3_1().getA() = > " + xml1.getData3_1().getA());
System.out.println("xml1.getData3_1().getB() = > " + xml1.getData3_1().getB());
System.out.println("----------------------");
System.out.println("xml1.getData3_2().getA() = > " + xml1.getData3_2().getA());
System.out.println("xml1.getData3_2().getB() = > " + xml1.getData3_2().getB());
System.out.println("----------------------");
System.out.println("xml1.getData4_1().getA() = > " + xml1.getData4_1().getA());
System.out.println("xml1.getData4_1().getB() = > " + xml1.getData4_1().getB());
System.out.println("----------------------");
System.out.println("xml1.getData4_2().getA() = > " + xml1.getData4_2().getA());
System.out.println("xml1.getData4_2().getB() = > " + xml1.getData4_2().getB());
System.out.println("----------------------");
실행결과
'[Spring]' 카테고리의 다른 글
[Spring]Spring Validation 사용해보기 (0) | 2020.03.17 |
---|---|
[Spring] Bytebuddy를 사용한 .class 바꾸기 (0) | 2020.03.15 |
[Spring기초] Java로 Bean 만들기.(Java로 xml 대신하기) (0) | 2019.10.20 |
[Spring기초] 의존성 주입:DI(DEPENDENCY INJECTION) - 생성자Constructor DI (0) | 2019.10.14 |
[Spring기초] 의존성 주입:DI(Dependency Injection) - Setter DI (0) | 2019.10.13 |