zoukankan      html  css  js  c++  java
  • aop实现

    ****

    1,使用动态代理实现aop

    public interface UserDao {
        void save();
    }
    public class UserDaoImpl implements UserDao {
    
        private String name;
        
        public void save() {
            System.out.println("save() is called, name: "+name);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        
    }

    ProxyFactory.java

    package com.maple.util;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    import com.maple.dao.UserDao;
    import com.maple.dao.impl.UserDaoImpl;
    
    public class ProxyFactory implements InvocationHandler {
    
        private Object target;
        
        public Object createUserDao(Object target){
            this.target=target;
            return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),
                            this.target.getClass().getInterfaces(), this);
        }
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            System.out.println(proxy.getClass().getName());
            Object result=null;
            UserDaoImpl userDao=(UserDaoImpl)this.target;
            if(userDao.getName()!=null){
                result=method.invoke(userDao, args);
            }else{
                System.out.println("the name is null");
            }
            return result;
        }
    
    }

    测试

    @Test
        public void test() {
            ProxyFactory pf=new ProxyFactory();
            UserDaoImpl u=new UserDaoImpl();
            u.setName("maple");
            UserDao userDao=(UserDao) pf.createUserDao(u);
            userDao.save();
        }

    输出:

    $Proxy5
    save() is called, name: maple

    ****

    有问题在公众号【清汤袭人】找我,时常冒出各种傻问题,然一通百通,其乐无穷,一起探讨


  • 相关阅读:
    vscode_sync
    外国it视频教学文件
    关于登录状态,后台应该另外做一个接口来决定是否登录
    判断浏览器信息
    file控件预览
    githutb账号密码
    .net core 实践笔记(三)--封装底层
    .net core 实践笔记(二)--EF连接Azure Sql
    .net core 实践笔记(一)--开篇
    SQL引用DAL
  • 原文地址:https://www.cnblogs.com/qingmaple/p/4119689.html
Copyright © 2011-2022 走看看