본문 바로가기
Java Web Programming/6. Spring | MyBatis

[Spring] 메이븐 maven 형식, Spring IOC 개발단계

by 파프리카_ 2020. 10. 27.
728x90
반응형

[ 메이븐 (Maven) ] 

why?

Maven(메이븐) = Dependency Management

1.  의존성 관리

2.  어플리케이션이 필요한 많은 라이브러리를 일괄적으로 관리

pom.xml 에서 설정한다

- pom(project object model)

 

pom.xml 에 필요한 외부라이브러리를 설정하면,

원천사이트에서 원격으로 한번 로컬라이브러리 저장소에 저장하고,

이를 지속적으로 사용할 수 있다


설정 방법

일반프로젝트 해당프로젝트에서 오른쪽 마우스 클릭 configure → convert to maven project 적용

pom.xml에서 필요한 라이브러리를 설정하면 저장소에 저장된다.

http://mvnrepository.com/

위 사이트에서 의존 라이브러리 maven 정보 및 jar 를 다운로드 받을 수 있다.

spring dependencies 정보

예)

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.3.14.RELEASE</version>
</dependency>

pom.xml 변경시 해당 프로젝트에서 오른쪽 마우스 클릭 Maven- Update Project 를 하면 라이브러리가 업데이트 된다.


Spring IOC 개발 단계

1. 기존 시스템 - 망치(Hammer), 삽(Spade)

2. 추상화 (abstraction → Interface) - 망치와 삽을 추상화

3. Maven을 이용해 Spring 라이브러리 확보 

4. Spring Config(설정) - 방법 1)xml 2)annotation - 아래 예제에서는 xml으로 설정함 

5. Application Context (=Spring Container = IOC Container)

 


/model

 

/Tool.java <<interface>>

package model;

public interface Tool {
	public void work();
}

 

/Hammer.java

package model;

public class Hammer implements Tool{
	public void work() {
		System.out.println("망치 도구로 일하다.");
	}
}

 

/Spade.java

package model;

public class Spade implements Tool{
	public void work() {
		System.out.println("삽 도구로 일하다.");
	}
}

 

/Poclain.java

package model;

public class Poclain implements Tool{
	public void work() {
		System.out.println("포크레인 도구로 일하다.");
	}
}

/test

 

- IOC/DL 방식으로 객체를 받아옴

- Spring ioc container는 singleton 방식이 default이다.

 

/testIOC.java

package test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import model.Tool;

public class TestIOC {
	public static void main(String[] args) {
		//Spring IOC Container 
		// : 객체를 생성하여 제어하는 역할
		//(singleton 방식으로 운용됨)
		ClassPathXmlApplicationContext factory 
			= new ClassPathXmlApplicationContext("ioc.xml");
		
		//DL : Dependency Loopup -> 스프링 IOC 컨테이너에서
		// bean id를 이용해 검색 후 필요로 하는 객체를 확인한다.
		Tool tool = (Tool) factory.getBean("tool");
		System.out.println(factory.getBean("tool"));
		System.out.println(factory.getBean("tool"));
		System.out.println(factory.getBean("tool"));
		
		tool.work();
		
		/* 출력값 :
		 * model.Poclain@7225790e
		 * model.Poclain@7225790e
		 * model.Poclain@7225790e
		 * 포크레인 도구로 일하다.
		 *
		 * 객체를 여러번 받아도 동일한 객체가 반환된다.
		 * : Spring ioc container는 객체를 singleton방식으로 운용한다. 
		 */
		
		factory.close();
		
	}
}

/pom.xml 에 아래 추가

<dependencies>
  <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>4.3.14.RELEASE</version>
	</dependency>
</dependencies>

 

IOC를 사용하면 유지보수성을 향상할 수 있다.


/ioc.xml

 

1. Poclain 입력할 경우, testIOC.java 에서 실행할 경우 포크레인 도구로 일하다. 가 출력됨

<?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="tool" class="model.Poclain"></bean>

</beans>

 

2. Hammer 입력할 경우, (Spade 입력할 경우도 동일)

 testIOC.java 에서 실행할 경우 망치 도구로 일하다. 가 출력됨

<?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="tool" class="model.Hammer"></bean>

</beans>
728x90
반응형