관리 메뉴

개발 노트

10/18 constructor, property | InitializingBean, afterPropertiesSet(), @PostConstruct / DisposableBean, destroy(), @PreDestroy | singleton, prototype | xml, properties 본문

프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20/Spring

10/18 constructor, property | InitializingBean, afterPropertiesSet(), @PostConstruct / DisposableBean, destroy(), @PreDestroy | singleton, prototype | xml, properties

hayoung.dev 2022. 10. 21. 16:40

[DI03]

Student(class)

package DI03;

public class Student {
	private String name;
	private int age;
	private String gradeNum;
	private String classNum;
	
	//생성자
	//constructor 방식
	public Student(String name, int age, String gradeNum, String classNum) {
		this.name = name;
		this.age = age;
		this.gradeNum = gradeNum;
		this.classNum = classNum;
		System.out.println("Student construct 시작...");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
		System.out.println("Student setName 시작...");
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getGradeNum() {
		return gradeNum;
	}

	public void setGradeNum(String gradeNum) {
		this.gradeNum = gradeNum;
	}

	public String getClassNum() {
		return classNum;
	}

	public void setClassNum(String classNum) {
		this.classNum = classNum;
	}

}

StudentInfo.java(class)

package DI03;

public class StudentInfo {
	private Student student;
	
	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

	public StudentInfo(Student student) {
		this.student = student;		
	}
	
	public void getStudentInfo() {
		if(student != null) {
			System.out.println("이름 : " + student.getName());
			System.out.println("나이 : " + student.getAge());
			System.out.println("학년 : " + student.getGradeNum());
			System.out.println("반 : " + student.getClassNum());
		}
	}
}

MainClass03 (class)

package DI03;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass03 {

	public static void main(String[] args) {
		String configLocation = "classpath:applicationCTX03.xml";
		AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation);
		StudentInfo studentInfo = ctx.getBean("studentInfo", StudentInfo.class);
		studentInfo.getStudentInfo();
		
		Student student2 = ctx.getBean("student2", Student.class);
		studentInfo.setStudent(student2);
		studentInfo.getStudentInfo();
		System.out.println("student2.getAge()-->"+student2.getAge());
		System.out.println(student2.getAge()+5);
		ctx.close();
		
		//Classic
		Student student3 = new Student("김유신3", 23, "3학년", "3번");
		student3.setAge(32);
		System.out.println("classic student3.getAge()-->"+student3.getAge());
	}

}

applicationCTX03.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">

<bean id = "student1" class="DI03.Student">
	<property name="name"><value>양만춘</value></property>
	<!-- constructor 방식 -->
	<constructor-arg><value>연개소문</value></constructor-arg>
	<constructor-arg value="50"/>
	<constructor-arg><value>4학년</value></constructor-arg>
	<constructor-arg><value>25번</value></constructor-arg>
</bean>

<bean id ="studentInfo" class="DI03.StudentInfo">
	<constructor-arg>
		<!-- student1 참조 -->
		<ref bean="student1"/>
	</constructor-arg>

</bean>

<bean id="student2" class="DI03.Student">
	<!-- 인덱스를 주면 순서를 지정할 수 있다. -->
	<constructor-arg index="0" value="김유신"/>
	<constructor-arg value="30"/>
	<constructor-arg value="3학년"/>
	<constructor-arg value="11번"/>
</bean>
</beans>

 

출력 결과 : 모든 인스턴스들은 생성자가 모두 생성된 다음에 생성된다. 그래서 순서를 바꿔도 construct 시작과 setName 시작이 앞에 있다.

 

 

[DI05] : map 방식

CollectionBean(class)

package DI05;

import java.util.Map;

public class CollectionBean {
	private Map<String, String> addressList;

	public Map<String, String> getAddressList() {
		return addressList;
	}

	public void setAddressList(Map<String, String> addressList) {
		this.addressList = addressList;
	}

}

MainClass05(class)

package DI05;

