2014-12-17 18 views
5

Tôi đang phát triển một ứng dụng java (JDK1.6) với khung công tác Spring (4.0.5) và AspectJ cho AOP Logging.Spring - AspectJ pointcut cho đối tượng constructor với chú thích

Các lớp Aspect của tôi hoạt động tốt nhưng tôi không thể tạo đường cắt cho đối tượng hàm tạo.

Đây là đối tượng của tôi:

@Controller 
public class ApplicationController { 
    public ApplicationController(String myString, MyObject myObject) { 
     ... 
    } 
    ... 
    .. 
    . 
} 

Đây là lớp Aspect của tôi:

@Aspect 
@Component 
public class CommonLogAspect implements ILogAspect { 
    Logger log = Logger.getLogger(CommonLogAspect.class); 

    // @Before("execution(my.package.Class.new(..))) 
    @Before("execution(* *.new(..))") 
    public void constructorAnnotatedWithInject() { 
     log.info("CONSTRUCTOR"); 
    } 
} 

Làm thế nào tôi có thể tạo ra một pointcut cho đối tượng constructor của tôi?


Cảm ơn

+0

@kocko sự '" 'có, tôi đã bỏ lỡ chúng khi tôi đang gõ câu hỏi – PapaSmurf

+0

Tôi không tin rằng bạn có thể chặn cuộc gọi của người xây dựng trong Spring AOP thuần túy. –

+0

@SotiriosDelimanolis làm cách nào tôi có thể chặn cuộc gọi của nhà xây dựng? – PapaSmurf

Trả lời

9

Sotirios Delimanolis là đúng chừng mực Spring AOP không hỗ trợ constructor đánh chặn, bạn cần phải đầy đủ AspectJ cho nó. Sổ tay mùa xuân, chương 9.8 Using AspectJ with Spring applications, mô tả cách sử dụng nó với LTW (thời gian tải dệt).

Bên cạnh đó, có một vấn đề với pointcut bạn

@Before("execution(* *.new(..))") 

Constructors không có kiểu trả về như phương pháp trong cú pháp AspectJ, vì vậy bạn cần phải loại bỏ các hàng đầu *:

@Before("execution(*.new(..))") 
+0

Đó chính xác là những gì tôi cần - Tôi giả định rằng các cuộc gọi của nhà xây dựng sẽ được chọn bằng một tuyên bố giống như câu lệnh đầu tiên ở trên. – JoshC13

Các vấn đề liên quan