더북(TheBook)

프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Gravity is working against me

 

JSR-330을 사용하면 다른 JSR-330 호환 IoC 컨테이너(예를 들어 JEE-6 호환 애플리케이션 서버나 구글 주스같은 다른 DI 컨테이너)로 쉽게 마이그레이션 할 수 있습니다. 하지만 스프링이 제공하는 애너테이션은 JSR-330 애너테이션에 비해 훨씬 다양하고 풍부한 기능을 제공하며 유연합니다. 스프링 애너테이션과 JSR-330 애너테이션의 몇 가지 차이점은 아래와 같습니다.

스프링이 제공하는 @Autowired 애너테이션을 사용하면 required 애트리뷰트를 사용해 DI가 반드시 제공돼야 하는지를 나타낼 수 있지만 JSR-330의 @Inject 애너테이션에는 해당 기능이 없습니다(required 대신 스프링이 제공하는 @Required를 사용해도 됩니다).

JSR-330은 싱글턴과 비싱글턴 빈 스코프만 지원하지만 스프링은 더 많은 범위를 지원하며 해당 기능은 웹 애플리케이션에서 유용합니다.

스프링에서는 애플리케이션이 요청하는 시점에 스프링이 빈 인스턴스를 생성하도록 @Lazy 애너테이션을 사용할 수 있습니다. JSR-330에는 해당 애너테이션이 없습니다.

물론 같은 애플리케이션에 스프링과 JSR-330 애너테이션을 함께 섞어 사용할 수 있습니다. 하지만 애플리케이션 개발 시에는 일관된 스타일 유지를 위해 둘 중 한 가지만 사용할 것을 권장합니다. 가능한 또 다른 방법은 가급적 JSR-330 애너테이션을 많이 사용하고 스프링 애너테이션은 필요시에만 사용하는 것입니다. 그렇다 하더라도 여전히 다른 DI 컨테이너로 마이그레이션할 때 상당량의 작업을 해야 하므로 장점이 줄어듭니다. 결론을 내리면 애플리케이션이 IoC 컨테이너에 독립적이어야 한다는 요구사항이 있지 않는 이상은 JSR-330 애너테이션보다는 더욱 막강한 스프링 기반 애너테이션을 사용하는 것이 좋습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.