2010-11-30 3 views
30

우선 AspectJ를 사용하고 있으며 좋아한다는 점을 유의 해주세요.하지만 그 밖의 어떤 작업을 할 수 있습니까?AspectJ는 무엇에 좋은가요?

Logging에 AspectJ를 사용할 수 있다는 것을 알고 있습니다. 경우에 따라 트랜잭션 제어에 사용되며 주로 주석과 함께 구현됩니다. AspectJ는 Spring Roo와 같이 (코드 생성) 메소드를 사용하여 클래스를 향상시키는 데에도 사용할 수있다.

하지만 AspectJ와 AOP는 일반적으로 로깅, 트랜잭션 제어 및 시뮬레이션 부분 클래스 이상의 용도로 사용할 수 있다고 생각합니다.

그럼 AspectJ와 AOP를위한 유용한 유스 케이스는 무엇입니까?

+2

당신은 Ramnivas Laddad의 AspectJ in Action을 읽어야합니다. http://www.manning.com/laddad2 TOC는 아이디어 : http://www.manning.com/laddad2/excerpt_contents.html –

+2

@ 조지 스토커 : 질문은 14 upvotes, 0 downvotes, 총 21 upvotes와 3 답변, 그리고 당신은 4 년 후 보류에 넣어 - 정말 ? 요점은이 질문에 좋은 해답이 있다는 것입니다. 따라서이 질문에는 실제로 "너무 광범위한"문제가 없습니다. – Ralph

+0

종결을 토론하고 싶다면 자유롭게 메타에 올려주세요. 너무 넓은 결론은 투표, 견해 또는 현재 답변과는 독립적입니다. 그것은 그 문제의 범위와 관련이 있습니다. –

답변

26
  • 권한 체크
  • 별도의 스레드에서
  • 실행 동작을 너무 오래 걸리거나 심지어 전에 데이터/환경을 준비
  • 을 모니터링 다른 기계
  • 에 다른 프로세스 또는 이벤트의 맥락에서
  • 인터럽트 동작 통화 후 통화 및 처리 결과
  • 개폐 자원

EDIT

내가이 대답을 한 지 몇 년이 지났지 만 다음을 추가하여 답변을보다 완전하게 만들 것을 결정했습니다.

  • 보안 검사.
  • 수정할 수없는 API의 오류나 작동 방식이 수정되었습니다. 일부 조건에서는 false을 반환하지만 부울 메서드는 예를 들어 true을 반환해야합니다. AspectJ를 사용하여이 문제를 해결할 수 있습니다.
+1

캐싱은 또 다른 용도입니다 – ex0b1t

+0

감사합니다, @ ex0b1t. 모든 목록은 가득 차서는 안됩니다. – AlexR

16

Wikipedia entry에는 몇 가지 예가 나와 있습니다 (그보다 많지는 않습니다). 일반적으로 Aspect Oriented Programing은 클래스의 핵심 관심사가 아니며 다른 클래스에 공통적 인 단순한 비헤이비어를 구현할 때만 사용해야합니다. 당신이 당신의 측면에서 너무 많은 로직을 시작하자마자, 코드는 실제로 읽을 수 없게됩니다.

제안하는 측면 (로깅, 트랜잭션, ...)이 가장 일반적으로 사용됩니다. 나는 보안을 추가 할 것이다.

2

일부 (디자인) 규칙을 적용하기 위해 AspectJ를 사용할 수있다. 모든 컨트롤러 메소드와 같은

  • 모든 서비스/프론트 엔드/DTO 클래스는
  • 더 성숙한 같이 생각하는 서비스/fronten/DTO의 pacakge에 있어야합니다 특별한 주석이 필요합니다 checking that setters do not have any logic. 그렇지 않으면 새로운 사용하여 새로운 인스턴스를 생성 할 클래스에

를 주입 모의 객체 .

public void sendInvitationEmail(String address) { 
    InvitationEmail email = new InvitationEmail(); 
    email.sendTo(address).send(); 
} 

와 모의에 의해 email을 대체해야합니다 는이 코드를 가정합니다. 그런 다음 Aspect (@Pointcut("call(InvitationEmail.new(..))") )를 사용하여 모의를 "삽입"할 수 있습니다. - @Blog JMock and AspectJ, Daniel Roop 저, Spring Roo`MockStaticEntityMethods (Mock Static Methods using Spring Aspect)

관련 문제