论坛首页 Java企业应用论坛

Spring 2 AOP编程问题

浏览 4514 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-18  

spring 的aop功能怎么不起作用。

大家帮我看看:

java 代码
  1. /**  
  2.  *   
  3.  */  
  4. package com.dongyun.platform.test;   
  5.   
  6. /**  
  7.  * @author Administrator  
  8.  *  
  9.  */  
  10. public class AppKwikEMart implements KwikEMart {   
  11.   
  12.     /* (non-Javadoc)  
  13.      * @see com.dongyun.platform.test.KwikEMart#buySquishee(com.dongyun.platform.test.Customer)  
  14.      */  
  15.     public Squishee buySquishee(Customer customer) {   
  16.         System.out.println("give you");   
  17.         return new Squishee();   
  18.     }   
  19.   
  20. }  
java 代码
  1. /**  
  2.  *   
  3.  */  
  4. package com.dongyun.platform.test;   
  5.   
  6. import java.lang.reflect.Method;   
  7.   
  8.   
  9. /**  
  10.  * @author Administrator  
  11.  *  
  12.  */  
  13. public class WelcomeAdvice {   
  14.   
  15.     /* (non-Javadoc)  
  16.      * @see org.springframework.aop.MethodBeforeAdvice#before(java.lang.reflect.Method, java.lang.Object[], java.lang.Object)  
  17.      */  
  18.     public void before(Method arg0, Object[] arg1, Object arg2)   
  19.             throws Throwable {   
  20.         System.out.println("Hello "+"!");   
  21.     }   
  22.   
  23. }   

 

applicationContext.xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="   
  7.     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
  8.     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd   
  9.     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">  
  10.     <aop:aspectj-autoproxy />  
  11.     <bean id="kwikEMartTarget"  
  12.         class="com.dongyun.platform.test.AppKwikEMart">  
  13.     </bean>  
  14.   
  15.     <bean id="welcomeAdvice"  
  16.         class="com.dongyun.platform.test.WelcomeAdvice">  
  17.     </bean>  
  18.   
  19.     <aop:config>  
  20.         <!-- 声明一个切入点。 -->  
  21.         <aop:aspect id="myAspect" ref="welcomeAdvice">  
  22.             <aop:pointcut id="apointcut"  
  23.                 expression="execution(* com.dongyun.platform.test.AppKwikEMart.*(..))" />  
  24.             <aop:before method="before" pointcut-ref="apointcut" />  
  25.         </aop:aspect>  
  26.     </aop:config>  
  27. </beans>  

然后我在main函数里测试怎么不起作用。

java 代码
  1. package com.dongyun.platform.test;   
  2. public class Main {   
  3.     public static void main(String[] args){   
  4.         ClassPathResource resource = new ClassPathResource("applicationContext.xml");   
  5.         BeanFactory factory = new XmlBeanFactory(resource);   
  6. //      AppKwikEMart app = (AppKwikEMart) factory.getBean("kwikEMartTarget");   
  7.         AppKwikEMart app = new AppKwikEMart();   
  8.         Customer cus = new Customer("chxkyy");   
  9.         app.buySquishee(cus);   
  10.         System.out.println("hello world!");   
  11.     }   
  12. }  

出来的结果只是:

give you
hello world!

为什么不打印Hello !呢?


   发表时间:2007-12-19  
WelcomeAdvice 要 impletments MethodBeforeAdvice
0 请登录后投票
   发表时间:2007-12-19  
[quote="liusong1220"]WelcomeAdvice 要 impletments MethodBeforeAdvice[/quote]
我加了也还是不出来:
java 代码
 
  1. /** 
  2.  *  
  3.  */  
  4. package com.dongyun.platform.test;  
  5.   
  6. import java.lang.reflect.Method;  
  7.   
  8. import org.springframework.aop.MethodBeforeAdvice;  
  9.   
  10.   
  11. /** 
  12.  * @author Administrator 
  13.  * 
  14.  */  
  15. public class WelcomeAdvice implements MethodBeforeAdvice {  
  16.   
  17.     public void before(Method arg0, Object[] arg1, Object arg2)  
  18.             throws Throwable {  
  19.         System.out.println("Hello !");  
  20.     }  
  21.   
  22. }  
0 请登录后投票
   发表时间:2007-12-19  
我也在做这个同样的问题找了半天找到了
main 中的
AppKwikEMart app = (AppKwikEMart) factory.getBean("kwikEMartTarget");   --错了应当是 factory.getBean("myAspect");


0 请登录后投票
   发表时间:2007-12-21  
1.使用ApplicationContext,而不是BeanFactory
2.使用接口作为getBean返回的引用类型,因为该引用此时是代理。除非你的bean没有实现接口,返回的是子类。

引用
    ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    KwikEMart app = (KwikEMart) factory.getBean("kwikEMartTarget");
1 请登录后投票
   发表时间:2007-12-25  
谢谢,问题解决!
0 请登录后投票
   发表时间:2008-01-02  
也刚碰到这个问题.谢谢啊...但这是什么原因啊?为什么 factory.getBean("myAspect"); 这样写就是可以呢?
0 请登录后投票
   发表时间:2008-01-04  
name 写道
也刚碰到这个问题.谢谢啊...但这是什么原因啊?为什么 factory.getBean("myAspect"); 这样写就是可以呢?

KwikEMart app = (KwikEMart) factory.getBean("kwikEMartTarget");

这样写。stone7已经解释清楚。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics