context.xml 파일을 만들어 빈설정을 하느라 웹 검색좀 하고 있는데, 이게 구식사용법이란다. 요즘은 JAVA에 @Bean설정을 바로 한다고 한다(?) 그래서 그냥 정리할겸 메모한다.
우선 빈으로 등록할 객체를 하나 만들었다.
public class PracticeService {
String a,b,c,d;
int i;
PracticeService objectTest;
public PracticeService() {}
public PracticeService(String a, PracticeService objectTest) {
this.objectTest = objectTest;
this.a = a;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
public String getD() {
return d;
}
public void setD(String d) {
this.d = d;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public PracticeService getObjectTest() {
return objectTest;
}
public void setObjectTest(PracticeService objectTest) {
this.objectTest = objectTest;
}
}
아래는 context.xml에 등록하는 방법이다.
<bean id="ThisIsPractice" class="com.test.PracticeService">
<constructor-arg value="Hello world!!"/>
<constructor-arg ref="objectTest"/>
<property name="b">
<value type="java.lang.String">안녕하세요</value>
</property>
<property name="c" value=" 'c'입니다."/>
</bean>
<bean id="ThisIsPractice2"
class="com.test.PracticeService"
p:d="이건 namespaces 지정한방법입니다." p:i="1234"/>
<bean id="objectTest" class="com.test.PracticeService"/>
- constructor-arg : 생성자에 들어갈 객체나 변수값을 주입한다. 요소에 index="0" 과같이 지정하여 인자값에 순서를 정해줄 수 있다. 지정안하면 형식과 비교하여 순서대로 주입시킨다.
(매개변수가 있는 생성자를 호출하여 초기화)- property : 선언된 변수,객체값을 찾아 주입한다. setter를 선언해줘야 찾아 들어간다.
(매개변수가 없는 생성자 호출후 setter메서드를 호출하여 필드값을 초기화)
요소값으로는 여러가지방법을 이용할 수 있는데, value를 바로 선언해도되고, value type에 값을 넣어 사용 할 수도있다. 또는 namespaces 에서 p:schema 를 이용하면 bean tag 안에 한줄로 작성도 가능하다.
value랑 ref의 차이점이라면 value는 값이고 ref는 bean id를 찾아 그대로 참조해준다.
자, 이제 main source에다가 주입해서 getter로 불러와 사용하면 잘 작동 된다.
@Autowired
PracticeService ThisIsPractice;
@Autowired
PracticeService ThisIsPractice2;
그럼 이걸 JAVA 소스에 선언할 때는 어떻게 하느냐?
@Configuration을 클래스에 정의해주고, @Bean을 사용하여 객체를 작성해주면 된다.
@Configuration
public class ApplicationConfig {
@Bean
public PracticeService ThisIsPractice3() {
PracticeService ps = new PracticeService();
ps.setA("Hello world!!");
ps.setB("안녕하세요");
ps.setC("c 입니다.");
ps.setD("이건 자바 컨피그 어노테이션으로 불러온거에요.");
return ps;
}
}
만약 Component Scan을 이용하고 싶은경우에는 다음과 같이 설정하면 필터가능하다.
@Configuration
@ComponentScan(basePackages = "com")
//@ComponentScan(basePackageClasses = ApplicationConfig.class)
public class ApplicationConfig { // 생략...
요정도까지만해도 기본적인거는 다 할 수 있을거다.
참고자료들___
(참고) [Spring] 빈을 설정하는 3가지 방법 - XML, JAVA, Component Scan
(참고) Spring IoC - 빈 등록 방법 5가지