Simple Spring Maven에서 스프링 컨테이너 사용-1
Simple Spring Maven 프로젝트에서 정적인 파일(설정파일 등)은 src/main/resources에서 관리하도록 함,
자바 코드는 src/main/java에 생성
src/main/resources에 스프링 컨테이너로 사용할 xml파일을 생성 후 내용을 작성하고 class에서 불러오는 식으로 사용하게 됨
우선 간단한 예를 들어
<span style="color: rgb(53, 53, 53);"> <?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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- spring.di.ch01 --> <bean id="message" class="spring.di.ch01.MessageKr"/> </beans> </span>
- applicationContext.xml
<span style="color: rgb(53, 53, 53);"> package spring.di.ch01; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { /* 설정파일(xml)로 부터 객체 주입(DI) */ // 1. 스프링 설정파일로부터 스프링 컨테이너 생성 AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // 2. JVM 종료될 때 ApplicationContext를 종료하는 작업 context.registerShutdownHook(); // 3. 스프링 컨테이너에서 빈(객체)를 가져온다. MessageKr message = (MessageKr)context.getBean("message"); // 4. 스프링 빈으로 메서드 호출 message.sayHello("홍길동"); // 5. 어플리케이션 종료시 컨테이너에 존재하는 모든 빈(객체) 닫기 context.close(); } } </span>
- spring.di.ch01.Main.java
<span style="color: rgb(53, 53, 53);"> package spring.di.ch01; public class MessageKr { public MessageKr(){ System.out.println("생성자"); } public void sayHello(String name){ System.out.println("안녕하세요, "+name+"씨"); } } </span>
- spring.di.ch01.Message.java
과 같은 파일들이 있을 때, Main을 실행하게 되면
AbstractApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
이 명령을 실행하며 applicationContext.xml에 작성된 행위를 하게됨(생성자의 메세지로 확인)
applicationContext을 보면<bean id="message" class="spring.di.ch01.MessageKr"/>라는 줄이 있는데 message라는 id로 spring.di.ch01.MessageKr의 객체를 생성하겠다는 뜻임
다시 Main으로 돌아와서 MessageKr message = (MessageKr)context.getBean("message"); 코드를 보면 message변수에 스프링 컨테이너에서 생성된 객체를 id를 통해 호출하여 넣어주는 행위를 하는 것 을 볼 수 있음(주입한다 라고 함)
이렇게 MessageKr 객체가 주입된 message는 기존방법처럼 함수를 호출할 수있게 됨
-> 스프링 프레임워크는 위와 같이 스프링이 객체를 관리하고, 필요할 때 주입하여 사용하는 패턴을 갖는데, 처음엔 객체 생성하는데 왜 굳이 파일 하나 더 만드는 고생을 해야하나 싶었는데 이것의 장점은 web프로젝트를 할 때 깨달을 수 있음.