2020. 9. 22. 21:25ㆍ개발공부/Spring
오늘 강의에서 배운 내용은 bean 객체의 생애입니다. bean은 xml 파일에 JSTL로 생성하거나 Java 클래스에 아노테이션으로 자동 생성할 수 있습니다.
참고사항으로 context라는 스프링에 자주 나오는 syntax인데요, 직역하면 맥락, 흐름이란 의미를 가지고 있지만 스프링이나 Java 프로그래밍 분야에선 기본, 베이스, 최상위, 흐름의 시작점이라는 의미로 쓰입니다. 예시로 contextpath는 폴더 또는 디렉토리의 최상위 경로를 의미합니다.
1. bean 객체의 생애
그럼 bean으로 생성된 객체가 생성되고 소멸하기까지 단계를 예제를 통해 알아보겠습니다. 총 4단계로 이루어져 있습니다. 1) 객체 생성 2) 의존 설정 3) 초기화 4) 소멸
1) 객체 생성
bean은 xml 파일에 JSTL로 생성하거나 Java 클래스에 아노테이션으로 자동 생성할 수 있습니다. 생성해준 bean은 스프링에서 자동으로 인식해 컨테이너를 생성하고 내부에 bean 객체를 만듭니다.
2) 의존 설정
xml 파일과 Configuration 아노테이션을 선언해준 Java 클래스로 bean 객체를 주입할 경우 2가지 의존 설정방법이 있습니다. 첫번째는 setter를 활용하는 것이고 두번재는 생성자를 활용하는 것입니다. 각 방법을 어떤 경우에 사용해야되는지 명확히는 모르지만 직접 데이터를 넣어줄 경우 setter를 쓰고 의존 객체의 메서드만 활용할 땐 생성자(constructor)를 사용하는 것 같습니다.
아래 코드는 모두 setter를 이용해 의존 설정한 예시입니다. xml은 property로 Java는 setHost 메서드로 setter를 초기화 해주었습니다.
[xml 파일로 의존 설정]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?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 id="client3" class="spring.Client3"
init-method="connect" destroy-method="closeConnection" scope="prototype">
<property name="host" value="서버"/>
</bean>
</beans>
|
cs |
[Configuration 아노테이션을 활용한 Java 클래스 의존 설정]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import spring.Client5;
@Configuration
public class JavaConfig5 {
@Bean
public Client5 client5() {
Client5 client5 = new Client5();
client5.setHost("서버5");
return client5;
}
}
|
cs |
3) 초기화 설정
초기화란 변수 또는 객체에 데이터를 주입하는 설정입니다. bean 객체에 주입된 의존 객체 중 setter로 데이터를 입력할 수 있습니다. 이 과정에서 스프링은 데이터를 bean에 주입시키며 이를 초기화 설정 단계로 봅니다.
4) 소멸
Java에선 Garbage Collection이 자동 소멸시켜주기 때문에 지금까지 소멸은 Scanner 클래스를 쓰거나 String 관련 클래스를 가끔 썼을 때 말고는 없다. 그러나 스프링에선 bean이 생성되고 소멸될 때 자동 메서드를 실행시켜 시점을 파악할 수 있다. 커스텀으로 만들어 init-method, destroy-method로 지정해 쓸 수도 있지만 스프링에 등록된 인터페이스를 사용하면 편하다.
- bean 생성 시 호출되는 메서드: org.springframework.beans.factory.DisposableBean;
- bean 소멸 시 호출되는 메서드: org.springframework.beans.factory.DisposableBean;
다중 인터페이스 사용법은 상속할 인터페이스들을 implements를 클래스 뒤에 써주면 된다.
bean 객체 생성 호출 메서드 실행 시점은 스프링이 setter를 찾아 초기화 설정을 해준 뒤에 실행되며 소멸 메서드는 bean을 사용 후 생성된 bean 호출 객체(GenericXmlApplicationContext, AnnotationContextApplicationContext)를 close 해주면 실행된다.
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
36
37
|
package spring;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
//인터페이스 구현
public class Client2 implements InitializingBean, DisposableBean {
private String host;
public Client2() {
System.out.println("Client2() 생성");
}
public void setHost(String host) {
this.host = host;
System.out.println("Client2.setHost() 실행");
}
public void send() {
System.out.println("Client2.send() to " + host);
}
//implements 통해 구현되지 않은 메서드 add
//소멸
@Override
public void destroy() throws Exception {
System.out.println("Client2.destroy() 실행");
}
//생성
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Client2.afterPropertiesSet() 실행");
}
}
|
cs |
'개발공부 > Spring' 카테고리의 다른 글
[Spring] Interface를 활용한 자동 메서드 실행 ② AOP (0) | 2020.09.24 |
---|---|
[Spring] Interface를 활용한 자동 메서드 실행 ① (0) | 2020.09.22 |
[Spring 재수강] - Maven Project로 Member 관리 시스템 만들기 (1) (2) | 2020.09.15 |
[Spring] - 요청 처리(@Request/Get/PostMapping) (0) | 2020.09.08 |
[Spring] - MVC2 구조 구현 (0) | 2020.09.03 |