국비학원_60일차(Spring-DI, SDLC)

써니·2022년 10월 18일
0

spring

목록 보기
2/23

🌞Spring

🔻och03_di03

[DI03 - student]

  • Student.java
package DI03;

public class Student {
	private String name;
	private int age;
	private String gradeNum;
	private String classNum;
	
    // 우선권을 가짐
	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 Constructor 시작...");
	}

	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
package DI03;

public class StudentInfo {
	private 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());
			System.out.println("=================================");
		}
	}

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

  • 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">
		<constructor-arg value="연개소문"></constructor-arg>
		<constructor-arg value="50"></constructor-arg>
		<constructor-arg value="4학년"></constructor-arg>
		<constructor-arg value="25번"></constructor-arg>
	</bean>
	<bean id="studentInfo" class="DI03.StudentInfo">
		<constructor-arg><ref bean="student1"></ref></constructor-arg>
	</bean>
</beans>

🔎property에 이름을 양만춘을 넣어줬을 때

생성자가 생성되지 않고선 setter 를 사용할 수 없기 때문에 constructor가 먼저 실행

<?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">
		<constructor-arg value="연개소문"></constructor-arg>
		<constructor-arg value="50"></constructor-arg>
		<constructor-arg value="4학년"></constructor-arg>
		<constructor-arg value="25번"></constructor-arg>
		<property name="name"><value>양만춘</value></property>
	</bean>
	<bean id="studentInfo" class="DI03.StudentInfo">
		<constructor-arg><ref bean="student1"></ref></constructor-arg>
	</bean>
</beans>



[DI03 - student 번외]

👉 Constructor를 하나 더 생성+기존방식

  • Mainclass03.java
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();
        
        //기존 방식
        Student student3 = new Student("김유신3", 23, "3학년", "3번");
        student3.setAge(32);
        System.out.println("student3.getAge()-->"+student3.getAge());
        studentInfo.setStudent(student3);
        studentInfo.getStudentInfo();
   }
}

  • 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">
		<constructor-arg value="연개소문"></constructor-arg>
		<constructor-arg value="50"></constructor-arg>
		<constructor-arg value="4학년"></constructor-arg>
		<constructor-arg value="25번"></constructor-arg>
		<property name="name"><value>양만춘</value></property>
	</bean>
	<bean id="student2" class="DI03.Student">
		<constructor-arg value="김유신"></constructor-arg>
		<constructor-arg value="30"></constructor-arg>
		<constructor-arg value="3학년"></constructor-arg>
		<constructor-arg value="11번"></constructor-arg>
	</bean>
	<bean id="studentInfo" class="DI03.StudentInfo">
		<constructor-arg><ref bean="student1"></ref></constructor-arg>
	</bean>
</beans>

🔎순서를 바꾸고 싶을 때

index를 줘서 순서를 바꾸고 타입을 바꾸고 싶을 때는 타입을 따로 준다.

<?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">
		<constructor-arg value="연개소문"></constructor-arg>
		<constructor-arg value="50"></constructor-arg>
		<constructor-arg value="4학년"></constructor-arg>
		<constructor-arg value="25번"></constructor-arg>
		<property name="name"><value>양만춘</value></property>
	</bean>
	<bean id="student2" class="DI03.Student">
		<constructor-arg index="1" value="30"></constructor-arg>
		<constructor-arg index="0" value="김유신"></constructor-arg>
		<constructor-arg type="java.lang.String" value="3학년"></constructor-arg>
		<constructor-arg value="11번"></constructor-arg>
	</bean>
	<bean id="studentInfo" class="DI03.StudentInfo">
		<constructor-arg><ref bean="student1"></ref></constructor-arg>
	</bean>
</beans>




[DI05 - Map]

  • CollectionBean.java
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.java
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>
					<key><value>홍길동</value></key><value>율도국</value>
				</entry>
				<entry>
					<key><value>중앙</value></key><value>이대</value>
				</entry>
			</map>
		</property>
	</bean>
</beans>




[DI06 - Student1]

첫번째 xml

  • Student.java
package DI06;

import java.util.ArrayList;

public class Student {
	private String name;
	private int		age;
	private ArrayList<String> hobbys;
	private int weight;
	private int 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 int getWeight() {
		return weight;
	}
	public void setWeight(int weight) {
		this.weight = weight;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	
}

  • StudentInfo.java
package DI06;

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

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

  • MainClass06.java
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);
		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");
		}
	}
}

  • 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>선덕여왕</value>
		</constructor-arg>
		<constructor-arg>
			<value>30</value>
		</constructor-arg>
		<constructor-arg>
			<list>
				<value>승마</value>
				<value>정치</value>
			</list>
		</constructor-arg>
		<property name="weight" value="55"/>
		<property name="height" value="162"/>
	</bean>
	<bean id="studentInfo1" class="DI06.StudentInfo">
		<property name="student"><ref bean="student1"></ref></property>
	</bean>
</beans>




[DI06 - Student2]

두번째 xml

  • MainClass06.java
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");
		}
	}
}

  • 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">
		<constructor-arg>
			<value>이순신</value>
		</constructor-arg>
		<constructor-arg>
			<value>55</value>
		</constructor-arg>
		<constructor-arg>
			<list>
				<value>활쏘기</value>
				<value>검술</value>
			</list>
		</constructor-arg>
		<property name="weight" value="70"/>
		<property name="height" value="177"/>
	</bean>
</beans>



❗객체 값을 비교할 때는 보통 값을 비교하는 것이 아니라 주소(reference)를 비교함❗

🔎xml에서 scope을 prototype으로 해주면?

각각의 인스턴스로 따로 뽑고 싶다면 prototype - 각각의 객체 생성

