• 代理模式的进一步理解(动态代理)


    动态代理:(前提是要有接口)
    CGLIB实现的动态代理:不需要有接口
    
    
    业务层的动态代理实例:
    
    
    package 动态代理设计模式;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    
    public class ServiceProxy  implements InvocationHandler{
    
        private Object target ;//真实对象
        public Object bind(Object target){//返回代理对象
            this.target=target;//绑定真实对象
            return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), this);
        }
        
        /**
         * 代理类代理真实主题的操作方法
         * @param proxy:代理类的对象
         * 需要真实主题对象来执行真实的主题任务
         */
        
        public void ready(){
            System.out.println("关闭自动提交事务");
        }
        public void commit(){
            System.out.println("提交事务");
        }
        public void rollback(){
            System.out.println("回滚事务");
        }
        public void close(){
            System.out.println("关闭数据库连接");
        }
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            Object result=null;
            if(method.getName().startsWith("do")){
                
                this.ready();
                try{
                    result=method.invoke(this.target, args);
                    this.commit();
                
                }catch(Exception e){
                    this.rollback();
                }finally{
                    this.close();
                }
                
            }else{
                result=method.invoke(this.target, args);
            }
            return result;//返回真实对象操作的结果
        }
    
        
    
    }
  • 相关阅读:
    Spring JdbcTemplate源码阅读报告
    Linux 套接字通信笔记(一)
    Python的科学计算包matplotlib setup
    创建Spring Boot项目
    Java反射与自定义注解
    二手前端入门React项目
    Spring 并发事务的探究
    使用IDEA结合MAVEN创建一个Spring Java Web项目
    FutureTask与Fork/Join
    结合业务,精炼SQL
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/7706122.html
Copyright © 2020-2023  润新知