日期:2014-05-20  浏览次数:20724 次

spring注解切面不起作用
在学spring,按照书上的例子,这个注解切面怎么不起作用呀,哪儿有问题,谢谢了!
代码如下:

注解切面:
Java code

package com.xcd.idol;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class Listenner {
    
    @Pointcut("execution(* *.singing(..))")
    public void singer(){};
    
    @Before("singer()")
    public void takeSeats(){
        System.out.println("观众入座!。。");
    }
    
    @Before("singer()")
    public void closeCellphone(){
        System.out.println("关闭移动电话。。");
    }
    
    @AfterReturning("singer()")
    public void yeah(){
        System.out.println("演出精彩,观众欢呼!。。");
    }
    
    @AfterThrowing("singer()")
    public void worse(){
        System.out.println("演出糟糕,观众要求退款。。");
    }
}





自动代理:
XML code


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

    
    <bean id="singer" class="com.xcd.idol.Singer"></bean>
    <aop:aspectj-autoproxy />

</beans>




Java code


package com.xcd.idol;

public interface Sing {
    void singing();
}

package com.xcd.idol;

public class Singer implements Sing {

    public void singing() {
        System.out.println("歌手唱歌!。。");
    }

}

package com.xcd.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xcd.idol.Singer;

public class T2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ClassPathXmlApplicationContext cac = new ClassPathXmlApplicationContext("applicationContext.xml");
        Singer s = (Singer)cac.getBean("singer");
        //Sing s = (Sing)cac.getBean("singer");
        s.singing();

    }

}




------解决方案--------------------
spring配置文件加上:

<bean id="listenner" class="com.xcd.idol.Listenner"></bean>