일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- db#데이터베이스#오라클#sql
- 국비지원JAVA
- spring#Spring#RequestBody#ResponseBody
- html#HTML#프론트엔드#개발자#코딩#국비지원#국비교육#국비지원프론트엔드#국비지원HTML#국비지원html#국비프론트엔드
- Resource #
- 국비지원JAVA#국비교육JAVA#국비지원자바#국비교육자바#JSP#SERVLET#서블릿#
- 항해99 #항해플러스 #주니어개발자 #주니어개발자역량강화 #주니어개발자멘토링 #개발자사이드프로젝트 #코딩부트캠프 #코딩부트캠프후기
- Java#정처기#비트연산자#정보처리기사
- 국비지원자바#국비교육자바#국비지원java#국비교육java#자바스크립트#프론트엔드
- Java#JAVA#매개변수
- 항해플러스#항해#항해플러스3기#회고
- tibero#티베로#이중화#failvover
- Spring#spring#스프링#스프링프레임워크#스프링의존성주입#스프링생성자#스프링기본#국비지원#국비교육#국비지원스프링
- Spring#spring#스프링#스프링프레임워크#스프링자동주입#스프링생성자#스프링기본#국비지원#국비교육#국비지원스프링
- 자바
- java
- 프로그래밍
- #
- #java#JAVA#프로그래밍#웹개발자
- 자바#Java#배열예시#연습#기초다지기
- Java#컴파일러#자바컴파일러#
- 국비지원#국비교육#국비지원자바#국비교육자바#css#HTML#JAVA
- 쿼리스트링#쿼리문자열#바인딩
- 개발자#it도서#도메인#DDD#ddd
- 국비지원JAVA#국비지원자바#프로그랭#JSP#국비지원JSP#국비교육JSP#웹개발자#코딩
- 국비지원#국비교육
- 개발자도서#개발자책#도메인#DDD#도메인주도개발시작하기#개발스터디#
- Java#java#메모리영역#클래스로더#가비지컬렉터
- IntelliJ#인텔리제이#인텔리#단축키
- Java#java#자바#다오#디티오#브이오#dao#dto#vo
Archives
- Today
- Total
개린이 개발노트
[Spring] 스프링 빈(bean) 객체의 생명주기 본문
728x90
Spring의 Bean은 다음과 같은 상황일 때 객체가 생성된다.
싱글톤인 경우 xml파일을 로딩할 때 객체가 생성된다.
싱글톤이고 lazy-unit 속성이 true일경우 getBean메서드를 사용할 때 객체가 생성된다.
prototype일 경우 getBean메서드를 사용할 때 객체가 생성된다.
Spring의 Bean은 다음과 같은 상황일 때 객체가 소멸된다.
IoC컨테이너가 종료 때 객체가 소멸된다. (==close 메서드를 호출할 때)
메서드가 없을 경우
default-init-method 아무일도 발생 x
default destroy method 아무일도 발생x
init-method 오류발생
destroy 오류 발생
Spring 에서는 객체가 생성될 때 호출될 메서드가 소멸될 때 호출될 메서드를 지정할 수 있다.
예제 ↓
package sanghoon.beans;
public class TestBean1 {
public TestBean1() {
System.out.println("TestBean1의 생성자 입니다.");
}
public void bean1_init() {
System.out.println("TestBean1의 init메서드");
}
public void bean1_destroy() {
System.out.println("TestBean1의 destroy 메서드");
}
}
package sanghoon.beans;
public class TestBean2 {
public TestBean2() {
System.out.println("TestBean2의 생성자");
}
public void default_init() {
System.out.println("TestBean2의 default_init");
}
public void default_destroy() {
System.out.println("TestBean2의 default_destroy");
}
}
package sanghoon.beans;
public class TestBean3 {
public TestBean3() {
System.out.println("TestBean3의 생성자");
}
public void default_init() {
System.out.println("TestBean3의 default_init");
}
public void default_destroy() {
System.out.println("TestBean3의 default_destroy");
}
public void bean3_init() {
System.out.println("TestBean3의 init 메서드");
}
public void bean3_destroy() {
System.out.println("TestBean3의 destroy 메서드");
}
}
package sanghoon.beans;
public class TestBean4 {
public TestBean4() {
System.out.println("TestBean4의 생성자");
}
}
위는 테스트클래스 1부터4까지
메인클래스 ↓
package sanghoon.main;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import sanghoon.beans.TestBean1;
import sanghoon.beans.TestBean2;
import sanghoon.beans.TestBean3;
import sanghoon.beans.TestBean4;
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("sanghoon/config/beans.xml");
TestBean1 t1 = ctx.getBean("t1",TestBean1.class);
System.out.printf("t1:%s\n", t1);
System.out.println("----------------------------");
TestBean2 t2 = ctx.getBean("t2",TestBean2.class);
System.out.printf("t2:%s\n", t2);
System.out.println("----------------------------");
TestBean3 t3 = ctx.getBean("t3",TestBean3.class);
System.out.printf("t3:%s\n", t3);
System.out.println("----------------------------");
TestBean4 t4 = ctx.getBean("t4",TestBean4.class);
System.out.printf("t4:%s\n", t4);
System.out.println("----------------------------");
ctx.close();
}
}
가장중요한 beans.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"
default-init-method="default_init"
default-destroy-method="default_destroy">
<!-- ↓객체가 생성될 때 생성자가 호출된 이후 init-method에 설정한 메서드가 자동으로 호출되고 IoC 컨테이너의 close 메서드를 호출하면
객체가 소멸되며 destroy-method에 설정한 메서드가 자동으로 호출된다.↓ -->
<bean id='t1' class='sanghoon.beans.TestBean1' lazy-init='true'
init-method="bean1_init" destroy-method="bean1_destroy" />
<!-- ↓init-method와 destroy-method가 설정되어 있지 않다면 위의 default-init-method, default-destroy-method에
설정되어있는 메서드를 호출한다.↓ -->
<bean id='t2' class='sanghoon.beans.TestBean2' lazy-init='true' />
<!-- ↓init-method와 destroy-method, default-init-method 와 default-destroy 에 등록되어있는 메서드가 모두 있을경우↓
init-method와 destroy-method에 설정되어있는 메서드가 호출된다.// 즉 전체적인 것보다 자기자신에게 설정되어있는 것을 우선시-->
<bean id='t3' class='sanghoon.beans.TestBean3' lazy-init='true'
init-method='bean3_init' destroy-method="bean3_destroy" />
<!-- default-init-method, default-destroy-method: 설정한 메서드가 존재하지않으면 무시된다.
init-method,destroy-method: 설정한 메서드가 없으면 오류가 발생한다.↓-->
<bean id='t4' class='sanghoon.beans.TestBean4' lazy-init='true' />
</beans>
728x90
'스프링Spring' 카테고리의 다른 글
[Spring] 스프링 생성자를 통한 주입 의존성 주입(Dependency Injection) (1) | 2023.01.15 |
---|---|
[Spring] 스프링 BeanPostProcessor (0) | 2023.01.12 |
[Spring] 스프링 빈(bean) 객체 생성하는 법 (0) | 2023.01.07 |
[Spring]스프링 빈 등록 xml 작성할 경우 포멧 , 스프링xml태그, 스프링 bean 태그 맘껏 복사 (0) | 2022.12.26 |
[Mybatis] 마이바티스 mybatis-config.xml 태그 컨피그 태그 (0) | 2022.12.20 |