반응형
spring bean 객체 생성
spring에서는 사용할 bean 객체를 bean configuration file에 정의를 하고 필요할 때 객체를 가져와 사용하는 방법을 이용합니다.
bean 태그
class : 객체를 생성하기 위해 사용할 클래스를 지정합니다.
id : bean 객체를 가져오기 위해 사용하는 이름을 지정합니다.
lazy-init : 싱글톤인 경우 xml을 로딩할 때 객체 생성 여부를 설정합니다. true일 때 xml 로딩 시 객체를 생성하지 않고 객체를 가져올 때 생성합니다.
scope : 객체의 범위를 설정합니다. singleton은 객체를 하나만 생성해서 사용합니다. prototype은 객체를 가져올 때 마다 객체를 생성합니다.
TestBean.java
package kr.co.softcampus.beans;
public class TestBean {
public TestBean() {
System.out.println("TestBean의 생성자");
}
}
bean.xml
<?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">
<!-- xml을 로딩할 때 자동으로 객체가 생성된다. -->
<!-- 현재까지의 학습 진도상 id 속성이 없다면 객체의 주소값을 받아서 사용할 수 없다. -->
<bean class='kr.co.softcampus.beans.TestBean'/>
<!-- xml을 로딩할 때 자동으로 객체가 생성된다. -->
<!-- id 속성에 이름을 부여하면 getBean 메서드를 통해 객체의 주소값을 받아 사용할 수 있다. -->
<!-- 생성된 객체는 더이상 생성되지 않는다. Singleton -->
<bean id='test1' class='kr.co.softcampus.beans.TestBean'/>
<!-- lazy-init : true - xml을 로딩할 때 객체가 생성되지 않는다.(생략하면 false) -->
<!-- getBean 메서드를 호출할 때 객체가 생성되며 singleton이기 때문에 객체는 하나만 생성된다. -->
<bean id='test2' class='kr.co.softcampus.beans.TestBean' lazy-init="true"/>
<!-- scope : prototype - xml을 로딩할 때 객체가 생성되지 않는다. -->
<!-- getBean 메서드를 호출할 때 마다 새로운 객체를 생성해서 반환한다. -->
<bean id='test3' class='kr.co.softcampus.beans.TestBean' scope='prototype'/>
</beans>
MainClass.java
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");
// id가 tes1인 bean 객체의 주소값을 받아온다.
TestBean t1 = ctx.getBean("test1", TestBean.class);
System.out.printf("t1 : %s\n", t1);
TestBean t2 = ctx.getBean("test1", TestBean.class);
System.out.printf("t2 : %s\n", t2);
// id가 test2인 bean 객체의 주소값을 받아온다.
TestBean t3 = ctx.getBean("test2", TestBean.class);
System.out.printf("t3 : %s\n", t3);
TestBean t4 = ctx.getBean("test2", TestBean.class);
System.out.printf("t4 : %s\n", t4);
// id가 test3인 bean 객체의 주소값을 받아온다.
TestBean t5 = ctx.getBean("test3", TestBean.class);
System.out.printf("t5 : %s\n", t5);
TestBean t6 = ctx.getBean("test3", TestBean.class);
System.out.printf("t6 : %s\n", t6);
ctx.close();
}
}
Spring에게 제어권을 넘겨주고 메타데이터를 통해, 객체를 생성하고 관리하는 방식을 조종하는 지에 대한 실습이었습니다. 문제를 해결 상황에 맞추어, 태그를 넣어주어 객체를 활용할 수 있다는 것을 알게 되었습니다. spring bean 동작 방식에 대해 조금 더 알게되는 좋은 기회였습니다.
반응형
'SW > Java' 카테고리의 다른 글
Java : Spring : BeanPostProcessor : 개념, 방법, 예제, 구현 (0) | 2020.04.15 |
---|---|
Java : Spring: Bean 생성, 소멸 시 메소드 호출 방법 : 예제, 구현 (0) | 2020.04.14 |
Java: Spring : IoC 개념 : ApplicationContext, BeanFactory : 예제, 구현 (0) | 2020.04.12 |
Java : Spring : bean : 사용방법, 예제, 관련 개념, 필요성 (0) | 2020.04.07 |
Java : Spring Boot : Jar, Maven, Gradle : 배포하는 방법, 예제 (0) | 2020.03.05 |