공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
스프링 컨테이너 생명 주기
컨테이너 생성 -> 컨테이너 설정 -> 컨테이너 사용 -> 컨테이너 종료의 순서로 생명 주기가
진행됩니다.
코드로 보겠습니다.
스프링설정 .xml
1 2 3 4 5 6 7 8 9 10 11 12 | // input your code here<?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"> <bean id="student" class="org.mon.altong.lifecycle.Student"> <constructor-arg value="알통몬"/> <constructor-arg value="26"/> </bean> </beans> | cs |
Student.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package org.mon.altong.lifecycle; public class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } | cs |
Running.java
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 | package org.mon.altong.lifecycle; import org.springframework.context.support.GenericXmlApplicationContext; public class Running{ public static void main(String[] args) { //컨테이너 생성 GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); //컨테이너 설정 ctx.load("classpath:lifeCycleContext.xml"); ctx.refresh(); //컨테이너 사용 Student student = ctx.getBean("student", Student.class); System.out.println(student.getName()); System.out.println(student.getAge()); //사용 끝 //컨테이너 종료 ctx.close(); } } | cs |
위에서 GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("설정파일.xml 경로"); 처럼 사용할 수도 있습니다.
위 코드처럼 생성과 설정을 따로 할 경우에는
ctx.load("classpath:설정파일.xml"); 호출 후
꼭 ctx.refresh(); 를 호출해 주어야 합니다.
ctx.getBean() 처럼 컨테이너를 사용하고,
ctx.close(); 호출을 통해 자원을 해제합니다.
스프링 빈 생명 주기
빈으로 사용될 클래스가 두 가지 인터페이스를 상속 받으면 됩니다.
빈의 생명주기는 컨테이너를 따라가기 때문에 기본적으로 컨테이너가 종료되면 빈은 자동 소멸되고 빈만 종료하고 싶을 경우 destroy()를 호출하면 됩니다.
Student.java
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 31 32 33 34 35 | package org.mon.altong.lifecycle; public class Student implements InitializingBean, DisposableBean { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } //InitializingBean 빈의 초기화 될 때(ctx.refresh) 호출 @Override public void afterPropertiesSet() throws Exception { // 빈이 초기화될 때 특정 작업이 필요한 경우 System.out.println("afterPropertiesSet() called"); } //DisposableBean 빈이 destroy(ctx.close()) 될 때 호출 @Override public void destroy() throws Exception { // 빈이 소멸될 때 특정 작업이 필요한 경우 System.out.println("destroy() called"); } } | cs |
스프링 빈의 범위 ( SCOPE )
: 스프링 컨테이너가 생성되고, 스프링 빈이 생성될 때 스프링 빈은 scope를 가지고 있습니다.
scope란 해당하는 객체가 어디까지 영향을 주는지 결정하는 거라고 생각하시면 되겠습니다.
scope의 default는 singleton입니다.
1 2 3 4 | <bean id="student" class="org.mon.altong.lifecycle.Student" scope="singleton"> <constructor-arg value="알통몬"/> <constructor-arg value="26"/> </bean> | cs |
그래서 같은 빈을 가지고 여러 개의 객체를 생성했다면, == 연산자로 비교해보았을 때
true 가 나오게 됩니다.
이상입니다.
'Spring(스프링), Spring Boot(스프링부트), JSP' 카테고리의 다른 글
스프링(spring) AOP 구현하기[2] : @Aspect 어노테이션으로 구현 (0) | 2018.01.05 |
---|---|
스프링(spring) AOP란? spring AOP 구현하기[1] : xml 스키마로 구현 (0) | 2018.01.05 |
스프링(Spring) DI설정방법[3] : DI java in XML and DI xml in JAVA (0) | 2018.01.02 |
스프링(Spring) DI설정방법[2] : DI in JAVA (0) | 2018.01.02 |
스프링(Spring) DI설정방법[1] : DI in XML (0) | 2017.12.28 |