Java Spring in Action 3导致问题的AOP示例
在Action3中,我正在用我的方式处理Spring,其中有一个例子是使用AOP和around方面 这是Aspect类:Java Spring in Action 3导致问题的AOP示例,java,spring,maven-2,aop,aspectj,Java,Spring,Maven 2,Aop,Aspectj,在Action3中,我正在用我的方式处理Spring,其中有一个例子是使用AOP和around方面 这是Aspect类: package com.xetius.springIdol; import org.aspectj.lang.ProceedingJoinPoint; public class Audience { public void watchPerformance(ProceedingJoinPoint joinpoint) { try { System
package com.xetius.springIdol;
import org.aspectj.lang.ProceedingJoinPoint;
public class Audience {
public void watchPerformance(ProceedingJoinPoint joinpoint) {
try {
System.out.println("The audience is taking their seats.");
System.out.println("The audience is turning off their cell phones.");
long start = System.currentTimeMillis();
joinpoint.proceed();
long end = System.currentTimeMillis();
System.out.println("CLAP CLAP CLAP CLAP CLAP");
System.out.println("The performance took " + (end - start) + " milliseconds.");
} catch (Throwable e) {
System.out.println("Boo! We want our money back!");
}
}
下面是SpringXML:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="audience" class="com.xetius.springIdol.Audience" />
<aop:config>
<aop:aspect ref="audience">
<aop:pointcut id="performance2" expression="execution(* com.xetius.springIdol.Performer.perform(..))"/>
<aop:around pointcut-ref="performance2" method="watchPerformance()"/>
</aop:aspect>
</aop:config>
</beans>
我试图使用AOP的Springs实现来实现这一点,但我相信我必须包含AspectJ的一部分来实现这一点
如果我删除参数ProceedingJoinPoint joinpoint
,则它可以找到此方法。我认为这是一个隐含的参数在方法中为周围的方面。这是正确的吗?如果不是,我做错了什么
我正在使用Maven来构建这个。这是我的POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xetius</groupId>
<artifactId>springIdol</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>springIdol</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.0.4.RELEASE</spring.version>
<aspectj.version>1.6.9</aspectj.version>
<junit.version>4.6</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
4.0.0
com.xetius
春偶像
0.0.1
罐子
春偶像
http://maven.apache.org
UTF-8
3.0.4.1发布
1.6.9
4.6
org.springframework
spring上下文
${spring.version}
org.springframework
春季aop
${spring.version}
org.aspectj
aspectjtools
${aspectj.version}
朱尼特
朱尼特
${junit.version}
测试
应指定不带括号的方法名称:
method="watchPerformance"
太棒了,谢谢。我已经联系了作者关于这个问题的正确答案。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xetius</groupId>
<artifactId>springIdol</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>springIdol</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.0.4.RELEASE</spring.version>
<aspectj.version>1.6.9</aspectj.version>
<junit.version>4.6</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
method="watchPerformance"