在学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;@Aspectpublic 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>