如何使用AspectJ和CDI注入bean

时间:2019-04-03 09:46:06

标签: cdi aspectj

我已经对此方面进行了编码:

@Aspect
public class LoggingCacheAspect {
    @Pointcut("call * javax.cache.integration.CacheLoader.load(*)")
    void cacheLoadCalls() {};

    @Before("cacheLoadCalls")
    public void beforeCacheCalls() {}
}

此外,我正在使用CDI,并期待找出如何将Bean注入该方面。

我想添加@Inject注释是不够的。

  1. 有可能吗?
  2. 我怎么能得到它?

1 个答案:

答案 0 :(得分:1)

您需要使用拦截器来代替方面 这是一个示例:

@InterceptorBinding
@Target({TYPE, METHOD })
@Retention(RUNTIME)
public @interface CacheLog{
}

@Interceptor
@CacheLog
public class CacheLogInterceptor implements Serializable {

    private static final long serialVersionUID = 1L;

    @Inject
    private YourBean yourBean;

    @AroundInvoke
    public Object cacheLogMethodCall(InvocationContext ctx) throws Exception {
        //@Before

        yourBean.method();
        ...
        return ctx.proceed();
    }
}


@CacheLog
public void cacheLoadCalls() {
 ...
 ...
}