痔疮犯了 发表于 2009-2-9 09:47:37

AspectJ

在作用AspectJ标签代理时,出了点问题,找了好久才知道答案,
    先看看我的代码:
    Waiter.java
    package cn.kingfengks.aspectJaop;
    public interface Waiter {void greetTo(String name);void serveTo(String name); }
    NaiveWaiter.java
    package cn.kingfengks.aspectJaop;
    public class NaiveWaiter implements Waiter {
   public void greetTo(String name) {   System.out.println("greet to " name "...");}
   public void serveTo(String name) {   System.out.println("serving to " name "...");}public void print(){   System.out.println("I am a Waiter!");}
    }
    PreGreetingAspect .java
    package cn.kingfengks.aspectJaop;
    import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before;
    @Aspect public class PreGreetingAspect {@Before("execution(* greetTo(..))")public void beforGreeting(){   System.out.println("How are you !");} }
    问题就出在主函数上如下面:
    //一定要用ApplicationContext才可以用   //原来用的是下面这样的,怎么样都没办法自动代理   //Resource res = new ClassPathResource("cn/kingfengks/aop/advisor/applicationContext_aop.xml");   //BeanFactory bf = new XmlBeanFactory(res);   ApplicationContext ctx = new ClassPathXmlApplicationContext("cn/kingfengks/aspectJaop/applicationContext.xml");      Waiter waiter = (Waiter)ctx.getBean("waiter");   waiter.greetTo("John");
    原因是:ApplicationContext派生于BeanFactory,而加入了很多的面向应用的功能,.曾有人这样比喻这2者之间的关系,如果BeanFactory是Spring的心脏那么ApplicationContext就是Spring的五脏六腑和躯干四肢了
页: [1]
查看完整版本: AspectJ