저작자 표시 비영리 변경 금지
신고
Posted by Kingear
예제 소스 구성은 Animal 인터페이스, Animal 인터페이스를 구현한 Dog 클래스와 Cat 클래스 그리고 DI 적용 예제를 테스트할 DITest 클래스를 만들었다.
※ 소스 코드는 Spring Tool Suit 2.5.2 에서 작성되었다 이클립스에서도 잘실행되는 코드다.

Animal Interface 
public interface Animal {
	public void bark(); 
}

Cat Class 
public class Cat implements Animal {
	public void bark() {
		System.out.println("야옹");
	}
}

Dog Class 
public class Dog implements Animal {
	public void bark() {
		System.out.println("멍멍");
	}
}

DITest Class 
import org.junit.Test;

public class DITest {
	private Animal animal = new Cat();

	@Test
	public void testBrak() {
		animal.bark();
	}
}

jUnit 을 사용하기 위해 라이브러리를 추가했다.  ※ @Test 어노테이션이 붙은 메소드는 테스트 대상 메소드가 되며 STS(이클립스) 상에서
우클릭 -> Run As -> JUnit Test 또는 shift + alt + x -> t  로 테스트를 수행할 수 있다. 

위에서 작성한 테스트 코드를 돌렸더니 예상했던대로 "야옹" 이 출력된다. 
이제 Spring 의 xml context 파일을 이용해서 animal 을 주입받아 사용해 볼차례다.

Spring 의 context 설정 파일의 기본 틀을 다음 파일과 같다.

위 파일을 열어보고 beans 안에 다음 노드를 추가한다.

DITest 클래스위에 @ContextConfiguration(locations = "/컨텍스트 파일 경로") 를 추가하면 컨텍스트 파일을 읽어 들여서 테스트를 실행 할 수 있다.  
※ 컨텍스트 파일 경로는 / 를 클래스 패스의 루트 경로로 해서 접근해 나가면 된다. 클래스 패스 루트 경로에 있다면 /파일명 이 될 것이고 a.b.c 패키지 안에 설정파일이 있다면 /a/b/c/파일명 과 같은 방법으로 가능하다.
DI 를 하기 위해서는 DI 대상이 되는 Animal 프로퍼티 위에 @Autowired 를 추가한다. @Autowired 을 붙여주면 컨텍스트 설정에 등록된 빈중에 @Autowired 가 붙은 객체와 같은 타입인 빈을 찾아서 주입해준다.


context 설정 파일을 통해 DI 를 적용하도록 수정한 DITest 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class DITest {
	@Autowired
	private Animal animal;
	
	@Test
	public void testBrak() {
		animal.bark();
	}
}

추가라이브러리 파일

추가한 내용은 별거 없는데 추가할 라이브러리들이 급격히 늘어났다. Spring 을 이용하게 되면서 서로 의존성을 가지고 있는 라이브러리들이 많아서 그런 것이다.
DITest 위에 추가한 @RunWith(SpringJUnit4ClassRunner.class) 어노테이션은 스프링 테스트 컨텍스트 프레임워크의 JUnit 확장 기능을 지정하기 위한 것이라고 하는데 자세한 내용은 잘모르겠다. 아무튼 @RunWith() 를 추가해야 이상없이 잘 돌아간다. 나중에 좀더 깊게 공부해봐야 될 것 같다. 

이제 컨텍스트 설정 파일만 수정하면 DITest 에서 사용할 animal 에 주입될 클래스를 변경 할 수 있다. 기존 설정 파일에서 bean 부분을 다음과 같이 바꾸고 DITest 를 돌려보면 결과가 바뀌게 된다. 주입하는 객체를 바꿨기 때문이다.
 