import java.util.Map;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass05 {

	public static void main(String[] args) {
		String configLocation = "classpath:applicationCTX05.xml";
		AbstractApplicationContext ac = new GenericXmlApplicationContext(configLocation);
		CollectionBean collectionBean = ac.getBean("collectionBean", CollectionBean.class);
		Map<String, String> addressList = collectionBean.getAddressList();
		System.out.println("홍길동 주소 : " + addressList.get("홍길동"));
		System.out.println("중앙 주소 : " + addressList.get("중앙"));
	}
}

applicationCTX05.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">

	<bean id = "collectionBean" class="DI05.CollectionBean">
		<property name="addressList">
			<map>
				<entry>
					<!-- map 방식의 key, value 형태 -->
					<key><value>홍길동</value></key><value>율도국</value>
				</entry>
				<entry>
					<key><value>중앙</value></key><value>이대캠퍼스</value>
				</entry>
			</map>
		</property>
	</bean>
</beans>

 

 

 

 

[DI06]

Student(class)

package DI06;

import java.util.ArrayList;

public class Student {
	private String name;
	private int age;
	private ArrayList<String> hobbys;
	private double weight;
	private double height;
	
	//xml에서 이렇게 쓰면 constructor, 나머지는 property로 작성
	public Student(String name, int age, ArrayList<String> hobbys) {
		this.name = name;
		this.age = age;
		this.hobbys = hobbys;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public ArrayList<String> getHobbys() {
		return hobbys;
	}

	public void setHobbys(ArrayList<String> hobbys) {
		this.hobbys = hobbys;
	}

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}
	
	
}

StudentInfo(class)

package DI06;

public class StudentInfo {
	private Student student;
	
	public StudentInfo() {
	}

	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

}

MainClass06(class)

package DI06;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass06 {

	public static void main(String[] args) {
		String configLocation1 = "classpath:applicationCTX610.xml";
		String configLocation2 = "classpath:applicationCTX611.xml";
		AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation1, configLocation2);
		Student student1 = ctx.getBean("student1", Student.class);
		System.out.println(student1.getName()); 	//선덕여왕
		System.out.println(student1.getHobbys()); 	//승마, 정치
		
		StudentInfo studentInfo = ctx.getBean("studentInfo1", StudentInfo.class);
		Student student2 = studentInfo.getStudent();
		System.out.println(student2.getName());  	//선덕여왕
		System.out.println(student2.getHobbys()); 	//승마, 정치
		
		if(student1.equals(student2)) {
			System.out.println("student1 == student2");
		}
		
		Student student3 = ctx.getBean("student3", Student.class);
		Student student4 = ctx.getBean("student3", Student.class);
		System.out.println(student3.getName());  // 이순신
		System.out.println(student4.getName());  // 이순신
		
		if(student1.equals(student3)) {
			System.out.println("student1 == student3");
		} else {
			System.out.println("student1 != student3");
		}
		if(student3.equals(student4)) {
			System.out.println("student3 == student4");
		} else {
			System.out.println("student3 != student4");
		}
		
	}

}

applicationCTX610.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">

	<bean id="student1" class="DI06.Student">
		<constructor-arg value="선덕여왕"/>
		<constructor-arg value="30"/>
		<constructor-arg>
			<list>
				<value>승마</value>
				<value>정치</value>
			</list>
		</constructor-arg>
		<property name="weight" value="55" />
	</bean>
	
	<bean id="studentInfo1" class="DI06.StudentInfo">
		<property name="student">
			<ref bean="student1" />
		</property>
	</bean>
</beans>

applicationCTX611.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">

	<bean id="student3" class="DI06.Student" scope="singleton">
		<constructor-arg value="이순신" />
		<constructor-arg value="55" />
		<constructor-arg>
			<list>
				<value>활쏘기</value>
				<value>검술</value>
			</list>
		</constructor-arg>
		
		<property name="height">
			<value>177</value>
		</property>
	
		<property name="weight" value="70" />
	</bean>
	

</beans>

출력 결과

 

[DI07]

Student (class)

package DI07;

import java.util.ArrayList;

public class Student {
	private String name;
	private int age;
	private ArrayList<String> hobbys;
	private double weight;
	private double height;
	
