Whiteship's Note


빈 속성에 값 설정 했는지 확인하기

Spring/etc : 2009. 2. 4. 21:22


null 체크가 될 수도 있겠고 어떤 값이든 주입 됐는지 확인하는 것일 수도 있겠습니다. 예전에 대충 정리해둔 적은 있는데 잊어버렸던 거라서 다시 정리해 둡니다.

<bean> 엘리먼트에 dependency-check라는 속성이 이 속성을 설정하지 않으면(기본값) 빈 속성에 어떤 값이나 빈이 주입 되었는지 확인하지 않습니다.

simple 값을 주면 기본 타입과 컬렉션 타입만 검사합니다.

object 값을 주면 simple이 검사하는 것을 제외한 레퍼런스 타입을 검사합니다.

all 값을 주면 모든 속성을 검사합니다.

요즘은 @Autowired로 주로 DI를 하기 때문에 점점 예전 빈 설정 내용들은 잊혀져 가는 것 같습니다. @Autowired는 기본 값이 필수로 되어있죠. 그래서 오히려 반대로 없어도 괜찮다고 설정 하려면 애노테이션에 required=false 속성을 추가해 줘야 합니다.

...
    private MovieFinder movieFinder;

    @Autowired(required=false)
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }
...

이런 식으로..
top

Write a comment.


싱글톤, 비싱글톤 언제 써야 할까?

Spring/etc : 2009. 2. 4. 21:10


참고:  Pro Spring 2.5 3장

요즘 이 책을 재벌 작업을 하고 있는데 공부한지 오래되서 잊었거나 미쳐 보지 못했던 내용들이 등장하면 피로가 조금 줄어드는 느낌을 받곤 합니다.

그 중 하나가 바로 이 글의 제목과 관련된 내용이었습니다. 스프링을 가지고 웹 애플리케이션을 몇 번 만들어 봤지만 singleton 스코프 빼곤 별로 써본 기억이 나질 않을 정도인데 새삼 생각해보게 하는 내용들이 있었습니다.

싱글톤이 적절한 경우
- 상태가 없는 공유 객체
- 읽기 전용 상태를 가지고 있는 공유 객체
- 상태를 공유하는 공유 객체
- 쓰기가 가능한 상태를 약간 가지고 있으면서 매우 빈번하게 사용하는 객체

비싱글톤이 적절한 경우
- 쓰기가 가능한 상태를 가진 객체
- private 상태를 가지고 있는 객체

여기서 주목해야 할 것은 같은 쓰기 가능한 상태를 가진 객체인데 어느것은 싱글톤 어느 것은 비싱글톤이 적절하다는 부분인데 동기화 비용과 객체 생성 비용을 가지고 나누더군요.

자세한 내용은 프로 스프링 2.5 번역서를 참고하세요~ ㅋㅋㅋ
top

  1. Favicon of https://helols.tistory.com BlogIcon is윤군 2009.02.04 23:31 신고 PERM. MOD/DEL REPLY

    글만 봐선 딱히 잘 모르겠네욥..ㅋ
    어여 빨리 3장 궈궈쓍~;;

    Favicon of http://whiteship.me BlogIcon 기선 2009.02.05 09:19 PERM MOD/DEL

    오늘 베타리딩에 올린다~

  2. 신난다 2009.02.05 01:17 PERM. MOD/DEL REPLY

    싱글턴은 장점보다 단점이 훨씬 큰데,
    싱글턴을 쓰지 말자는게 아니라
    적절한 경우를 나열한 책이 있다니 사실에 움찔했습니다.

    적절하다고 예로든 경우에도 MonoState 패턴이 더 적절하다고 생각합니다.

    Favicon of http://whiteship.me BlogIcon 기선 2009.02.05 09:19 PERM MOD/DEL

    넹.. 글쿤요!

    토비 2009.02.05 13:26 PERM MOD/DEL

    스프링의 싱글톤 스코프와 디자인패턴에서 말하는 싱글톤 패턴을 같은 것이라고 오해하신 것 같군요.
    스프링은 기존 싱글톤 패턴의 문제를 극복하기 위해서 싱글론 레지스트리라는 방식으로 싱글톤 개념을 적용합니다. 이를 이용하면 싱글톤 패턴과 같은 방식을 사용하지 않은 단순한 자바 클래스를 싱글톤 "개념"으로 사용할 수 있습니다.

    Favicon of http://whiteship.me BlogIcon 기선 2009.02.05 14:13 PERM MOD/DEL

    싱글톤 패턴의 문제라 함은?
    - 인터페이스를 사용하지 못 함.
    - 구현체 교체하기 힘듬
    - 따라서 테스트 하기도 힘듬.
    이런 것일듯..

    Kevin 2009.03.02 01:28 PERM MOD/DEL

    싱글톤도 인터페이스 사용할 수 있습니다.
    그러니 구현체 교체도 힘들지 않구요.

    다만 싱글톤 자체를 상속하여
    Subtyping 하는것에 문제가 생겨서
    재사용성과 확장성을 보장하기 힘들다는것이
    문제가 아닐까 싶습니다.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.03.02 09:20 신고 PERM MOD/DEL

    넹.. 찾아보니 조금 복잡해 보이지만 Singleton Interface를 사용하는 방법도 있었네요.

    http://radio.weblogs.com/0122027/stories/2003/10/20/implementingTheSingletonPatternInJava.html

    감사합니다~

  3. 신난다 2009.02.05 15:28 PERM. MOD/DEL REPLY

    오~ 알겠습니다.
    움찔하지 않아도 되서 다행이네요. ^^

