在Spring框架中,我在使用AOP时遇到了一个奇怪的问题。我有以下简单的bean类的一个问候:
public class HelloBean {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void displayGreeting() {
System.out.println("Hello");
}
}
下面是spring配置:
<beans>
<bean id="hello" class="com.att.spring.main.HelloBean"/>
<bean id="serviceCheck" class="com.att.spring.main.ServiceCheck" />
<aop:config>
<aop:aspect ref="serviceCheck">
<aop:pointcut id="greet"
expression="execution(* *.getMessage(..))" />
<aop:before pointcut-ref="greet"
method="preRunMessage" />
<aop:after pointcut-ref="greet"
method="postRunMessage" />
</aop:aspect>
</aop:config>
</beans>
AOP建议方法:
public class ServiceCheck {
public void preRunMessage() {
System.out.println("Runs before the greeting");
}
public void postRunMessage() {
System.out.println("Runs after the greeting");
}
}
测试等级:
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"spring-beans.xml");
HelloBean hello = (HelloBean) context.getBean("hello");
hello.setMessage("Hello World");
System.out.println(hello.getMessage());
}
}
输出:
Runs before the greeting
Runs after the greeting
Hello World
问题:
当我使用getter作为切入点时,为什么两个建议(之前和之后)都被打印出来。建议工作正确时,我使用点切入点displayGreting()方法??
System.out.println()
在hello.getMessage()
之后执行。您可以使用调试器检查它。
1)preRunMessage()
2)hello.getMessage()
3)postRunMessage()
4)the System.out.println() prints the string returned by hello.getMessage()
尝试在hello.getMessage()
中打印某些内容,它将在运行前和运行后消息方法之间打印。
我正在使用OpenCV重塑函数,以便将25行1列的Mat(因此我们有25个数据值)重塑为5行5列的Mat。
我有以下scala类和带注释的aspectj类: 函数栏工作得很好,但函数foo不行。没有任何错误,似乎函数“foo”的执行没有被捕获。
我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma
2,错误{org.apache.directory.server.LDAP.ldapserver}-ERR_171无法将LDAP服务(10,389)绑定到服务注册表。java.net.BindException:已在使用的地址 请帮忙谢谢 --------提示------------------- JAVA_HOME环境变量设置为/opt/java CARBON_HOME环境变量设置为/mnt/1
我一直在尝试创建一个功能类似图书馆系统的web应用程序,目前我正在构建一个将显示系统中所有书籍的表。但是,在我关闭第一个echo语句以开始用HTML构建表之后,应用程序似乎不再将其视为代码,而是将PHP代码的其余部分打印到屏幕上。 下面是所讨论的代码: 我显然对PHP不太精通,所以我不知道问题是什么。