(저번에 이어서)
package com.javalec.spring_6_3;
import java.util.ArrayList;
public class Student {
private String name;
private int age;
private ArrayList<String> hobbys;
private double height;
private double weight;
public Student(String name, int age, ArrayList<String> hobbys) {
super();
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 getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
package com.javalec.spring_6_3;
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("홍길동", 20, hobbys);
student.setHeight(180);
student.setWeight(80);
return student;
}
}
package com.javalec.spring_6_3;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
// AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX.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());
System.out.println("========================================");
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());
}
}
<?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-3.1.xsd">
<context:annotation-config></context:annotation-config>
<bean class="com.javalec.spring_6_3.ApplicationConfig"></bean>
<bean id="student2" class="com.javalec.spring_6_3.Student">
<constructor-arg value="홍길순"></constructor-arg>
<constructor-arg value="30"></constructor-arg>
<constructor-arg>
<list>
<value>마라톤</value>
<value>요리</value>
</list>
</constructor-arg>
<property name="height" value="190"></property>
<property name="weight" value="70"></property>
</bean>
</beans>
<!-- cglib -->
<dependency>
<groupId>com.kenai.nbpwr</groupId>
<artifactId>net-sf-cglib</artifactId>
<version>2.1.3-201003011305</version>
</dependency>
package com.javalec.spring_6_3;
import java.util.ArrayList;
public class Student {
private String name;
private int age;
private ArrayList<String> hobbys;
private double height;
private double weight;
public Student(String name, int age, ArrayList<String> hobbys) {
super();
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 getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
package com.javalec.spring_6_4;
import java.util.ArrayList;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ImportResource("classpath:applicationCTX.xml")
public class ApplicationConfig {
@Bean
public Student student1() {
ArrayList<String> hobbys = new ArrayList<String>();
hobbys.add("수영");
hobbys.add("요리");
Student student = new Student("홍길동", 20, hobbys);
student.setHeight(180);
student.setWeight(80);
return student;
}
}
package com.javalec.spring_6_4;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
// AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX.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());
System.out.println("========================================");
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());
}
}
<?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="student2" class="com.javalec.spring_6_4.Student">
<constructor-arg value="홍길순"></constructor-arg>
<constructor-arg value="30"></constructor-arg>
<constructor-arg>
<list>
<value>마라톤</value>
<value>요리</value>
</list>
</constructor-arg>
<property name="height" value="190"></property>
<property name="weight" value="70"></property>
</bean>
</beans>
<!-- cglib -->
<dependency>
<groupId>com.kenai.nbpwr</groupId>
<artifactId>net-sf-cglib</artifactId>
<version>2.1.3-201003011305</version>
</dependency>
package com.javalec.spring_ex_6_1;
import java.util.ArrayList;
public class Employee {
private String name;
private int salary;
private ArrayList<String> license;
public Employee(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public ArrayList<String> getLicense() {
return license;
}
public void setLicense(ArrayList<String> license) {
this.license = license;
}
}
package com.javalec.spring_ex_6_1;
public class EmployeeInfo {
private Employee employee;
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
<?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="employee1" class="com.javalec.spring_ex_6_1.Employee">
<constructor-arg value="임영웅"></constructor-arg>
<property name="salary">
<value>300</value>
</property>
<property name="license">
<list>
<value>정보처리기사</value>
<value>sqlD</value>
</list>
</property>
</bean>
<bean id="employeeInfo1" class="com.javalec.spring_ex_6_1.EmployeeInfo">
<property name="employee">
<ref bean="employee1"/>
</property>
</bean>
</beans>
<?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="employee3" class="com.javalec.spring_ex_6_1.Employee">
<constructor-arg value="이찬원"></constructor-arg>
<property name="salary">
<value>200</value>
</property>
<property name="license">
<list>
<value>정보처리산업기사</value>
<value>컴활 1급</value>
</list>
</property>
</bean>
</beans>
package com.javalec.spring_ex_6_1;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainEmployee {
public static void main(String[] args) {
String configLoc1 = "classpath:employeeCTX.xml";
String configLoc2 = "classpath:employeeCTX2.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLoc1,configLoc2);
Employee employee1 = ctx.getBean("employee1",Employee.class);
System.out.println(employee1.getName());
System.out.println(employee1.getSalary());
System.out.println(employee1.getLicense());
System.out.println("============================================");
EmployeeInfo employeeInfo = ctx.getBean("employeeInfo1",EmployeeInfo.class);
Employee employee2 = employeeInfo.getEmployee();
System.out.println(employee2.getName());
System.out.println(employee2.getSalary());
System.out.println(employee2.getLicense());
System.out.println("============================================");
Employee employee3 = ctx.getBean("employee3",Employee.class);
System.out.println(employee3.getName());
System.out.println(employee3.getSalary());
System.out.println(employee3.getLicense());
}
}
package com.javalec.spring_ex_6_2;
import java.util.ArrayList;
public class Professor {
private String name;
private int age;
private ArrayList<String> subject;
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> getSubject() {
return subject;
}
public void setSubject(ArrayList<String> subject) {
this.subject = subject;
}
public Professor(String name) {
super();
this.name = name;
}
}
package com.javalec.spring_ex_6_2;
public class ProfessorInfo {
private Professor professor;
public Professor getProfessor() {
return professor;
}
public void setProfessor(Professor professor) {
this.professor = professor;
}
}
package com.javalec.spring_ex_6_2;
import java.util.ArrayList;
public class Professor {
private String name;
private int age;
private ArrayList<String> subject;
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> getSubject() {
return subject;
}
public void setSubject(ArrayList<String> subject) {
this.subject = subject;
}
public Professor(String name) {
super();
this.name = name;
}
}
package com.javalec.spring_ex_6_2;
import java.util.ArrayList;
public class Professor {
private String name;
private int age;
private ArrayList<String> subject;
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> getSubject() {
return subject;
}
public void setSubject(ArrayList<String> subject) {
this.subject = subject;
}
public Professor(String name) {
super();
this.name = name;
}
}
package com.javalec.spring_ex_6_2;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainProfessor {
public static void main(String[] args) {
String configLoc1 = "classpath:professorCTX.xml";
String configLoc2 = "classpath:professorCTX2.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLoc1,configLoc2);
Professor professor1 = ctx.getBean("professor1",Professor.class);
System.out.println(professor1.getName());
System.out.println(professor1.getAge());
System.out.println(professor1.getSubject());
System.out.println("============================================");
ProfessorInfo professorInfo = ctx.getBean("professorInfo1",ProfessorInfo.class);
Professor professor2 = professorInfo.getProfessor();
System.out.println(professor2.getName());
System.out.println(professor2.getAge());
System.out.println(professor2.getSubject());
System.out.println("============================================");
Professor professor3 = ctx.getBean("professor3",Professor.class);
System.out.println(professor3.getName());
System.out.println(professor3.getAge());
System.out.println(professor3.getSubject());
}
}
package com.javalec.spring_ex_6_3;
import java.util.ArrayList;
public class Singer {
private String name;
private int member;
private ArrayList<String> song;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMember() {
return member;
}
public void setMember(int member) {
this.member = member;
}
public ArrayList<String> getSong() {
return song;
}
public void setSong(ArrayList<String> song) {
this.song = song;
}
public Singer(String name) {
super();
this.name = name;
}
}
package com.javalec.spring_ex_6_3;
public class SingerInfo {
private Singer singer;
public Singer getSinger() {
return singer;
}
public void setSinger(Singer singer) {
this.singer = singer;
}
<?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="singer1" class="com.javalec.spring_ex_6_3.Singer">
<constructor-arg value="방탄소년단"></constructor-arg>
<property name="member">
<value>7</value>
</property>
<property name="song">
<list>
<value>다이너마이트</value>
<value>페이크 러브</value>
</list>
</property>
</bean>
<bean id="singerInfo1" class="com.javalec.spring_ex_6_3.SingerInfo">
<property name="singer">
<ref bean="singer1"/>
</property>
</bean>
</beans>
<?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="singer3" class="com.javalec.spring_ex_6_3.Singer">
<constructor-arg value="블랙핑크"></constructor-arg>
<property name="member">
<value>4</value>
</property>
<property name="song">
<list>
<value>아이스크림</value>
<value>하우 유 라이크 댓</value>
</list>
</property>
</bean>
</beans>
package com.javalec.spring_ex_6_3;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainSinger {
public static void main(String[] args) {
String configLoc1 = "classpath:SingerCTX.xml";
String configLoc2 = "classpath:SingerCTX2.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLoc1,configLoc2);
Singer singer1 = ctx.getBean("singer1",Singer.class);
System.out.println(singer1.getName());
System.out.println(singer1.getMember());
System.out.println(singer1.getSong());
System.out.println("============================================");
SingerInfo singerInfo1 = ctx.getBean("singerInfo1",SingerInfo.class);
Singer singer2 = singerInfo1.getSinger();
System.out.println(singer2.getName());
System.out.println(singer2.getMember());
System.out.println(singer2.getSong());
System.out.println("============================================");
Singer singer3 = ctx.getBean("singer3",Singer.class);
System.out.println(singer3.getName());
System.out.println(singer3.getMember());
System.out.println(singer3.getSong());
}
}
package com.javalec.spring_ex_6_4;
import java.util.ArrayList;
public class Animation {
private String name;
private int years;
private ArrayList<String> character;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYears() {
return years;
}
public void setYears(int years) {
this.years = years;
}
public ArrayList<String> getCharacter() {
return character;
}
public void setCharacter(ArrayList<String> character) {
this.character = character;
}
public Animation(String name) {
super();
this.name = name;
}
}
package com.javalec.spring_ex_6_4;
public class AnimationInfo {
private Animation animation;
public Animation getAnimation() {
return animation;
}
public void setAnimation(Animation animation) {
this.animation = animation;
}
}
<?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="animation1" class="com.javalec.spring_ex_6_4.Animation">
<constructor-arg value="원피스"></constructor-arg>
<property name="years">
<value>1999</value>
</property>
<property name="character">
<list>
<value>루피</value>
<value>조로</value>
<value>상디</value>
</list>
</property>
</bean>
<bean id="animationInfo1" class="com.javalec.spring_ex_6_4.AnimationInfo">
<property name="animation">
<ref bean="animation1"/>
</property>
</bean>
</beans>
<?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="animation3" class="com.javalec.spring_ex_6_4.Animation">
<constructor-arg value="블리치"></constructor-arg>
<property name="years">
<value>2004</value>
</property>
<property name="character">
<list>
<value>이치고</value>
<value>오리히메</value>
</list>
</property>
</bean>
</beans>
package com.javalec.spring_ex_6_4;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainAnimation {
public static void main(String[] args) {
String configLoc1 = "classpath:animationCTX.xml";
String configLoc2 = "classpath:animationCTX2.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLoc1,configLoc2);
Animation animation1 = ctx.getBean("animation1",Animation.class);
System.out.println(animation1.getName());
System.out.println(animation1.getYears());
System.out.println(animation1.getCharacter());
System.out.println("============================================");
AnimationInfo animationInfo1 = ctx.getBean("animationInfo1",AnimationInfo.class);
Animation animation2 = animationInfo1.getAnimation();
System.out.println(animation2.getName());
System.out.println(animation2.getYears());
System.out.println(animation2.getCharacter() );
System.out.println("============================================");
Animation animation3 = ctx.getBean("animation3",Animation.class);
System.out.println(animation3.getName());
System.out.println(animation3.getYears());
System.out.println(animation3.getCharacter() );
}
}
package com.javalec.spring_ex_6_5;
import java.util.ArrayList;
public class Nasdaq {
private String stock;
private int ranking;
private ArrayList<String> production;
public String getStock() {
return stock;
}
public void setStock(String stock) {
this.stock = stock;
}
public int getRanking() {
return ranking;
}
public void setRanking(int ranking) {
this.ranking = ranking;
}
public ArrayList<String> getProduction() {
return production;
}
public void setProduction(ArrayList<String> production) {
this.production = production;
}
public Nasdaq(String stock) {
super();
this.stock = stock;
}
}
package com.javalec.spring_ex_6_5;
public class NasdaqInfo {
private Nasdaq nasdaq;
public Nasdaq getNasdaq() {
return nasdaq;
}
public void setNasdaq(Nasdaq nasdaq) {
this.nasdaq = nasdaq;
}
}
<?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="nasdaq1" class="com.javalec.spring_ex_6_5.Nasdaq">
<constructor-arg value="Tesla"></constructor-arg>
<property name="ranking">
<value>6</value>
</property>
<property name="production">
<list>
<value>모델 X</value>
<value>모델 Y</value>
</list>
</property>
</bean>
<bean id="nasdaqInfo1" class="com.javalec.spring_ex_6_5.NasdaqInfo">
<property name="nasdaq">
<ref bean="nasdaq1"/>
</property>
</bean>
</beans>
<?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="nasdaq3" class="com.javalec.spring_ex_6_5.Nasdaq">
<constructor-arg value="Nvidia"></constructor-arg>
<property name="ranking">
<value>7</value>
</property>
<property name="production">
<list>
<value>RTX 3080</value>
<value>RTX 2080</value>
</list>
</property>
</bean>
</beans>
package com.javalec.spring_ex_6_5;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainNasdaq {
public static void main(String[] args) {
String configLoc1 = "classpath:nasdaqCTX.xml";
String configLoc2 = "classpath:nasdaqCTX2.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLoc1,configLoc2);
Nasdaq nasdaq1 = ctx.getBean("nasdaq1",Nasdaq.class);
System.out.println(nasdaq1.getStock());
System.out.println(nasdaq1.getRanking());
System.out.println(nasdaq1.getProduction());
System.out.println("============================================");
NasdaqInfo nasdaqInfo1 = ctx.getBean("nasdaqInfo1",NasdaqInfo.class);
Nasdaq nasdaq2 = nasdaqInfo1.getNasdaq();
System.out.println(nasdaq2.getStock());
System.out.println(nasdaq2.getRanking());
System.out.println(nasdaq2.getProduction());
System.out.println("============================================");
Nasdaq nasdaq3 = ctx.getBean("nasdaq3",Nasdaq.class);
System.out.println(nasdaq3.getStock());
System.out.println(nasdaq3.getRanking());
System.out.println(nasdaq3.getProduction());
}
}
.refresh() -> 생성과 설정을 별도로 분리 한 경우 사용(초기화함수)
package com.javalec.spring_7_1;
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;
}
}
<?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="com.javalec.spring_7_1.Student">
<constructor-arg value="홍길순"></constructor-arg>
<constructor-arg value="30"></constructor-arg>
</bean>
</beans>
package com.javalec.spring_7_1;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:applicationCTX.xml");
ctx.refresh();
Student student = ctx.getBean("student",Student.class);// 객체 정보 가지고 오기
System.out.println("이름 : "+student.getName());
System.out.println("나이 : "+student.getAge());
ctx.close();
}
}
=> interface사용
Student.java
package com.javalec.spring_7_2;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class Student implements InitializingBean, DisposableBean{
private String name;
private int age;
@Override//먼저 호출됨
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet()");
}// 객체 생성시 먼저 호출됨.
@Override
public void destroy() throws Exception {
System.out.println("destroy()");
}//객체 소멸 후에 호출
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;
}
}
OtherStudent.java
package com.javalec.spring_7_2;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class OtherStudent {
private String name;
private int age;
@PostConstruct
public void initMethod() {
System.out.println("initMethod()");
}//객체 생성 후에 호출
@PreDestroy
public void destoryMethod() {
System.out.println("destoryMethod()");
}//객체 소멸 중 호출
public OtherStudent(String name, int age) {//생성자
super();
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;
}
}
설정파일 => xmlns:context="http://www.springframework.org/schema/context" 추가
applicationCTX.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-3.1.xsd">
<context:annotation-config></context:annotation-config>
<!-- initMethod(),destoryMethod() 출력-->
<bean id="student" class="com.javalec.spring_7_2.Student">
<constructor-arg value="홍길순"></constructor-arg>
<constructor-arg value="30"></constructor-arg>
</bean>
<bean id="otherstudent" class="com.javalec.spring_7_2.OtherStudent">
<constructor-arg value="홍길자"></constructor-arg>
<constructor-arg value="50"></constructor-arg>
</bean>
</beans>
MainClass.java
package com.javalec.spring_7_2;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:applicationCTX.xml");
ctx.refresh();
ctx.close();
// ctx.close();
}
}
만약에 Annotation 오류 발생시 아래의 코드 추가
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
Student.java
package com.javalec.spring_7_3;
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;
}
}
applicationCTX.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="student" class="com.javalec.spring_7_3.Student">
<constructor-arg value="홍길순"></constructor-arg>
<constructor-arg value="30"></constructor-arg>
</bean>
</beans>
MainClass.java
package com.javalec.spring_7_3;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX.xml");
Student student1 = ctx.getBean("student",Student.class);
System.out.println("이름 : "+student1.getName());
System.out.println("나이 : "+student1.getAge());
System.out.println("==============================");
Student student2 = ctx.getBean("student",Student.class);
student2.setName("홍길자");
student2.setAge(100);
System.out.println("이름 : "+student2.getName());
System.out.println("나이 : "+student2.getAge());
System.out.println("==============================");
System.out.println("이름 : "+student1.getName());
System.out.println("나이 : "+student1.getAge());
System.out.println("==============================");
if (student1.equals(student2)) {
System.out.println("student1 == student2");
} else {
System.out.println("student1 != student2");
}
}
}
Enviroment 객체 이용하여 외부의 설정값을 가지고 와서 이용
2. ctx.getEnvironment을 통해 얻은 객체를 ConfigurableEnvironment에서 생성한 Environment 객체 env에 담는다.
3. env.getPropertySources();로 프로퍼티소스를 얻어와서 MutablePropertySources에서 생성한 인스턴스에 넣는다. getPropertySources();를 해주는 이유는 Environment 객체 안에는 각각의 정보를 갖고있는 PropertySources라는 객체가 있어서 다 구해옴
4. PropertySources에서 추가와 추출 가능 (추가 : addLast / 추출 : getProperty)
admin.properties
admin.id=abcde
admin.pw=12345
AdminConnection.java
package com.javalec.spring_8_1;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
public class AdminConnection implements InitializingBean, EnvironmentAware {
private Environment env; // Environment는 프로젝트당 1개만 생성 가능
private String adminId;
private String adminPw;
@Override//객체 생성되기 전에 호출됨
public void setEnvironment(Environment environment) {
System.out.println("setEnvironment");
setEnv(environment);
}
@Override // 객체가 생성될 때 호출
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet()");
setAdminId(env.getProperty("admin.id"));
setAdminPw(env.getProperty("admin.pw"));
}
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;
}
}
applicationCTX.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="adminConnection" class="com.javalec.spring_8_1.AdminConnection"></bean>
</beans>
MainClass.java
package com.javalec.spring_8_1;
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"));
System.out.println(env.getProperty("admin.id"));
System.out.println(env.getProperty("admin.pw"));
} catch (IOException e) {//외부파일이 없을 수도 있기 때문에 예외처리
// TODO Auto-generated catch block
e.printStackTrace();
}
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());
}
}
*.외부파일 사용(admin.properties, sub_admin.properties)
<context:property-placeholder location="classpath:admin.properties, classpath:sub_admin.properties" />
*.참조값 사용
<property name="adminId">
<value>${admin.id}</value>
</property>
admin.properties
admin.id=abcde
admin.pw=12345
sub_admin.properties
sub_admin.id=fghij
sub_admin.pw=67890
AdminConnection.java
package com.javalec.spring_8_2;
public class AdminConnection {
private String adminId;
private String adminPw;
private String sub_adminId;
private String sub_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;
}
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;
}
}
applicationCTX.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-3.1.xsd">
<context:property-placeholder location="classpath:admin.properties, classpath:sub_admin.properties"/>
<bean id="adminConnection" class="com.javalec.spring_8_2.AdminConnection">
<property name="adminId">
<value>${admin.id}</value>
<!-- 외부파일에서 데이터를 가지고 와서 AdminConnection.java파일의 adminId에 저장됨-->
</property>
<property name="adminPw">
<value>${admin.pw}</value>
<!-- 외부파일에서 데이터를 가지고 와서 AdminConnection.java파일의 adminPw에 저장됨-->
</property>
<property name="sub_adminId">
<value>${sub_admin.id}</value>
<!-- 외부파일에서 데이터를 가지고 와서 AdminConnection.java파일의 sub_adminId에 저장됨-->
</property>
<property name="sub_adminPw">
<!-- 외부파일에서 데이터를 가지고 와서 AdminConnection.java파일의 sub_adminPw에 저장됨-->
<value>${sub_admin.pw}</value>
</property>
</bean>
</beans>
MainClass.java
package com.javalec.spring_8_2;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
// AbstractApplicationContext ctx = new GenericXmlApplicationContext("applicationCTX.xml");
AbstractApplicationContext ctx = new GenericXmlApplicationContext("applicationCTX.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());
}
}
2.스프링 설정 JAVA파일에 프로퍼티 파일을 명시
public static PropertySourcesPlaceholderConfigurer properties() {}
=>xml 의 context:property-placeholder 동일
(외부파일 사용)
@Value("${admin.id}")
private String adminId;
=>value 어노테이션 이용해서 값을 setting -> 참조값을 set 역할로 저장
admin.properties
admin.id=abcde
admin.pw=12345
sub_admin.properties
sub_admin.id=fghij
sub_admin.pw=67890
AdminConnection.java
package com.javalec.spring_8_2_2;
public class AdminConnection {
private String adminId;
private String adminPw;
private String sub_adminId;
private String sub_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;
}
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;
}
}
ApplicationConfig.java
package com.javalec.spring_8_2_2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
@Configuration
public class ApplicationConfig {
@Value("${admin.id}")//참조값 형식으로 넣어야함
private String adminId;
@Value("${admin.pw}")//참조값 형식으로 넣어야함
private String adminPw;
@Value("${sub_admin.id}")//참조값 형식으로 넣어야함
private String sub_adminId;
@Value("${sub_admin.pw}")//참조값 형식으로 넣어야함
private String sub_adminPw;
@Bean
public static PropertySourcesPlaceholderConfigurer propertices() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
Resource[] locations = new Resource[2];
locations[0] = new ClassPathResource("admin.properties");
locations[1] = new ClassPathResource("sub_admin.properties");
//외부 파일을 읽음
configurer.setLocations(locations);
return configurer;
}
@Bean
public AdminConnection adminConnection() {//AdminConnection가 클래스 adminConnection는 아이디
AdminConnection adminConnection = new AdminConnection();
adminConnection.setAdminId(adminId);
//AdminConnection의 adminId로 세팅됨
adminConnection.setAdminPw(adminPw);
//AdminConnection의 adminPw로 세팅됨
adminConnection.setSub_adminId(sub_adminId);
//AdminConnection의 sub_adminId로 세팅됨
adminConnection.setSub_adminPw(sub_adminPw);
//AdminConnection의 sub_adminPw로 세팅됨
return adminConnection;
}
}
MainClass.java
package com.javalec.spring_8_2_2;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
// AbstractApplicationContext ctx = new GenericXmlApplicationContext("applicationCTX.xml");
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
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());
}
}
-> 이런 경우 보통 사용자가 쓰는 운영서버와 개발 서버를 따로두는 경우를 이용하여 설정
ServerInfo.java
package com.javalec.spring_8_3_1;
public class ServerInfo {
private String ipNum;
private String PortNum;
public String getIpNum() {
return ipNum;
}
public void setIpNum(String ipNum) {
this.ipNum = ipNum;
}
public String getPortNum() {
return PortNum;
}
public void setPortNum(String portNum) {
PortNum = portNum;
}
}
applicationCTX_run.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"
profile="run">
<bean id="serverInfo" class="com.javalec.spring_8_3_1.ServerInfo">
<property name="ipNum">
<value>213.186.229.29</value>
</property>
<property name="portNum">
<value>80</value>
</property>
</bean>
</beans>
applicationCTX_dev.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"
profile="dev"
>
<bean id="serverInfo" class="com.javalec.spring_8_3_1.ServerInfo">
<property name="ipNum">
<value>localhost</value>
</property>
<property name="portNum">
<value>8181</value>
</property>
</bean>
</beans>
MainClass.java
package com.javalec.spring_8_3_1;
import java.util.Scanner;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
String config="";
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
if (str.equals("dev")) {
config="dev";//개발
} else if (str.equals("run")) {
config="run";//운영
}
scanner.close();
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.getEnvironment().setActiveProfiles(config);
ctx.load("applicationCTX_dev.xml","applicationCTX_run.xml");
ServerInfo info = ctx.getBean("serverInfo",ServerInfo.class);
System.out.println("ip : "+info.getIpNum());
System.out.println("port : "+info.getPortNum());
}
}
2.JAVA 설정 파일을 이용하는 경우
Annotation부터 작성
ServerInfo.java
package com.javalec.spring_8_3_2;
public class ServerInfo {
private String ipNum;
private String PortNum;
public String getIpNum() {
return ipNum;
}
public void setIpNum(String ipNum) {
this.ipNum = ipNum;
}
public String getPortNum() {
return PortNum;
}
public void setPortNum(String portNum) {
PortNum = portNum;
}
}
ApplicationConfigDev.java
package com.javalec.spring_8_3_2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@Profile("dev")
public class ApplicationConfigDev {
@Bean
public ServerInfo serverInfo() {
ServerInfo info = new ServerInfo();
info.setIpNum("localhost");
info.setPortNum("8181");
return info;
}
}
ApplicationConfigRun.java
package com.javalec.spring_8_3_2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@Profile("run")
public class ApplicationConfigRun {
@Bean
public ServerInfo serverInfo() {
ServerInfo info = new ServerInfo();
info.setIpNum("213.186.229.29");
info.setPortNum("80");
return info;
}
}
MainClass.java
package com.javalec.spring_8_3_2;
import java.util.Scanner;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
String config="";
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
if (str.equals("dev")) {
config="dev";//개발
} else if (str.equals("run")) {
config="run";//운영
}
scanner.close();
// GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
// ctx.getEnvironment().setActiveProfiles(config);
// ctx.load("applicationCTX_dev.xml","applicationCTX_run.xml");
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles(config);
ctx.register(ApplicationConfigDev.class, ApplicationConfigRun.class);
ctx.refresh();
ServerInfo info = ctx.getBean("serverInfo",ServerInfo.class);
System.out.println("ip : "+info.getIpNum());
System.out.println("port : "+info.getPortNum());
}
}