原创

AspectJ @Pointcut および @AfterReturning に基づくメソッド アノテーションがトリガーされない

温馨提示:
本文最后更新于 2024年04月12日,已超过 48 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

これを実現するには他の方法もありますが、AspectJ を使ったことがないので、そのようなアプローチを試しています。

様々なゲッターに注釈を付けて、結果が常に小さな文字にキャストされるようにしたいと考えています。

@AlwaysLower
@JsonProperty("clinic_id")
public String getClinicId() {
    return clinicId;
}

アノテーションは次のように定義されています。

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

そして、これが私の@Aspectクラスです。

@Aspect
@Configuration
public class AlwaysLowerAspect {
    
    private static final Logger LOG = LoggerFactory.getLogger(AlwaysLowerAspect.class);
    
    public AlwaysLowerAspect() {
        super();
        LOG.info("AlwaysLowerAspect constructed!");
    }

    @Pointcut("@annotation(com.mycompany.mypackage.AlwaysLower)")
    public void annotatedWithAlwaysLower() {}

    @AfterReturning(pointcut = "annotatedWithAlwaysLower()", returning = "returnValue")
    public void convertToLowercase(Object returnValue) {
        if (returnValue instanceof String) {
            String original = (String) returnValue;
            if (original != null) {
                returnValue = original.toLowerCase();
            }
        }
    }
}

実行時にコンストラクターが起動するのが分かりますが、@Aspect 内のアノテーション付きメソッドはいずれもトリガーされません。ここでは偽のパッケージ名を使用していますが、正しいパッケージ名がコード内にあるため私は不可能なことを達成しようとしているので、あるいは、何を間違っているのでしょうか?

正文到此结束
热门推荐
本文目录