본문 바로가기

Java

간단한 Spring Project 실습하기

Src 폴더 아래에 Package명이 spring.di.hello인 이름이 Hello인 인터페이스를 하나 생성한다.

 package spring.di.hello;

 public interface Hello {

 public abstract void sayHello();

 

}

 

위에서 생성한 Hello를 Inplement하는 KorHello 와 EngHello 파일을 생성한다.

package spring.di.hello;

 public class KorHello implements Hello{

 public void sayHello(){

System.out.println("안녕하세요~*");

}

}

package spring.di.hello;

 

public class EngHello implements Hello {

 

@Override

public void sayHello() {

// TODO Auto-generated method stub

System.out.println("How are you?");

}

}

   

 

위 생성한 파일을 실행해 줄 TestHello.java 파일을 생성한다.

import spring.di.hello.Hello;

import spring.di.hello.KorHello;

 

public class TestHello {

 

public static void main(String[] args){

//Dependency Injection에서는

// 기존의 아래 10~11 Line처럼 사용하지 않는다.

Hello h=new KorHello();//Line 10

h.sayHello(); //Line 11

}

}

다시말해 TestHello sayHello() 실행하기 위해 KorHello class 의존하여 실행하게끔 되어 있는게 기존 방식이다.

 

TestHello KorHello 의존관계이다.

이를 Spring에서는 직접 의존하지 않고 컨테이너에 의존하여 11라인을 출력한다.

 

, 이를 실행하여 주는 환경에서 외부 설정파일에 의존하여 소스코드의 재컴파일없이 변경할 있도록 하여 준다.

 

이제 아래와 같이 외부 설정파일(applicationContext.xml)을 생성하여 본다.

   

 
   

 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

 <!-- Spring FrameWork Configuration File -->

 <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-2.5.xsd">

 <!--

Prgram에서 hello라는 이름으로 Srping container에게 요청을 하면

Container KorHello 클래스의 객체를 생성하여 Return하여 준다.

-->

 <bean name="hello" class="spring.di.hello.KorHello"/>

 </beans>

 

위의 생성한 applicationContext.xml 파일을 통해 Data Injection을 구현하기 위해 TestHello.java 파일을 아래와 같이 변경한다.

TestHello.java

import org.springframework.beans.factory.BeanFactory;

import org.springframework.beans.factory.xml.XmlBeanFactory;

import org.springframework.core.io.ClassPathResource;

import org.springframework.core.io.Resource;

 import spring.di.hello.Hello;

 

public class TestHello {

 public static void main(String[] args){

//Dependency Injection에서는

// 기존의 아래 10~11 Line처럼 사용하지 않는다.

/*Hello h=new KorHello(); //Line 10

h.sayHello(); //Line 11*/

 

//1.Spring 설정 파일의 위치를 Resource 객체로 생성.

//org.springframework.core.io.Resource

Resource resource=new ClassPathResource("applicationContext.xml");

 

//2. Spring FrameWork에서 객체를 생성해 주는 BeanFactory 객체를 얻어온다.

// BeanFactory 객체를 얻어올 때는 설정 파일의 위치를 알려줘야 한다.

BeanFactory factory=new XmlBeanFactory(resource);

 

//3. BeanFactory 에게 객체 생성을 요청

Object obj=factory.getBean("hello");

Hello hello=(Hello)obj;

hello.sayHello();

}

}

Result :

<bean name="hello" class="spring.di.hello.KorHello"/>

<bean name="hello" class="spring.di.hello.EngHello"/>

안녕하세요~*

How are you?

 

심화학습

TestHello.java를 아래와 같이 변경.

private Hello hello;

public TestHello(){};

public TestHello(Hello hello){

this.hello=hello;

}

public void useHello(){

this.hello.sayHello();

}

public static void main(String[] args){

Resource resource=new ClassPathResource("applicationContext.xml");

 

BeanFactory factory=new XmlBeanFactory(resource);

 

Object obj=factory.getBean("testHello");//외부로 부터 "testHello"라는 이름과 매치된 객체를 받아온다.

TestHello th=(TestHello)obj;

th.useHello();

위 소스에서 보듯이 이번에는 TestHello는 hello 객체를 참조하고 있다.

applicationContext.xml

<bean name="testHello" class="TestHello">

<constructor-arg ref="hello"/>

</bean>

testHello라는 이름이 호출되면 TestHello 객체를생성하는데 이때 생성자의 Argument hello 참조한다.

'Java' 카테고리의 다른 글

Spring 초간단 실습  (0) 2010.06.15
Struts 1 설치 및 간단한 실습  (0) 2010.06.14
Filter  (0) 2010.06.13
File Upload API  (0) 2010.06.13
Spring에서 자주 사용되어지는 API 묶음  (0) 2010.06.13
Spring 설치 및 이클립스와의 연동  (1) 2010.06.13
Tomcat 설치 및 간단한 환경설정  (0) 2010.04.22
0401 Report Source  (0) 2010.04.01
PrintWriter Ex. Source  (0) 2010.04.01
PrintWriter Ex. Source  (0) 2010.04.01