zoukankan      html  css  js  c++  java
  • spring AOP

    静态代理与动态代理

    静态代理

    /*
     *   created by why on 2020/3/1
     *
     * 代替UserServiceImpl代理 额外功能
     * 静态代理类
     *      1>  要和目标保持功能一致 : 和目标保持同一套接口
     *      2>  组成:目标 + 额外功能
     */
    
    import com.baidu.pojo.User;
    
    public class UserServiceProxy implements UserService{
        //原始业务:目标
        private UserService userService = new UserServiceImpl();
    
        public Integer insertUser(User user) {
            System.out.println("额外功能");
            return userService.insertUser(user);
        }
    
        public User queryOne(Integer id) {
            System.out.println("额外功能");
            return userService.queryOne(id);
        }
    }
    

    动态代理

        //动态代理搭建
            //1.目标
            final UserService userService = new UserServiceImpl();
            //2.额外功能
            InvocationHandler ih = new InvocationHandler() {
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                       //一个回调函数
                    System.out.println("额外功能");
                    method.invoke(userService,args);
                    return null;
                }
            };
            //3.组装,编制
            //利用反射机制(动态生成反射出来的类),调用目标和额外,额外生成一个代理类
            UserService proxy = (UserService) Proxy.newProxyInstance(AppTest.class.getClassLoader(),
                    userService.getClass().getInterfaces(),ih);
            proxy.queryOne(1);
            System.out.println("--------");
            proxy.insertUser(new User());
    

    动态代理与AOP

    动态代理的实现方案

    1.jdk代理:(JDK在反射包中提供的一套api,上面的例子)通过和目标实现相同的接口保证功能的一致性
    2.cglib代理:(第三方cglib库中的一套api)通过继承目标保证功能的一致性

    spring aop

    底层采用了如上的两种代理,并对动态代理提供了简单的,可操作强的决绝方案。
    目标有接口吗?->有->用jdk代理,否则用cglib代理

    切面:Aspect,由切入点额外功能组成。
    一种新的编程角度:由 切面目标 形成代理。解决项目中的额外功能冗余的问题。

  • 相关阅读:
    判断二分图的染色法
    dfs框架
    codeforces 158c
    省选总结
    云盘
    KMP
    二分
    【又想多了】 听 怎样成为高手-罗辑思维 记录
    小刘(第二版)
    UVA 1594:Ducci Sequence (模拟 Grade E)
  • 原文地址:https://www.cnblogs.com/whyaza/p/12392107.html
Copyright © 2011-2022 走看看