1. 예제 클래스 만들기


1) 인터페이스 MessageBean.java


package sample3;


public interface MessageBean {

public void sayHello(String name);

}



2) 위의 인터페이스를 구현하는 영문메시지 출력용 MessageBeanEn.java

package sample3;

public class MessageBeanEn implements MessageBean {

@Override

public void sayHello(String name) {

System.out.println("Hello, "+name+"!!!");

}

}



3) 위의 인터페이스를 구현하는 한글메시지 출력용 MessageBeanKr.java

package sample3;

public class MessageBeanKr implements MessageBean {

@Override

public void sayHello(String name) {

System.out.println("안녕하세요, "+name+"님.");

}

}



4) 위의 클래스를 실행하려면 다음과 같이 만들어야 한다. 실행클래스 HelloApp.java

package sample3;

public class HelloApp {

public static void main(String[] args) {

MessageBean beanKr = new MessageBeanEn(); // 인터페이스를 이용

// beanKr.sayHello("홍길동");

beanKr.sayHello("john");

}

}


인터페이스의 다형성으로 인해 MessageBean이란 이름의 인터페이스 클래스명으로 동일한 타입의 객체를 생성할 수 있다.
여기에서 스프링을 이용하면 더 결합성을 약화시킬 수 있다.



2. bean.xml 만들기

1) 프로젝트에서 new Spring Bean Definition file 생성





2) beans.xml이 생성된다.







3) 하단에 Source를 누르면 xml 파일 내용 확인 가능






4) 스프링의 bean.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="messageBean" class="sample3.MessageBeanKr"></bean>


</beans>




3. 스프링 jar 파일 추가


1) 프로젝트에서 New-최하단 Properties 선택-Java Build Path-Libraries 탭 선택,





2) Add Library 버튼 누름-User Library 선택-New 선택






3) 라이브러리 이름 설정(ex) SpringApp_Lib


생성되면 Add External JARs 선택, 다운받은 스프링 jar 파일 추가해줌.






4) 추가 완료






4. 예제 


1) 스프링의 모듈을 이용하여 HelloApp.java를 다음과 같이 만들어줄 수 있다.


package sample3;


import org.springframework.beans.factory.BeanFactory;

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

import org.springframework.core.io.ClassPathResource;

import org.springframework.core.io.FileSystemResource;

import org.springframework.core.io.Resource;

import sample3.MessageBean; 


public class HelloApp {


public static void main(String args[]) {

//Resource res = new FileSystemResource("beans.xml"); // 해당 프로젝트 안에 xml 넣는 경우

Resource res = new ClassPathResource("beans.xml"); // 해당 패키지 안에 xml 넣는 경우

BeanFactory factory = new XmlBeanFactory(res);

//MessageBean bean = factory.getBean("messageBean", MessageBean.class); 이렇게 해도 됨

MessageBean bean = (MessageBean) factory.getBean("messageBean");

bean.sayHello("john");

}

}


 Resource: FileSystemResource의 상위클래스(인터페이스)

 FileSystemResource: 해당 설정파일(beans.xml)의 정보를 반환해주는 클래스

 해당 설정파일의 정보를 알았으면 생성하라는 요청을 해야함.

 XmlBeanFactory: 해당 설정파일 정보의 Bean 객체를 생성하는 클래스

 BeanFactory: XmlBeanFactory의 상위클래스(인터페이스)



스프링을 사용하는 목적

원래는 MessageBeanEn beanKr = new MessageBeanEn(); 이런 식으로 객체를 생성해준 뒤, beanKr.sayHello("john"); 형식으로 사용을 했다.

(인터페이스를 구현하는 경우 다형성을 활용하여 MessageBean beanKr = new MessageBeanEn(); 이런 식으로 각기 다른 클래스에서 동일한 클래스명으로 써줄 수 있다.)


이 경우 각 클래스마다 이름이 변경이 있을 때 연관된 클래스마다 객체 생성시 이름도 모두 변경해줘야 하는 문제가 있다.

하지만 스프링에서 xml을 이용해 객체 생성을 맡기면 bean.sayHello("john"); 형식으로 스프링 객체에서 해당 메소드를 사용할 수 있으므로, 연관 클래스를 모조리 바꿔줄 필요없이, 스프링에서만 바꿔주면 된다.


DI 의존적 주입. 객체를 필요로 하는 곳에 주입.DI 의존적 주입 



Posted by netyhobby
,