	//xml에서 이렇게 쓰면 constructor, 나머지는 property로 작성
	public Student(String name, int age, ArrayList<String> hobbys) {
		this.name = name;
		this.age = age;
		this.hobbys = hobbys;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public ArrayList<String> getHobbys() {
		return hobbys;
	}

	public void setHobbys(ArrayList<String> hobbys) {
		this.hobbys = hobbys;
	}

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}
	
}

MainClass07 (class)

package DI07;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainClass07 {

	public static void main(String[] args) {
		//이 코드 때문에 ApplicationConfig.java를 생성한 것임.
		AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
	
	Student student1 = ctx.getBean("student1", Student.class);
	System.out.println("이름 : " + student1.getName());
	System.out.println("나이 : " + student1.getAge());
	System.out.println("취미 : " + student1.getHobbys());
	System.out.println("신장 : " + student1.getHeight());
	System.out.println("몸무게 : " + student1.getWeight());
	
	Student student2 = ctx.getBean("student2", Student.class);
	System.out.println("이름 : " + student2.getName());
	System.out.println("나이 : " + student2.getAge());
	System.out.println("취미 : " + student2.getHobbys());
	System.out.println("신장 : " + student2.getHeight());
	System.out.println("몸무게 : " + student2.getWeight());
	ctx.close();
	}

}

ApplicationConfig (class)

package DI07;

import java.util.ArrayList;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ApplicationConfig {
	@Bean
	public Student student1() {
		//배열을 따로 만들 수 없는 자바코드 특성 상 먼저 작성한 것.
		ArrayList<String> hobbys = new ArrayList<String>();
		hobbys.add("팝뮤직");
		hobbys.add("피아노");
		
		//생성자로 Student.java에 있는 Student()를 불러와야 함
		Student student = new Student("안예은", 24, hobbys);
		//나머지는 setter를 이용
		student.setHeight(160);
		student.setWeight(50);
		
		return student;
		
	}

	/* Bean을 달아야 xml과 연결됨. <Bean>태그와 같음. */
	@Bean
	public Student student2() {
		ArrayList<String> hobbys = new ArrayList<String>();
		hobbys.add("뮤지컬");
		hobbys.add("음악감상");
		
		Student student = new Student("김준수", 35, hobbys);
		student.setHeight(178);
		student.setWeight(76);
		
		return student;
	}

}

출력 결과 : Spring에는 xml 방식과 annotation 방식이 있는데 annotation방식이 더 편해서 이걸 더 많이 쓴다.

 

[DI08]

Student (class)

package DI08;

import java.util.ArrayList;

public class Student {
	private String name;
	private int age;
	private ArrayList<String> hobbys;
	private double weight;
	private double height;
	
	public Student(String name, int age, ArrayList<String> hobbys) {
		this.name = name;
		this.age = age;
		this.hobbys = hobbys;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public ArrayList<String> getHobbys() {
		return hobbys;
	}

	public void setHobbys(ArrayList<String> hobbys) {
		this.hobbys = hobbys;
	}

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}
	
}

MainClass08 (class)

package DI08;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass08 {

	public static void main(String[] args) {
		AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX08.xml");
		Student student1 = ctx.getBean("student1", Student.class);
		System.out.println("이름 : " + student1.getName());
		System.out.println("나이 : " + student1.getAge());
		System.out.println("취미 : " + student1.getHobbys());
		System.out.println("키 : " + student1.getHeight());
		System.out.println("몸무게 : " + student1.getWeight());
		
		Student student2 = ctx.getBean("student2", Student.class);
		System.out.println("이름 : " + student2.getName());
		System.out.println("나이 : " + student2.getAge());
		System.out.println("취미 : " + student2.getHobbys());
		System.out.println("키 : " + student2.getHeight());
		System.out.println("몸무게 : " + student2.getWeight());
		
		ctx.close();
	}

}

applicationCTX08.xml (beancontext 추가. 만약 추가 못한 경우 Namespaces에서 추가 가능)

