@Configurable 사용하기

이제야… 이 글을 올릴 수 있게 됐네요. ㅎㅎㅎ 저번 주부터 올리고 싶었던 글인데, 별것도 아닌거 가지고 삽질을 하느라고 늦어졌습니다.

@Configurable이 뭔지, 왜 사용해야 하는지 궁금하시면 먼저 토비님이 마소에 기고하셨던 글인 “스프링프레임워크와 DDD(Driven Driven Design)”와 그 글을 보고 감명을 받은 찬욱군의 도메인 개체가 빈으로 선언되야 하는 걸까?와 제가 쓴 @Configurable을 사용해야 하는 이유를 읽으시는게 좋습니다.

1. 도메인 객체 구현. + 2. @Configurable 설정.
2. XML 설정.
3. java 아규먼트 설정.
4. 테스트.

0 순위가 빠졌네요. 테스트 코드부터 작성하겠습니다.

new를 사용해서 도메인 객체를 생성하고, 이 객체가 Repository라는 객체를 가지고 있나 확인하는 매우 간단한 코드입니다.

1. 도메인 객체 구현. + 2. @Configurable 설정.

구현은 간단합니다.

주목해서 봐야할 부분은 Repository 객체를 new 키워드로 생성하여 가지고 있지 않습니다. 스프링의 DI를  사용하여 주입받을 것이기 때문입니다.

그리고 클래스 선언 부 위에 @Configurable 애노테이션을 사용하여 이 객체를 스프링이 관리하도록 설정합니다. 괄호 안에는 스프링에서 이 객체를 나타낼 bean의 이름을 적어줍니다. 위와같이 클래스 명과 동일할 때는 생략해도 됩니다.

2.  XML 설정.

스프링 설정 파일은 다음과 같습니다.
gg

스프링 2.5에 새로 추가된 context 네임스페이스를 추가한 뒤, <context:load-time-weaver /> 엘리먼트와 <context:spring-configured /> 엘리먼트를 추가해줍니다. <context:spring-configured /> 이 녀석은 @Configurable이 붙어있는 bean을 찾아서 스프링이 관리하도록 설정합니다. 이 때 LTW(load time weaver)를 필요로 하는데, 이 녀석을 사용하도록 <context:load-time-weaver /> 엘리먼트를 등록해 줍니다.

그리고 member 객체는 명시적으로 컨테이너에서 만들 수 없도록 abstract 속성을 true로 해주고, 매번 다른 객체처럼 취급해야 하기 때문에 prototype Scope으로 설정해줍니다.

beans 엘리먼트에서 Autowiring 설정을 byName으로 해두었기 때문에, Member 클래스에 RepositoryImpl 클래스를 주입해 줄 것입니다.

3. java 아규먼트 설정.

Run -> Open Run Dialog를 클릭하고 JUnit을 우클릭하여 new를 선택하여 새로운 테스트 스크립트를 작성합니다.

이때 Test에서는 기존의 Test와 같은 값을 주고, Argument 탭에서 다음과 같이 -javaagent 옵션을 사용하여 spring-agent.jar 파일의 위치를 알려줍니다.

사용자 삽입 이미지
4. 테스트.
사용자 삽입 이미지
휴~ 이제 시작이네요. ㅎㅎ

8 thoughts on “@Configurable 사용하기”

    1. ㅋㅋ한 번만 넣어주면, 단축키로 실행할 때 선택 메뉴처럼 떠서 괜찮던데요. 흠~ 그래도 Run as 하나 만들어 주는게 귀찮긴 귀찮은 일이죠.

  1. 우선 귀한 자료 감사드립니다. 이런 자료를 한글로 본다는게 참 기쁘군요..
    혹시 JPA와 연동해서 JPA Entity에서 injection되게 사용해 보셨는지요?
    저도 님과 똑같이 TestCase로 돌릴경우에는 성공하였으나 똑같은 설정(applicationContext.xml)으로 Servlet Container (jetty 6.x)에 올리고 JPA와 연동해서 테스트했더니 안되는 군요…ㅠㅠ
    에러는 없고 그냥 null이 나옵니다.
    괜찮으시면 제가 테스트한 소스를 보내드릴 수 있습니다.

    제 메일은 kt.kim@valueinfra.com 입니다.

    1. 톰캣이나 기타 웹 서버 가동할 때에도 -javaagent 옵션을 주셨나요? 그것을 설정 안 하시면 동작을 안합니다.

      제가 일단 테스트해보고 블로그에 올리도록 하겠습니다.

      http://whiteship.tistory.com/1398
      http://whiteship.tistory.com/1399

      위 두 개의 글을 참조하시면 됩니다. 그리고 저는 단지 실습을 해봤을 뿐이고, 마소에 토비님께서 기고하신 글이 진짜 귀한 자료랍니다.

Leave a Reply

Your email address will not be published. Required fields are marked *