Java Spring in Action 3导致问题的AOP示例

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

在Action3中,我正在用我的方式处理Spring,其中有一个例子是使用AOP和around方面

这是Aspect类:

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"