[Spring] xml파일을 이용한 Spring설정

2019. 5. 18. 01:51JAVA Back-End/Spring

eclipse에서 Maven Project를 생성.

(IDE : eclipse / Build도구는 Maven으로 하겠습니다)

maven-archetype-quickstart 로 선택해줍니다.

Group Id는 패키지 이름으로 사실 네이밍이 굉장히 중요하지만 kr.or.connect으로 간단히 예제용으로 짓고,

Artifact Id는 프로젝트 이름 diexample01 이렇게 임의로 우선 만들어서 생성합니다!

 


프로젝트가 생성되면 pom.xml을 먼저 열어서 

<build>...</build> 태그를 추가해서 jdk1.8을 사용하도록 합니다. 보통 1.5로 디폴트 세팅이 되어 있는 경우가 많습니다.

<dependency><groupId>org.springframework</groupId></dependency> 스프링 프레임워크 dependency를 추가해주시고! 

 

properties의 <spring.version>4.3.14.RELEASE<spring.version>을 추가 해줍니다. properties에 등록된 태그는 상수처럼 사용할 수 있습니다. 스프링 버전을 dependency가 지금은 하나지만 여러 개가 추가되면 일일히 넣어주고 업데이트 될 때마다 각각의 dependency를 변경해줘야하겠죠... 하지만 상수처럼 사용하면 이런 불편함이 줄겠죠:>

pom.xml

<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>kr.or.connect</groupId>
	<artifactId>diexam01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>diexam01</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring.version> 4.3.14.RELEASE</spring.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.6.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

이미 세팅이 완료된 디렉토리 구조입니다^^;;

 


 

아래 xml파일은 고유 한 id를 다른 bean에 할당하고 Spring 소스 파일에 영향을 주지 않으면서 다른 값을 가진 객체의 생성을 제어하는 데 사용됩니다.

 

Spring Application이 메모리에 로드되면, 프레임워크는 아래의 구성 파일을 사용해 정의 된 모든 Bean을 만들고 <bean>태그에 정의 된 고유 Id를 할당합니다.

(<bean> 태그 안에 <property name="message" value="hello world!"/>처럼 <property> 태그를 사용해 Spring에서 인스턴스 생성시 사용된 여러 변수 값을 전달할 수도 있습니다.)

 

applicationContext.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="userBean" class="kr.or.connect.diexam01.UserBean"></bean>

</beans>

 


자, 이제 실제 세팅은 끝! 코드를 작성해봅시다!

UserBean.java는 JDBC프로그래밍을 할 때 getter/setter로 private에 접근해서 Dto(Data transfer Object)를 만들어 데이터를 교환한 것처럼 이런 Bean클래스를 작성합니다.

 

UserBean.java

package kr.or.connect.diexam01;

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;
	}

}

 

ApplicationContext를 이용해서 설정 파일을 읽어들여 실행할 소스 코드를 작성합니다.

 

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 ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		System.out.println("초기화 완료.");

		// getBean()은 object타입으로 리턴하니까 UserBean 클래스 타입으로 형변환
		UserBean userBean = (UserBean) ac.getBean("userBean");
		userBean.setName("Jang");
		System.out.println(userBean.getName());

		UserBean userBean2 = (UserBean) ac.getBean("userBean");
		System.out.println(userBean2.getName());
		
		if(userBean == userBean2) {
			System.out.println("둘은 같은 인스턴스 입니다.");
			System.out.println("ApplicationContext는 싱글톤 패턴으로 사용자가 계속 getBean을 요청해도 하나 만든 bean을 이용합니다..");
			System.out.println("ApplicationContext는 interface로 이것을 구현한 다양한 컨테이너가 존재할 것 입니다");
			System.out.println("그 중 이런 xml파일을 classpath에서 읽어들여서 사용하는 객체가 ClassPathXmlApplicationContext다");
		}

		((ClassPathXmlApplicationContext) ac).close();
	}
}

 

 

 

Bean : 스프링이 관리하는 인스턴스. 개발자가 인스턴스 생성하고 호출, 관리하는 게 아니라 스프링이 제공하는 container를 통해 관리되는 인스턴스. (그렇다고 스프링을 사용하는 application에서 만들어지는 모든 object가 다 Bean은 아니다!!!)

Bean은 기본적으로 싱글톤 스코프! 다시 말해, Bean으로 지정된 클래스는 Spring container에 1개의 인스턴스로만 존재.

 

ApplicationContext : Spring이 제공하는 IoC 컨테이너 중 하나.(나머지는 BeanFactory) Bean을 관리하는 BeanFactory의 기능은 기본으로 더 많은 서비스를 추가 제공합니다(BeanFactory 상위호환). ApplicationContext는 BeanFactory를 상속하는 Interface입니다.

'JAVA Back-End > Spring ' 카테고리의 다른 글

스프링과 객체지향, SOLID  (0) 2023.03.28
[Spring] Spring MVC  (0) 2019.06.08
[Spring] Spring JDBC  (0) 2019.06.07
[Spring] IoC / DI 컨테이너  (0) 2019.05.16
[Spring] Spring Framework?  (0) 2019.05.16