@Autowired 는 주입대상이 되는 객체의 타입을 기준으로 설정파일로부터 주입될 객체를 찾는 다고 했는데 설정 파일에 같은 타입을 가진 bean 이 두개 이상 있다면 어떻게 될까?
설정파일에 animal 을 구현한 클래스 Cat 과 Dog 를 동시에 bean 으로 설정하고 테스트를 돌려보면 org.springframework.beans.factory.BeanCreationException 이 떨어진다. 예외 메시지를 더자세히 읽어보면 간단히 말해서 Autowire 대상이 되는 타입이 유일하지 않다는 것이다. 이런 경우에는 DI 대상이 되는 객체에 @Qualifier("주입할 bean의 id") 를 붙여주면 이제 타입을 가지고 찾는 것이 아니라 설정 파일에 등록한 bean 의 id 를 가지고 찾아서 DI 하게 된다. 
@Autowired
@Qualifier("dog")
private Animal animal; 

Spring 을 사용해서 DI 를 적용하는데는 여러가지 방법이 있겠지만 일단 이정도만 익혀두면 DI 가 필요할때 손쉽게 적용할 수 있을 것 같다.




신고

'Java > Spring' 카테고리의 다른 글

Spring 사용하기 - XML 설정 파일을 사용한 DI  (0) 2012.02.09
Spring Tool Suite - 프로젝트 시작하기.  (0) 2012.02.08
IoC / DI  (0) 2012.02.07
Request Method 에 따른 Parameter Encoding  (0) 2011.03.17
Posted by Kingear
TAG java, Spring
Spring Tool Suite(STS)는 Spring 을 사용하여 개발하는데 많은 도움을 주는 Eclipse 기반 IDE 이다. STS 를 통해 Spring 기반 웹 어플리케이션 프로젝트를 시작하면 여러가지로 편한점이 많다. 

설치
 

다음 프로그램들을 전부 다운받아 설치한다. 

IDE - Spring Tool Suite(STS) 
다운로드 :  http://www.springsource.com/developer/sts  


WAS - Apache Tomcat 6.x 
다운로드 :  http://tomcat.apache.org/download-60.cgi 


DBMS - MySQL 5.x
다운로드 :  http://www.mysql.com/downloads/mysql/ 


설치후 해야 할것들
※ jdk 설치 폴더/bin 을 시스템 환경 변수에 추가하기 
※ STS 에 Tomcat Server 만들기 

Hello World

설치를 모두 마쳤으면 STS 를 열고 프로젝트를 만든다.

Step 1 - 상단 메뉴 -> file -> new -> Spring Template Project 선택


Step 2 - Spring MVC Project 선택하고 next!


Step 3 - 프로젝트 명과 디폴트 패키지 명을 입력한다. 기본적으로 a.b.c 와 같이 3뎁스 구조로 입력해야 하며 관용적으로 사용하는 도메인명을 거꾸로 한 이름을 사용한다. 
※나는 프로젝트명은 SpringBoard 디폴트 패키지는 kr.kingear.board 로 주고 finish!


이렇게 하면 프로젝트가 생성된다. 프로젝트는 생성되자 마자 Maven 에 의해 pom.xml 에 등록되어 있는 라이브러리들을 Maven 중앙 리파지토리로 부터 끌어온다. 잠시 기다리면 처음부터 있던 JRE System Library 꾸러미(?) 밑에 Maven Dependencies 꾸러미가 추가된 것을 확인 할 수 있다.  Spring Template Project 로 프로젝트를 생성하게 되면 Spring 을 사용할 때 필요한 기본적인 라이브러리들이 pom.xml 에 자동으로 등록돼서 생성된다. 

※ Maven 역시 깊게 공부해야할 굉장히 중요한 도구이지만 Spring 에 집중하기 위해 Maven 공부는 잠시 뒤로 미룬다.

이제 톰캣에 방금 만든 프로젝트를 추가해서 구동한다.
브라우저에
http://localhost:8080/프로젝트명  을 입력하면 Hello World 가 뜨는 것을 볼 수 있을 것이다. 이제 개발할 준비가 끝났다.
신고

'Java > Spring' 카테고리의 다른 글

Spring 사용하기 - XML 설정 파일을 사용한 DI  (0) 2012.02.09
Spring Tool Suite - 프로젝트 시작하기.  (0) 2012.02.08
IoC / DI  (0) 2012.02.07
Request Method 에 따른 Parameter Encoding  (0) 2011.03.17
Posted by Kingear

