首页 > 代码库 > Spring AOP之 动态代理实例

Spring AOP之 动态代理实例

 

 

1.项目结构图如下3.3.3.1:

 

 

图3.3.3.1技术分享

 

 

2.IUserServ接口代码与UserServImpl实现类代码和上述代码相同

3.LogHandler类代码

public class LogHandler implements InvocationHandler {  

    //目标对象  

    private Object targetObject;  

    /** 

     * 创建动态代理类 

     * @return object(代理类) 

     */  

    public Object createProxy(Object targetObject){  

        this.targetObject = targetObject;  

        return Proxy.newProxyInstance(  

                targetObject.getClass().getClassLoader(),   

                    targetObject.getClass().getInterfaces(), this);  

    }  

    @Override  

    public Object invoke(Object proxy, Method method, Object[] args)  

            throws Throwable {  

        Object obj = null;  

        try {  

            beforeLog();  

            //obj: 目标对象--->代理对象的返回值--->返回给调用者的信息  

            //this.invoke("目标对象","代理对象给目标对象传递参数");  

            //调用目标对象中方法  

            obj = method.invoke(targetObject, args);  

            afterLog();  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

        return obj;  

    }  

      

    //日志管理方法  

    private void beforeLog(){  

        System.out.println("开始执行");  

    }  

      

    private void afterLog(){  

        System.out.println("执行完毕");  

    }    

}   

4. ActionTest测试类代码:

 public class ActionTest {  

    public static void main(String[] args) {  

        //创建代理对象iuserServ  

        LogHandler handler = new LogHandler();  

        IUserServ iuserServ = (IUserServ)handler.createProxy(new UserServImpl());  

        iuserServ.deleteUserById(new User());  

    }  

}  

5. 运行结果: 
开始执行 
******执行删除方法****** 
执行完毕 

 

Spring AOP之 动态代理实例