weixin_42318107 2009-07-06 14:17
浏览 245
已采纳

AspectJ的问题

照着JAVAEYE上的一个实例写了一个关于ASPECTJ的AOP示例,但是出错了,如下:
定义一个接口:
[code="java"]
public interface Perform
{
public void perform();
}
[/code]

然后定义两个类,继承他
[code="java"]
public class ShowBoy implements Perform
{

public void perform()
{
    System.out.println("男孩表演街舞!");
}

}

public class ShowGirl implements Perform
{

public void perform()
{
    System.out.println("女孩表演肚皮舞!");
}

}
[/code]

在定义一个通知类,并使用AspectJ注解
[code="java"]
@Aspect
public class Audience
{
public Audience()
{
}

@Pointcut("execution(* *.perform(..))")
public void performance(){};

@Before("performance()")
public void takeSeat()
{
    System.out.println("观众们找到自己的座位,都坐下来了");
}

@Before("performance()")
public void turnOffMobilePhone()
{
    System.out.println("请所有观众确定手机已经关闭");
}

@AfterReturning("performance()")
public void appluad()
{
    System.out.println("观众们大声鼓掌,啪啦啪啦啪啦");
}

@AfterThrowing
public void demandRefund()
{
    System.out.println("演的太差了,我们要退钱!");
}

}
[/code]

XML的配置中配置如下,DTD应该没有错误
[code="xml"]
<?xml version="1.0" encoding="UTF-8"?>
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="showBoy" class="aspectdemo.ShowBoy"/>
<bean id="showGirl" class="aspectdemo.ShowGirl"/>
<!-- 定义切面 -->  
<bean id="audience" class="aspectdemo.Audience"/>
<aop:aspectj-autoproxy/>


[/code]

运行的测试类如下:
[code="java"]
public class TestDemo
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"aspectdemo/applicationContext.xml"});
ShowBoy boy = (ShowBoy) context.getBean("showBoy");
boy.perform();
}
}
[/code]

运行后,提示错误信息如下:
[code="java"]
2009-7-6 14:05:37 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1113708: display name [org.springframework.context.support.ClassPathXmlApplicationContext@1113708]; startup date [Mon Jul 06 14:05:37 CST 2009]; root of context hierarchy
2009-7-6 14:05:37 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [aspectdemo/applicationContext.xml]
2009-7-6 14:05:37 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@1113708]: org.springframework.beans.factory.support.DefaultListableBeanFactory@a61164
2009-7-6 14:05:37 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@a61164: defining beans [showBoy,showGirl,audience,org.springframework.aop.config.internalAutoProxyCreator]; root of factory hierarchy
2009-7-6 14:05:38 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
信息: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@a61164: defining beans [showBoy,showGirl,audience,org.springframework.aop.config.internalAutoProxyCreator]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'showBoy' defined in class path resource [aspectdemo/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: Must set property 'expression' before attempting to match
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:93)
at aspectdemo.TestDemo.main(TestDemo.java:31)
Caused by: java.lang.IllegalStateException: Must set property 'expression' before attempting to match
at org.springframework.aop.aspectj.AspectJExpressionPointcut.checkReadyToMatch(AspectJExpressionPointcut.java:190)
at org.springframework.aop.aspectj.AspectJExpressionPointcut.getClassFilter(AspectJExpressionPointcut.java:174)
at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:195)
at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:250)
at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:284)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:113)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:85)
at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:66)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:362)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:325)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:361)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1344)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
... 14 more
[/code]

请大家帮忙看看。谢谢。
[b]问题补充:[/b]
还是不正确啊!!!

按照你们的说法,报错一样的。 :cry:

  • 写回答

8条回答 默认 最新

  • liuziting 2009-07-15 08:43
    关注

    调用方法改成
    [code="java"]
    Perform boy = (Perform) context.getBean("showBoy");

    [/code]

    JDK改成1.5的试试,估计JDK1.6的版本同ASPECT不兼容。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?