<?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-4.1.xsd">

	<context:annotation-config/>
	<!-- 연결만 시키면 되기 때문에 id를 적지 않는다. class만 적는다. -->
	<bean class="DI08.ApplicationConfig"></bean>
	<bean id="student2" class="DI08.Student">
		<constructor-arg value="양만춘" />
		<constructor-arg value="30" />
		<constructor-arg>
			<list>
				<value>활쏘기</value>
				<value>안시성</value>
			</list>
		</constructor-arg>
		<property name= "height" value="175"/>
		<property name="weight" value="70" />
	</bean>
</beans>

ApplicationConfig (class)

package DI08;

import java.util.ArrayList;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ApplicationConfig {

	@Bean
	public Student student1() {
		ArrayList<String> hobbys = new ArrayList<String>();
		hobbys.add("수영");
		hobbys.add("물내리기");
		
		Student student = new Student("을지문덕 ", 55, hobbys);
		student.setHeight(170);
		student.setWeight(70);
		
		return student;
	}
}

출력 결과

 

<och04_sdlc>

pom.xml 복사해서 추가하기

 

[sdlc01]

Student (class, InitializingBean, DisposableBean 인터페이스 상속.)

package sdlc01;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class Student implements InitializingBean, DisposableBean {
	private String name;
	private int age;
	
	//소멸자 소멸 전 작동
	//DisposableBean를 상속받은 경우 destroy()라고 작성
	public void destroy() throws Exception {
		System.out.println("Student의 destroy() --> 소멸자가 소멸되기 전..");
	}
	
	//생성자 생성 이후 작동
	//InitializingBean를 상속받은 경우 afterPropertiesSet()라고 작성
	public void afterPropertiesSet() throws Exception {
		System.out.println("Student의 afterPropertiesSet() --> 생성자 생성 이후");
	}
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("Student 생성자...");
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

}

OtherStudent (class)

package sdlc01;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class OtherStudent {
	private String name;
	private int age;
	
	//생성자 생성 이후 작동
	//@PostConstruct : 상속받지 않은 경우 afterPropertiesSet과 같은 기능을 함.
	@PostConstruct
	public void initMethod() {
		System.out.println("OtherStudent의 initMethod() 생성자 생성 이후");
	}
	
	//소멸자 소멸 전 작동
	//@PreDestroy : 상속받지 않은 경우 destroy와 같은 기능을 함.
	@PreDestroy
	public void destoryMethod() {
		System.out.println("OtherStudent의 destoryMethod() 소멸자가 소멸되기 전..");
	}
	
	public OtherStudent(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("OtherStudent 생성자...");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

MainClass01 (class)

package sdlc01;

import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass01 {

	public static void main(String[] args) {
		GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
		System.out.println("1. ctx.load Before");
		ctx.load("classpath:applicationCTX01.xml");
		System.out.println("2. ctx.laod After");
		//실제 Bean 생성
		//ctx를 비움
		ctx.refresh();
		System.out.println("3. ctx.refresh After");
		ctx.close();
		System.out.println("4. ctx.close After");
	}

}

src/main/resources > applicationCTX01.xml (bean, context 추가)

<?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-4.2.xsd">

	<context:annotation-config></context:annotation-config>
	
	<bean id="student" class="sdlc01.Student">
		<constructor-arg value="김춘추" />
		<constructor-arg value="30" />
	</bean>
	
	<bean id="otherStudent" class="sdlc01.OtherStudent">
		<constructor-arg value="유성룡" />
		<constructor-arg value="50" />
	</bean>
</beans>

출력 결과

 

[sdlc02]

Student (class)

package sdlc02;

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 void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	

}

MainClass02 (class)

package sdlc02;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass02 {

	public static void main(String[] args) {
		AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX02.xml");
		Student student1 = ctx.getBean("student", Student.class);
		System.out.println("student1 이름 : " + student1.getName());
		System.out.println("student1 나이 : " + student1.getAge());
		
		System.out.println("================");
		Student student2 = ctx.getBean("student", Student.class);
		student2.setName("강유");
		student2.setAge(55);
		
		System.out.println("student2 이름 : " + student2.getName());
		System.out.println("student2 나이 : " + student2.getAge());
		System.out.println("================");
		System.out.println("student1 이름 : " + student1.getName());
		System.out.println("student1 나이 : " + student1.getAge());
		
		if(student1.equals(student2)) {
			System.out.println("student1 == student2");
		} else {
			System.out.println("student1 != student2");
		}
		ctx.close();

	}

}

applicationCTX02.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">

	<!-- 디폴트값이 singleton이다. -->
	<!-- singleton : 같은 bean을 참조할 때 값 유지 -->
	<bean id="student" class="sdlc02.Student" scope="singleton">
	<!-- prototype : 같은 bean을 참조할 때 각각 인스턴스를 가진다. -->
	<!-- <bean id="student" class="sdlc02.Student" scope="prototype"> -->
		<constructor-arg value="혹수돌" />
		<constructor-arg value="30" />
	</bean>
</beans>

scope = "singleton" 사용 시

scope="prototype" 사용 시

 

<och05.env>

 

pom.xml에 하단 코드 추가

<properties>

		<!-- Generic properties -->
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

		<!-- Spring -->
		<spring-framework.version>4.2.3.RELEASE</spring-framework.version>

		<!-- Hibernate / JPA -->
		<hibernate.version>4.2.1.Final</hibernate.version>

		<!-- Logging -->
		<logback.version>1.0.13</logback.version>
		<slf4j.version>1.7.5</slf4j.version>

		<!-- Test -->
		<junit.version>4.11</junit.version>

	</properties>
	
	<dependencies>
		<!-- Spring and Transactions -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring-framework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring-framework.version}</version>
		</dependency>


		<dependency>
			  <!--  Only bundled with java 1.6+ -->
			  <groupId>javax.annotation</groupId>
			  <artifactId>jsr250-api</artifactId>
			  <version>1.0</version>
		</dependency>

	</dependencies>

 