Write a comment.


스프링 2.5 환경에서 하이버네이트 사용하기

Spring/Spring One 2008 : 2009. 2. 4. 01:34


참조 요약: Spring One 2008 Wokring With Hibernate in a Spring 2.5 Environment

스프링의 HibernateTemplate
(Hibernate 3.1 이전)

- 스프링이 관리하는 트랜잭션을 사용한다.
- 예외 번역 제공

public class HibernateClinic extends HibernateDaoSupport {
...
}

Native Hibernate DAO
(Hibernate 3.1+_

- 트랜잭션 훅(hook)을 제공한다.
- transactional session을 찾는 로직을 제공할 수 있게 한다. sessionFactory.getCurrentSession()
- 예외 번역 제공 @Repository PersistenceExceptionTranslation post processor
- 순수 하이버네이트 API만 사용할 수 있다.

단위 테스트 종류
- "Logical" 단위 테스트
- 통합 테스트

스프링으로 통합 테스트하기
- DI
- 애플리케이션 컨텍스트 로딩 줄이기
- 자동 롤백
- 하이버네이트 + JDBC 조합

AbstractTransactionalDataSourceSpringContextTests
- Ctrl + Shift + T ATDSSCT
- 애플리케이션 컨텍스트 로딩, 캐슁
- DI
- JdbcTemplate 제공

WAR에서 하이버네이트 VS OSGi 개발
- 일반 WAR 배포
  - SessionFactory가 클래스패스에 도메인 타입들을 찾는다.
  - 저장소(DAO, repositoru)들이 SessionFactory를 사용한다.
- OSGi 개발
  - 여러 도메인 번들로 쪼갠다.
  - SessionFactory는 도메인 타입에 접근해야 한다.
  - 저장소는 SessionFactory에 접근해야 한다.

OSGi 환경에서 하이버네이트
- "infrastructure" 번들
  - SessionFactory 서비스를 제공하고
  - 모든 도메인 타입을 가져온다.
- 여러 도메인 모델
  - 도메인 타입을 공개한다.
  - SessionFactory 서비스를 사용한다.
- Petclinic 예제를 제공한다.

=====

발표에서 다루는 내용이 너무 많아서 다소 산만했습니다. 하이버네이트만 집중적으로 다뤘으면 어땠을까 싶더군요. @Repository 얘기가 나오니까 컴포넌트 스캔 얘기로 새고.. 도메인 객체에 repository 객체 주입하는 얘기가 나오니까 @Configurable이랑 aspectj 얘기로 새고.. 테스트 얘기 나오니까 Test Context 쪽으로 또 얘기가 새버렸다가 나중엔 다시 하이버네이트랑 OSGi 얘기 조금 꺼내고 끝~~

멋진건 54분이라는 짧은 발표 시간 중에도 저렇게 많은 내용과 중간 중간 전부 데모까지 보여줬다는 겁니다.
top

Write a comment.