같은 '이순신'의 출력값이 나왔을 지라도 참조하는 주소가 다르기 때문에 비교에서 다르다고 나옴

<bean id="student3" class="DI06.Student" scope="prototype">


🔎xml에서 scope을 singleton으로 해주면?

singleton이 디폴트값 / 같은 인스턴스 반환

<bean id="student3" class="DI06.Student" scope="singleton">





💡 Spring 세팅 방식

1. XML

2. Annotation ❗

차이 예시-MainClass의 객체


차이 예시-값 설정




[DI07 - Annotation]

  • Student.java
package DI07;

import java.util.ArrayList;

public class Student {
	private String name;
	private int		age;
	private ArrayList<String> hobbys;
	private int weight;
	private int 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 int getWeight() {
		return weight;
	}
	public void setWeight(int weight) {
		this.weight = weight;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
}

  • ApplicationConfig.java
    자바의 특성 때문에 ArrayList를 먼저 적어줘야한다.
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 student = new Student("안예은", 24, hobbys);
		student.setHeight(160);
		student.setWeight(50);
		
		return student;
	}
	
	@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;
	}
}

  • MainClass07.java
package DI07;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainClass07 {

	public static void main(String[] args) {
		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();
	}
}




[DI08 - XML+Annotation]

  • Student.java
package DI08;

import java.util.ArrayList;

public class Student {
	private String name;
	private int		age;
	private ArrayList<String> hobbys;
	private int weight;
	private int 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 int getWeight() {
		return weight;
	}
	public void setWeight(int weight) {
		this.weight = weight;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
}

  • MainClass08.java
package DI08;

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

import DI08.Student;

public class MainClass08 {
	
	public static void main(String[] args) {
		AbstractApplicationContext ctx = 
				new GenericXmlApplicationContext("classpath:applicationCTX08.xml");
                
        // annotation
		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());
		// XML
		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

annotation 환경과 연결을 해야하기 때문에 xml 생성 전 context를 선택해줘야 한다.

<context:annotation-config/> <bean class="DI08.ApplicationConfig"></bean>
--> xml과 annotation 연결


<?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/>
	<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.java
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

🐣sdlc-생명주기

version1.0 설정


[sdlc01]


  • Student.java

interface --> 실행할 때 : initializingBean / 종료될 때 : DisposableBean


--> getters만 생성

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;
	
	// 소멸자 소멸전
	public void destroy() throws Exception {
		System.out.println("Student의 destory() --> 소멸자가 소멸되기 전...");
	}
	
	// 생성자 생성이후
	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.java ( Annotation 방식 사용 / 인터페이스 상속X )

--> getters만 생성

package sdlc01;

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

public class OtherStudent {
	private String name;
	private int age;
	
	@PostConstruct
	public void init() {
		System.out.println("OtherStudent의 initMethod() 생성자 생성이후");
	}
	
	@PreDestroy
	public void destroyMethod() {
		System.out.println("OtherStudent의 destroyMethod() 소멸자가 소멸되기 전..");
	}
	
	public OtherStudent(String name, int age) {
		this.name = name;
		this.age = age;
        System.out.println("OtherStudent 생성자 ...");
	}

	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
}



annotation 주는 방법( 상속 / 선언 )

위-interface / 아래-선언




  • porm.xml ( Annotation tool을 위한 수정)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.springframework.samples</groupId>
  <artifactId>sch04_SDLC</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <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>	
</project>

  • MainClass01.java
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.load After");
		// 실제 Bean 생성
		ctx.refresh();
		System.out.println("3 ctx.refresh After");
		
		System.out.println("==============Student=============");
		Student student = ctx.getBean("student", Student.class);
		System.out.println("이름 : "+student.getName());
		System.out.println("나이 : "+student.getAge());
		
		System.out.println("============otherStudent===========");
		OtherStudent otherStudent = ctx.getBean("otherStudent", OtherStudent.class);
		System.out.println("이름 : "+otherStudent.getName());
		System.out.println("나이 : "+otherStudent.getAge());
		
		ctx.close();
		System.out.println("4 ctx.close After");

	}
}

  • 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.java
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.java
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());
		
		System.out.println("==============값비교=================");
		if(student1.equals(student2)) {
			System.out.println("student1 == student2");
		} else {
			System.out.println("student1 != student2");
		}
	}
}

  • applicationCTX02.xml( bean )
<?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="sdlc02.Student" scope="singleton">
		<constructor-arg value="흑수돌"/>
		<constructor-arg value="30"/>
	</bean>
</beans>

디폴트 값 SingleTon은 같은 bean을 참조할 때 같이 반영된다
prototype은 같은 bean을 참조하더라도 각각의 객체에 담긴다





🔻och05_env

🌍환경작업


[env02 - property]


  • AdminConnection.java

interface - initializingBean, DisposableBean

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 destory() 소멸자가 소멸되기 전...");
	}

	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.java
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("connection", 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();
	}
}

  • applicationCTX02.xml ( bean + context )

properties방식
context:property-placeholder --> 파일의 위치

<?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:property-placeholder location="classpath:admin2.properties , classpath:sub_admin2.properties" />
	<bean id="adminConnection" class="env02.AdminConnection">
		<property name="adminId" value="${admin.id}"/>
		<property name="adminPw" value="${admin.pw}"/>
		<property name="sub_adminId" value="${sub_admin.id}"/>
		<property name="sub_adminPw" value="${sub_admin.pw}"/>
	</bean>
</beans>

  • admin2.properties ( File )
admin.id=admin
admin.pw=12345

  • sub_admin2.properties ( File )
sub_admin.id=sub2
sub_admin.pw=67890

0개의 댓글