Error
java.lang.Error 클래스의 서브클래스들이며 시스템에 비정상적인 상황이 발생했을 경우에 사용된다. 주로 자바 VM 에서 발생시키며 어플리케이션 코드에서 잡으려고 하면 안된다. OutOfMemoryError 나 ThreadDeath 같은 에러가 여기에 속하며 시스템 레벨에서 특별한 작업을 하는 것이 아니라면 어플리케이션에서는 이런 에러에 대한 처리는 신경 쓰지 않아도 된다. 

Exception 과 체크 예외
java.lang.Exception 클래스와 그 서브 클래스로 정의되는 예외들은 에러와 달리 개발자들이 만든 어플리케이션 코드의 작업중에 예외상황이 발생 했을 경우에 사용된다.
Exception 클래스는 다시 체크 예외와 언체크 예외로 구분된다. 
체크 예외는 Exception 클래스의 서브클래스이면서 
 
신고

'Java' 카테고리의 다른 글

Exception 의 종류와 특징  (0) 2012.02.07
Posted by Kingear
TAG java

IoC / DI

Java/Spring 2012.02.07 11:49
IoC 와 DI

IoC - Inversion of Control 의 약자로 우리말로는 제어의 역전 정도가 될 수 있다. 프로그램에서 제어의 흐름 구조가 바뀌는 것을 의미한다. 다시말해서 실행 흐름속에서 객체들이 자신이 사용할 다른 객체들을 결정하고 제어하는 권한을 스스로 갖지 않고 외부의 다른 객체에게 위임 하는 것이다.  


DI - Dependency Injection 의 약자로 의존성 주입 또는 의존관계 주입등과 같이 여러가지 말로 번역 될 수 있다. 의존성이란 객체간의 관계에 의해서 하나의 객체가 변하면 관계를 맺고 있는 객체들이 영향을 받는 성질을 말하는데 의존성이 강하면 강할 수록 유지보수 측면에서 어려움이 생긴다. 이런 의존성을 좀더 느슨하게 해서 유지보수를 용이하게 하기 위해 인터페이스를 사용하는 것과 같은 방법으로 객체간의 관계를 느슨하게 연결한다. DI 는 느슨하게 연결된 관계에 사용될 구체적인 객체를 외부에 의해 제공해주는 방식을 말한다 IoC 와 크게 다른 개념이라기 보다는 좀더 구체적인 의미를 담고 있다고 할 수 있다.



Spring 의 IoC / DI

Spring 은 앞서 나온 IoC / DI 를 적극 활용한 프레임 워크라고 할 수 있다. Spring 에서는 다음과 같은 요소들을 활용하여 IoC / DI 를 적용한다.

Bean - 생성과 제어의 관리 대상이 되는 객체 


Bean Factory - 빈의 등록, 생성, 조회와 같은 빈을 관리하는 기능을 담당하는 IoC 컨테이너


Application Context - Bean Factory 의 기능과 더불어 스프링이 제공하는 각 종 부가 서비스를 제공하는 Bean Factory 를 확장한 컨테이너


Configuration Metadata - Application Context 또는 Bean Factory 가 IoC 를 적용하기 위해 사용하는 메타정보를 말한다. 컨테이너에 어떤 기능을 설정하거나 조정하는 경우에 사용하기도 하며 주로 IoC 컨테이너에 의해 관리 되는 Application Object 를 생성하고 구성할 때 사용된다. 


스프링을 사용해서 IoC / DI 를 적용하는 방법은 오브젝트 설정을 이용한 방법과 XML 설정을 사용하는 방법과 같이 크게 두 가지가 있다. 
ioc : International Olympic Committee
신고

'Java > Spring' 카테고리의 다른 글

Spring 사용하기 - XML 설정 파일을 사용한 DI  (0) 2012.02.09
Spring Tool Suite - 프로젝트 시작하기.  (0) 2012.02.08
IoC / DI  (0) 2012.02.07
Request Method 에 따른 Parameter Encoding  (0) 2011.03.17
Posted by Kingear
TAG java, Spring