未在其他项目中应用Spring aop切入点表达式

问题描述 投票:0回答:1

项目结构为

  1. spring-contract
  2. [spring-aop作为(1)的依赖项] >>
  3. [spring-service作为(2)的依赖。
  4. 我在@MyAnnotation项目中有一个参数注释spring-contract,在spring-aop中是一个方面类,

package com.learning.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class AnnotatedFieldAspect {

    @Before("execution(* *(.., @MyAnnotation (*), ..)) && args(newValue)")
    public void advice(JoinPoint jp, Object newValue) {
        System.out.println(">>> inspecting "+newValue+" on "+jp.getTarget()+", "+jp.getSignature());
    }
}

注释将建议的类在spring-service项目中,

package com.learning.fieldtest.service;

public class TestField {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(@MyAnnotation String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        TestField testField = new TestField();
        testField.setName("Alex");
        testField.m1(testField.getName());
        System.out.println(testField.getName());
    }

    public void m1(@MyAnnotation String string) {
        System.out.println("Inside m1() @MyAnnotation" + string);
    }
}

类TestField方法未标记为建议的方法,如果我将所有类移动到同一包中,则会得到结果。还有在类和方法级别编写的其他方面正在应用。

>>> inspecting Alex on com.learning.fieldtest.service.TestField@3fa77460, void com.learning.fieldtest.service.TestField.setName(String)
>>> inspecting Alex on com.learning.fieldtest.service.TestField@3fa77460, void com.learning.fieldtest.service.TestField.m1(String)
Inside m1() @MyAnnotationAlex
Alex

自定义注释

package com.learning.spring.contract;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface MyAnnotation {
}

项目结构是spring-contract spring-aop作为(1)的依存关系,spring-service是(2)的依存关系。我在spring-contract项目中有一个参数注释@MyAnnotation,在...

java spring aspectj spring-aop spring-aspects
1个回答
0
投票

在您的spring config类之一中,添加@EnableAspectJAutoProxy。这将启用Spring应用程序中的外观处理。

© www.soinside.com 2019 - 2024. All rights reserved.