Spring IoC/DI 컨테이너(xml파일을 이용한 설정1)

oyeon·2021년 1월 14일
0
post-custom-banner
  • Directory Tree
  1. UserBean.java 생성
package kr.or.connect.diexam01;
/*
1) 기본생성자를 가지고 있다.
2) 필드는 private하게 선언한다.
3) getter, setter 메서드를 가진다. 
getName() setName() 메서드를 name 프로퍼티(property)라고 한다. (용어 중요!!)
*/
public class UserBean {
	private String name;
	private int age;
	private boolean male;
	
	public UserBean() {}
	public UserBean(String name, int age, boolean male) {
		this.name = name;
		this.age = age;
		this.male = male;
	}
	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 boolean isMale() {
		return male;
	}
	public void setMale(boolean male) {
		this.male = male;
	}	
}
  1. pom.xml 의존성 추가
... 
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!-- 상수와 같은 역할 -->
    <spring.version>4.3.30.RELEASE</spring.version>
  </properties>

  <dependencies>
  	<!-- maven spring context(공장) 검색 -->
  	<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
	  <groupId>org.springframework</groupId>
	  <artifactId>spring-context</artifactId>
	  <version>${spring.version}</version>
	</dependency>
    	...
  </dependencies>
...
  1. resources 폴더 밑에 applicationContext.xml 생성
  • main폴더 내에 어디든 생성해도 상관없지만 관리의 용이를 위해 resource 폴더 마련
<?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">
  <!-- spring 컨테이너한테 내가 생성할 객체를 대신 생성하게 하려고 한다. 이를 위해 bean으로 정보를 전달한다.
       spring 컨테이너는 이런 객체를 1개만 갖고 있다. 이를 싱글턴 패턴이라고 한다.
       UserBean userBean = new UserBean();와 같은 의미 -->
  <bean id ="userBean" class="kr.or.connect.diexam01.UserBean"/>
</beans>
  1. ApplicationContextExam01.java 생성
package kr.or.connect.diexam01;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ApplicationContextExam01 {
    public static void main(String[] args) {
	/* ApplicationContext는 인터페이스이다. 
    	 * 따라서 ApplicationContext를 구현하는 다양한 컨테이너가 존재한다.
	 * 그중에서 xml파일을 classpath로 읽어들여서 사용하는 객체가  ClassPathXmlApplicationContext이다.
	 * main에서 생성한 resource 폴더에 있는 xml 파일은 자동으로 classpath로 지정이 된다.
	 * ClassPathXmlApplicationContext 객체가 생성될 때 applicationContext.xml에 저장된
	 * bean의 정보를 모두 읽어들여서 객체들을 전부 생성해서 메모리에 올려 놓는다.
	 */ 
	ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
	System.out.println("초기화 완료!!");

	/* getBean("userBean")을 통해 applicationContext.xml파일에서 
     	 *"userBean"을 가진 id가 있는지 보고 그곳에 등록된 class를 생성
	 */
	UserBean userBean = (UserBean)ac.getBean("userBean");
	userBean.setName("choi");

	System.out.println(userBean.getName());

	UserBean userBean2 = (UserBean)ac.getBean("userBean");

	/* bean 공장이 싱글턴 패턴을 이용해서 bean을 생성 
    	 * 사용자가 계속 getBean요청을 하더라도 처음에 만든 bean을 이용하는것이다.
	 * 객체를 대신 생성해주고, 싱글턴으로 관리해주는 기능 등을 IoC 제어의 역전이라고 한다.
	 */
	if(userBean == userBean2)
		System.out.println("같은 인스턴스입니다.");
    }
}
  • 결과
profile
Enjoy to study
post-custom-banner

0개의 댓글