- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图将我的方面定义为具体方面,以便能够在 aop.xml 中定义切入点而无需编译代码。我正在使用 LTW。
当我在方面类本身中定义切入点 exp 并将方面定义为简单方面 ( ) 时,它工作得很好。但是,当我将切面声明为具体切面并在 aop.xml 中定义切入点时。该方面不再起作用...并且它不再达到我建议中的断点...
这是带有/不带有具体方面的代码:
没有具体方面(工作正常):
public abstract aspect AbstractAspect {
protected abstract pointcut publicMethod();
}
public aspect MethodExecutionTimeAspect extends AbstractAspect {
public pointcut publicMethod() : execution(public * com.proj.package..*());
Object around() : publicMethod() {
.....
Object ret = proceed();
....
}
}
和aop.xml
<aspectj>
<aspects>
<aspect name="com.proj.packae.aspectj.MethodExecutionTimeAspect"/>
</aspects>
<weaver options="-verbose">
</weaver>
</aspectj>
具体方面(不起作用)
public abstract aspect AbstractAspect {
protected abstract pointcut publicMethod();
}
public aspect MethodExecutionTimeAspect extends AbstractAspect {
public pointcut publicMethod() : execution(public * com.proj.package..*());
Object around() : publicMethod() {
.....
Object ret = proceed();
....
}
}
aop.xml
<aspectj>
<aspects>
<concrete-aspect name="com.proj.package.MethodExecutionTimeAspect" extends="com.project.package.aspectj.AbstractAspect">
<pointcut name="publicMethod" expression="execution(public * com.proj.package..*())" />
</concrete-aspect>
</aspects>
<weaver options="-verbose">
</weaver>
我使用的是aspectj 1.6 jar。
当我不使用concret-aspects时,这是以下日志
[WebappClassLoader@7f62cbb2] info register aspect com.project.package.aspectj.MethodExecutionTimeAspect
当我使用具体方面时,我看到以下日志:
[WebappClassLoader@393e11ac] info define aspect com.project.package.aspectj.MethodExecutionTimeAspect
日志上没有显示任何错误,只是看起来具体方面没有注册。
请指教。
最佳答案
您犯了几个错误:
<concrete-aspect>
时,具体切入点应该位于您的 aop.xml 中,而不是在您的代码中。也许这是一个复制和粘贴错误,但在您的示例中,它看起来好像具体切入点被定义了两次:在代码中和在 XML 中。看看我自己的例子,与你的非常相似:
示例应用程序:
package de.scrum_master.app;
public class Application {
public static void main(String[] args) {
Application app = new Application();
app.say("Hello world!");
app.add(11, 22);
}
private int add(int i, int j) { return i + j; }
public void say(String message) { System.out.println(message); }
}
如您所见,有两种公共(public)方法(一种静态,一种非静态)和一种私有(private)方法。我这样做是为了测试稍后的具体切入点是否真的只捕获公共(public)切入点。
抽象方面:
package de.scrum_master.aspectj;
public abstract aspect AbstractAspect {
protected abstract pointcut publicMethod();
Object around() : publicMethod() {
System.out.println(thisJoinPointStaticPart);
return proceed();
}
}
aop.xml:
<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
<aspects>
<concrete-aspect
name="de.scrum_master.aspectj.ConcreteAspect"
extends="de.scrum_master.aspectj.AbstractAspect"
>
<pointcut
name="publicMethod"
expression="execution(public * de.scrum_master..*(..))"
/>
</concrete-aspect>
</aspects>
</aspectj>
使用 LTW 时的应用程序输出:
execution(void de.scrum_master.app.Application.main(String[]))
execution(void de.scrum_master.app.Application.say(String))
Hello world!
关于java - Aspectj:在 aop.xml 中声明时切入点不再起作用(LTW),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18164032/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!