『 목차 』
- ApplicationContext 란?
- 외부파일을 이용하여 Bean 설정하기
■ ApplicationContext란?
스프링은 IoC 컨테이너가 갖추어야 할 기능들을 ApplicationContext 인터페이스에 정의해 두었습니다. 스프링에서 제공하는 IoC 컨테이너들은 모두 이 ApplicationContext 규칙을 따르고 있습니다. ApplicationContext 인터페이스를 상속받는 클래스들은 다음과 같습니다.
ApplicationContext
- AbstractApplicationContext
- AbstractRefreshableApplicationContext
- AbstractRefreshableConfigApplicationContext
- AbstractXmlApplicatonContext
- AnnotationConfigApplicationContext
- AnnotationConfigWebApplicationContext
- ClasspathXmlApplicationContext : 자바 클래스 경로에서 XML로 된 빈 설정 파일을 찾는다.
- ConfigurableApplicationContext
- ConfigurablePortleApplicationContext
- ConfigurableWebApplicationContext
- FileSystemXmlApplicationContext : 파일 시스템 경로에서 빈 설정 파일을 찾는다.
- GenericApplicationContext
- GenericWebApplicationContext
- WebApplicationContext : 웹 애플리케이션을 위한 IoC 컨테이너, web.xml 파일에 설정된 정보에 따라 XML 파일을 찾는다.
- and 7 others..
스프링에서 빈 정보는 XML 파일에 저장해두고 위와같은 클래스를 사용하여 빈을 자동 생성합니다.
참고로 우리가 스프링에서 사용하는 ctx.load("classpath:applicationCTX.xml")에서 classpath 는 운영체제의 CLASSPATH 환경변수에 등록된 폴더 및 JAR 파일들에서 이 파일을 찾겠다는 의미 입니다.
따라서 우리가 이전까지의 예제에서 사용해왔던 MainClass에서 AbstractApplicationContext ctx = new GenericXmlApplicationContext(); 부분이 컨테이너를 생성해주는 부분이다.
우리는 여태까지 xml 또는 JAVA 클래스를 이용해서 Bean을 설정했지만 지금부터는 외부파일을 이용하여 Bean을 설정할것이다.
외부파일을 이용해서 Bean을 설정하는 방법은 크게 4가지가 있다.
1. Environment 사용
2. 프로퍼티 파일을 이용한 설정
3. Profile을 속성을 이용한 설정
- Xml 설정파일 이용
- Java 설정파일 이용
이전의 예제들을 보면 xml에서 Bean설정 정보를 가지고왔기 때문에 ctx의 classpath가 xml파일이었는데,
1. Environment 사용
△ 예제)
src/main/java
- com/env/ex
-MainClass.java
-AdminConnection.java
src/main/resources
-applicationCTX.xml
[ MainClass ]
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
38
39 |
package com.env.ex;
import java.io.IOException;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.io.support.ResourcePropertySource;
public class MainClass {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = new GenericXmlApplicationContext();
ConfigurableEnvironment env = ctx.getEnvironment();
MutablePropertySources propertySources = env.getPropertySources();
try {
propertySources.addLast(new ResourcePropertySource("classpath:admin.properties"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(env.getProperty("admin.id"));
System.out.println(env.getProperty("admin.pw"));
GenericXmlApplicationContext gCtx = (GenericXmlApplicationContext)ctx;
gCtx.load("applicationCTX.xml");
gCtx.refresh();
AdminConnection adminConnection = gCtx.getBean("adminConnection", AdminConnection.class);
System.out.println("admin Id: "+ adminConnection.getAdminId());
System.out.println("admin Pw: "+ adminConnection.getAdminPw());
gCtx.close();
ctx.close();
}
} |
cs |
[ AdminConnection ]
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
38
39
40
41
42
43
44
45
46
47
48 |
package com.env.ex;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
public class AdminConnection implements EnvironmentAware, InitializingBean, DisposableBean{
private Environment env;
private String adminId;
private String adminPw;
@Override
public void setEnvironment(Environment env) {
// TODO Auto-generated method stub
System.out.println("setEnvironment()");
setEnv(env);
}
public Environment getEnv() {
return env; }
public void setEnv(Environment env) {
this.env = env; }
public String getAdminId() {
return adminId; }
public void setAdminId(String adminId) {
this.adminId = adminId; }
public String getAdminPw() {
return adminPw; }
public void setAdminPw(String adminPw) {
this.adminPw = adminPw; }
@Override
public void destroy() throws Exception {
System.out.println("destroy()");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet()");
setAdminId(env.getProperty("admin.id"));
setAdminPw(env.getProperty("admin.pw"));
}
} |
cs |
[ applicationCTX.xml ]
1
2
3
4
5
6
7
8
9 |
<?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="adminConnection" class="com.env.ex.AdminConnection">
</bean>
</beans> |
cs |
'Web > Spring' 카테고리의 다른 글
Spring MVC(1) (0) | 2016.05.16 |
---|---|
Spring 한글처리 (0) | 2016.05.16 |
Spring(3) (1) | 2016.05.12 |
Spring(2) (0) | 2016.05.11 |
Spring(1) (0) | 2016.05.10 |