2010-08-19 2 views
5

몇 달 전에 GUICE와 일하고 있었고 지금은 돌아 왔을 때 Guice 문서와 예제를 다시 읽어야 만 코드를 이해할 수있었습니다.Guice 대 AspectJ

그러나 AspectJ를 보면 너무 직관적입니다. Java 언어를 직관적으로 확장 한 것입니다. 나는 AspectJ 코드를 즉시 작성해서 쓸 수 있다고 생각한다.

따라서 저는 Guice를 추격하고 AspectJ와 함께 가고 싶습니다. 특히 Spring이 AspectJ 코드를 생성하고 있다는 사실.

위 Guice의 어떤 기능이 AspectJ에서 Guice를 포기하지 않도록해야합니까?

Google이 Guice를 포기하고 대신 AspectJ를 사용하지 않는 이유는 무엇입니까?

부사장, 나는 직관력 외에도 Guice를 포기하도록 장려하는 AspectJ의 기능에는 어떤 것이 있습니까?

질문에서 "짜다"할 수 있다면, Java 언어가 AspectJ와 병합되지 않거나 향후 Java 버전에서 유사한 "aspect"를 제공하지 못하게하는 것은 무엇입니까?

: 행복 삭제-azillas을 실행하는 데,이 질문은 너무 일반적있을 수 있습니다 실현 -하지만 난 물어 더 한 구체적인 알고 있다면, 난에 대한/빙을 요청하지만, 단지 구글 필요하지 않을 것 나도 몰라. 보시다시피, 나의 Guice 지식은 나 자신의 필체를 인식하지 못하기 때문에 너무 심하게 저하되었습니다.

+0

나는 항상 똑같은 느낌을 가지고 있습니다. AspectJ를 가지고 있다면 왜 의존성 주입 프레임 워크인가? –

답변

19

피터 (Peter)가 말했듯이, Guice와 AspectJ는 완전히 다른 것입니다. Guice는 코드를 유연하고 쉽게 테스트 할 수 있고 범위와 같은 유용한 것들을 추가하면서 많은 공장 쓰기를 저장하는 종속성 주입을 수행합니다. 또한 메소드 인터셉트를 통해 AOP를 수행하는 매우 간단하고 쉬운 방법을 허용합니다 (DSL이 아닌 어떤 메소드가 인터셉트되는지 프로그래밍 방식으로 구성). 이것은 실제로 그것이 제공하는 또 하나의 보너스이며 핵심 목표는 아닙니다.

AspectJ가 Java로 병합되지 않는 이유는 ... 많은 사람들이 그렇게되기를 원하지 않는다. AOP는 강력하지만 위험한 방법입니다. 일부 용도에서는 분명히 좋지만 그러한 경우에는 코드를 많이 단순화합니다. 남용하면 프로그램에서 일어나는 일을 이해하는 것이 훨씬 어려워 질 수 있습니다.

7

제게 따르면 AspectJ와 Guice는 다른 일을합니다.

Guice는 의존성을 주입하고 AspectJ는 크로스 커팅 문제를 처리합니다.

스프링을 사용한다면 실제로 겹치는 부분이 많기 때문에 Guice를 사용하면 가치가 떨어지며 Spring/AspectJ의 공생은 강력한 솔루션입니다.

가벼운 무게 때문에 비 봄용 프로젝트의 경우 더 나은 결과를 얻을 수 있습니다.

2

스프링은 의존성 삽입 및 애스펙트 지향 프로그래밍을 기반으로합니다.

Guice는 의존성 주입 엔진입니다.

AspectJ는 애스펙트 지향 엔진입니다.

차이점을 확인 하시겠습니까? Guice와 AspectJ는 상호 보완 적이다. 봄에는 이미 두 가지가 있습니다.

스프링은 AspectJ 외에도 바이트 코드 조작이 필요없는 자체 인터셉터 기반 AOP를 지원한다고 언급해야한다.

+4

Guice는 자체 AOP 지원을 포함합니다 : http://code.google.com/p/google-guice/wiki/AOP –

+0

몰랐습니다. 고맙습니다. Spring의 메소드 인터셉터와 비슷합니다. 그것은 Bob Lee의 원래 Guice의 일부였습니까? 아니면 첫 번째 출시 이후에 추가 되었습니까? – duffymo

+1

AbstractModule.bindInterceptor는 Guice 1.0의 일부입니다. –