建议楼主直接学习@aspectj  功能强大且简单

解决方案 »

  1.   

    package com.east.spring.proxy;import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;public class Client {
    public static void main(String[] args) {
    BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    //这返回的是一个代理类
    UserManager userManager = (UserManager)factory.getBean("userManager");
    userManager.addUser("123", "123");
    }
    }
    --------------
    package com.east.spring.proxy;import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.aspectj.lang.annotation.Aspect;
    /**
     * @author:East(张栋芳)
     * @date:Nov 27, 2008
     * @content:使用Aspect来实现AOP
     * 
     */
    //定义一个Aspect表示这个类是一个切面的类
    @Aspect
    public class SecurityHandler{
    /**
     * 定义一个切入点 第一个*是方法的返回值
     * add*是以add开始的所有方法
     * ..是表示一个或多个参数
     * addAllMethod()这个方法是Pointcut的标识
     */
    @Pointcut("execution(* add*(..))")
    public void allMethod(){};
    /**
     * 引用PointCut的标识表示是在调用方法之前执行安全检查方法
         * 定义Advice,标识在那个切入点何处织入此方法
         */
    @Before("allMethod()")
    //安全检查方法
    public void checkSecurity(){
    System.out.println("----------checkSecurity-----------");
    }}
    -------------------------------
    package com.east.spring.proxy;public interface UserManager {
    public boolean addUser(String name, String password); public boolean deleteUser(int id); public boolean updateUser(int id, String name, String password); public String findUser(int id);
    }
    -----------------------------
    package com.east.spring.proxy;
    /**
     * @author:East(张栋芳)
     * @date:Nov 27, 2008
     * @content:在没有进行安全性检查的时候,进行了增,删,查
     */
    public class UserManagerImpl implements UserManager { public boolean addUser(String name, String password) {
    System.out.println("-------------UserManagerImpl.addUser---------------");
    return false;
    } public boolean deleteUser(int id) {
    System.out.println("-------------UserManagerImpl.deleteUser---------------");
    return false;
    } public String findUser(int id) {
    System.out.println("-------------UserManagerImpl.findUser---------------");
    return null;
    } public boolean updateUser(int id, String name, String password) {
    System.out.println("-------------UserManagerImpl.updateUser---------------");
    return false;
    }}
    -------------------------------------
    <?xml version="1.0" encoding="UTF-8"?><!--
    - Application context definition for JPetStore's business layer.
    - Contains bean references to the transaction manager and to the DAOs in
    - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").
    -->
    <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"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
               <!--  启用Aspect对annontation的支持 -->
               <aop:aspectj-autoproxy/>
               <!-- 将Aspect和目标对像配置到IOC中来 -->
               <bean id="security" class="com.east.spring.proxy.SecurityHandler"></bean>
               <bean id="userManager" class="com.east.spring.proxy.UserManagerImpl"></bean>
    </beans>