-개발환경-
IDE : Eclipse 2018-12 (4.10.0) Spring Tool Suite : 3.9.7.RELEASE |
-파일구성-
AdminConnection.java - 객체 생성 정보가 담긴 class
MainClass.java - 메인 메소드가 담긴 class
admin.properties - KEY , Value로 구성된 파일
applicationCTX.xml - beans 을 관리하는 xml
-admin.properties-
1
2
|
admin.id=asdfg
admin.pw=12345
|
cs |
-AdminConnection.java-
1
2
3
4
|
public class AdminConnection implements EnvironmentAware,InitializingBean{
private String adminId;
private String adminPw;
private Environment env;
|
cs |
AdminConnection 클래스의 bean이 생성되는 순간 admin.properties 파일의 내용을 읽어서 멤버 변수에 등록한다.
4 : 스프링 컨테이너의 환경설정 정보를 저장한다.
-AdminConnection.java-
1
2
3
4
5
6
7
8
|
~ 인스턴스 벨류들, 생성자 및 기본 메소드들 ~
@Override
public void setEnvironment(Environment environment) {
System.out.println("자동으로 setEnvironment() 메소드 실행");
env = environment;
}
|
cs |
( EnvironmentAware인터페이스 - setEnvironment()추상메소드 ) 관계로 , 현 클래스에서 오버라이드됨.
4 : bean이 생성(refresh() 메소드가 실행)되는 순간 자동으로 실행된다.
메소드의 인수인 Environment인터페이스 변수는 SpringContainer의 환경 설정 정보를 기억하는 객체변수이다.
environment 에는 스프링이 알아서 AdminConnection 클래스의 bean이 생성되는 순간에 자동으로
컨테이너(gCtx)의 환경 설정 정보를 넘겨준다.
즉 , properties 정보가 넘어온다.
6 : Environment인터페이스 타입 멤버 변수 env에 정보를 담는다.
-AdminConnection.java-
1
2
3
4
5
6
|
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("자동으로 afterPropertiesSet() 메소드 실행");
adminId= env.getProperty("admin.id");
adminPw= env.getProperty("admin.pw");
}
|
cs |
( InitializingBean인터페이스 - afterPropertiesSet()추상메소드 ) 관계. 현 클래스에서 오버라이드함.
2 : afterPropertiesSet()메소드는 bean이 생성될 때 생성자가 실행되고 난 후 자동으로 실행된다.
4~5 : env에 저장된 properties 정보를 멤버 변수에 저장한다.
함수 작동순서 : first-setEnvironment , second-afterPropertiesSet
-applicationCTX.xml-
1
|
<bean id="adminConnection" class="com.koreait.springProperties1_Environment.AdminConnection"/>
|
cs |
단순 bean 객체 생성
-MainClass.java-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
ConfigurableApplicationContext ctx = new GenericXmlApplicationContext();
ConfigurableEnvironment env = ctx.getEnvironment();
MutablePropertySources mutablePropertySources = env.getPropertySources();
try {
mutablePropertySources.addLast(new ResourcePropertySource("classpath:admin.properties"));
System.out.println("admin.id => " + env.getProperty("admin.id"));
System.out.println("admin.pw => " + env.getProperty("admin.pw"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("단순히 properties파일의 내용을 읽어온다");
System.out.println("=========================");
GenericXmlApplicationContext gCtx = (GenericXmlApplicationContext)ctx;
gCtx.load("classpath: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());
System.out.println("=========================");
gCtx.close();
|
cs |
1 : ConfigurableApplicationContext - 인터페이스.
환경 설정 정보를 읽어올 빈 객체(컨테이너)를 만든다.
2 : ConfigurableEnvironment - 인터페이스.
ConfigurableEnvironment인터페이스 타입의 변수 env에
getEnvironment() 메소드로 스프링 컨테이너의 환경 설정 정보를 얻어와 저장한다.
3 : properties 정보를 저장할수 있는
MutablePropertySources클래스 변수 mutablePropertySources에다가
env 의 getPropertySources() 메소드로 properties 정보만 얻어와 저장한다.
6 : properties 정보가 저장된 mutablePropertySources에
addLast() 메소드로 맨 마지막 위치에 admin.properties 파일의
properties 내용을 읽어 추가한다.
mutablePropertySources 에는 properties 가 저장될 때 key에 따라 value 값이
저장되는 Map 형태로 저장된다.
7,8 : 스프링 컨테이너 환경에 추가된 properties 파일의 내용은
ConfigurableEnvironment인터페이스 객체인 env 의 getProperty() 메소드로 읽는다.
15 : xml 파일에서 bean 설정 정보를 읽어내는 능력과 properties 정보가 담긴 컨테이너 두개 다를
그대로 가져가기 위해서 ConfigurableApplicationContext인터페이스 타입 객체 ctx를
GenericXmlApplicationContext 클래스 타입으로 형변환 시킨다.
16 : gCtx.load를 수행해서 xml 파일경로를 적재한다.
17 : gCtx.refresh()를 수행해서 bean들을 생성한다.
18 : id가 adminConnection 인 bean 을 얻어온다.
19,20 : 데이터가 정상적으로 출력된다.
-요약-
-마침글-
인용
'21년이전 > SPRING' 카테고리의 다른 글
SPRING - AOP수행하기 첫번째 방법 (0) | 2021.04.28 |
---|---|
SPRING - 어노테이션java만으로 Properties 적용하기 (0) | 2021.04.28 |
SPRING - xml을 이용하여 Properties 적용하기 (0) | 2021.04.27 |
SPRING - 어노테이션 java파일을 이용한 Profile 이용 (0) | 2021.04.27 |
SPRING - xml을 통한 Profile 이용 (0) | 2021.04.27 |