[env02]

AdminConnection (class, InitializingBeanDisposableBean interface 상속)

package env02;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class AdminConnection implements InitializingBean, DisposableBean {
	private String adminId;
	private String adminPw;
	private String sub_adminId;
	private String sub_adminPw;

	public void destroy() throws Exception {
		System.out.println("AdminConnection destroy() 소멸자 소멸 전...");

	}
	public void afterPropertiesSet() throws Exception {
		System.out.println("AdminConnection afterPropertiesSet() 생성자 생성 이후..");

	}
	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;
	}
	public String getSub_adminId() {
		return sub_adminId;
	}
	public void setSub_adminId(String sub_adminId) {
		this.sub_adminId = sub_adminId;
	}
	public String getSub_adminPw() {
		return sub_adminPw;
	}
	public void setSub_adminPw(String sub_adminPw) {
		this.sub_adminPw = sub_adminPw;
	}
	

}

EnvMainClass02 (class)

package env02;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class EnvMainClass02 {

	public static void main(String[] args) {
		AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX02.xml");
		AdminConnection connection = ctx.getBean("adminConnection", AdminConnection.class);
		System.out.println("adminID : " + connection.getAdminId());
		System.out.println("adminPW : " + connection.getAdminPw());
		System.out.println("sub_adminID : " + connection.getSub_adminId());
		System.out.println("sub_adminPW : " + connection.getSub_adminPw());
		ctx.close();

	}

}

src/main/properties > applicationCTX02.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"
	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-4.2.xsd">
	
	<!-- xml 세팅보다 더 쉬움 -->
	<!-- admin2.properties, sub_admin2.properties에 있는 해당하는 값들을 각각 가져온다. -->
	<context:property-placeholder location="classpath:admin2.properties, classpath:sub_admin2.properties"/>
	<bean id="adminConnection" class="env02.AdminConnection">
		<property name="adminId" value="${admin.id}"></property>
		<property name="adminPw" value="${admin.pw}"></property>
		<property name="sub_adminId"><value>${sub_admin.id}</value></property>
		<property name="sub_adminPw"><value>${sub_admin.pw}</value></property>
	</bean>
</beans>

src/main/properties > admin2.properties (file)

admin.id=admin
admin.pw=12345

src/main/properties > sub_admin2.properties (file)

sub_admin.id=sub2
sub_admin.pw=67890

출력 결과

 

반응형