当前位置: 首页 > 知识库问答 >
问题:

将Spring AOP作为库的自定义注释不起作用

宣望
2023-03-14

我正在尝试创建一个带有自定义注释和spring AOP的Spring Boot库。当我将这个库与新的spring boot应用程序一起使用时。那么它就不起作用了。就连我也没有任何错误。

库示例-

自定义注释

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

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface HttpLogger {
}

SpringAOP课程

@Aspect
class LoggingAspect {
@Around("@annotation(com.demo.commonlogging.aspect.HttpLogger)")
    public Object inControllers(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        return loggingAdvice(proceedingJoinPoint); // Method for implementation
    }
}

波姆。xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

使用mvn clean install创建库

现在,新的库被导入到springboot应用程序中。

控制器中使用了新的自定义注释

控制器

@RestController
@RequestMapping(value = "/rest/test")
public class RestApiTestControllers {
    @GetMapping
    @HttpLogger
    public String get(){
        return "Hello !";
    }
}

请帮忙。

共有1个答案

麹凯捷
2023-03-14

似乎您缺少@ComponentfromLoggingAspect还可以调用继续进行进行JoinPoint.proceed();并返回它的值。

所以你的代码应该是这样的:


@Aspect
@Component
class LoggingAspect {
    @Around("@annotation(com.demo.commonlogging.aspect.HttpLogger)")
    public Object inControllers(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("Before call");
        Object returned = proceedingJoinPoint.proceed();
        System.out.println("After call");
        return returned;
    }
}

希望这有帮助!

 类似资料:
  • 我有一个名为的下拉字段,其中包含电话、电子邮件等值,还有一个名为的输入字段。如果选择了下拉值,我想验证输入字段的有效电子邮件地址。。。 我试图创建一个自定义约束,将验证字段对电子邮件正则表达式,如果字段将具有值 我有以下自定义约束的代码 验证器就像 问题是它没有在表单上触发...我使用模型对话框,其中要验证的bean被呈现 参考:使用Hibernate验证器进行跨域验证(JSR 303) 期待您的

  • 自定义注释 自定义注释处理程序 超级类 子类 Subclass调用SuperClass方法但在不调用 当我将移动到子类method时,AspectHandler可以获取 如何在超类保护方法中使用自定义注释? 更改 但还是不行 所以我把我的< code >子DAO改成了under code 这不是完美的解决方案,但它的工作原理 情况1:从子类方法调用超类方法不起作用 情况 2:使超级类实例和从实例调

  • 问题内容: 什么样的配置是需要使用注解来自像,等等?这是我的代码: 当我尝试在另一个类中使用它时,验证不起作用(即,创建该对象时没有错误): 为什么这不适用和的约束?我还需要做什么? 问题答案: 为了使JSR-303 bean验证在Spring中起作用,您需要做一些事情: 注释的MVC名称空间配置: JSR-303规范JAR :(看起来您已经拥有了) 规范的实现,例如休眠验证,它似乎是最常用的示例

  • 问题内容: 如果要以非安全方式访问某些方法,我想限制它们。我正在创建一个@Secure批注,该批注检查请求是否通过安全通道发送。但是,我无法创建一个可注入的方法来捕获请求的HttpContext。 我使用的是Dropwizard框架,因此提供程序的初始化应该像下面这样简单: 用法: 在这一点上,我假设HttpContext Injectable在某种方法上不起作用,但是我对可以用来实现此注释的其他

  • 我有一个简单的类叫BeaconDao 然而,当我用@service或@component标记beaconDao时,一切都运行得非常好。有人能看出问题所在吗?

  • 我创建了一个新的注释来验证控制器上的参数: 这是我的验证器: 这是我的控制器: 我的控制器注释为: 我还有一个建议控制器,我打算用它来捕捉抛出的异常: 我在控制台上得到的是: pom.xml中的依赖关系: 谁能告诉我我错过了什么?