博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Aop说明
阅读量:6715 次
发布时间:2019-06-25

本文共 2788 字,大约阅读时间需要 9 分钟。

在xml配置中用到那个标签在开启不然不用,他会报错
1.对接口进行动态代理:创建出来的对象必须转换成接口类型
                                         原因他创建的是实现类而不是不是接口所以实现的时候必须转换成接口
                                         他动态实现的是实现类,他不是继承接口再实现的,而是直接实现接口
                                         所以需要转换 接口 s=Spring 创建动态类();
2.而对类进行动态代理的话就不用转换
                                                    因为他是继承实现类重写了里面的方法  子类转换父类是自动转换的所以不用进行转换
动态类(系统自动生成):
           动态类:继承与你的类,动态类是自己生成的你是无法操作动态类的。
           处理类:想要操作 需要写一个操作类 通知到你的动态类 告诉他怎样实现
2399f5f1bb9797749baa1f8fe3f96d27bb2cd952
aop:
         需要引入切面框架Aspect,他是一个独立的框架跟Spring没有任何关系
举例:
      
@Component()public class BakService {    public void ZhuCe() {        System.out.println("我要充钱");    }}—————————————————————————————设置处理类代码:这种是通知型的public class ChuLi {    //切入的表达是    @Pointcut("execution(* my.sun.spring.LianXi..*.*(..))")//这个是引入所有    public void QieMethdf(){}//这个是个空方法为的是引入切入表达式    @Before("QieMethdf()")    public void Method() {        System.out.println("贪玩蓝月欢迎您");    }    @After("QieMethdf()")    public void Method1() {        System.out.println("欢迎您伟大的RMB玩家");    }}
55eaa4023e78d57711b9848a78826bfe61001edc
切面表达式:
这兄弟写的很详细:
execution(    modifier-pattern?  //修饰符    ret-type-pattern  //返回类型    declaring-type-pattern?  //方法模式    name-pattern(param-pattern)  //参数模式    throws-pattern?  //异常模式)/*整个表达式可以分为五个部分: 1、execution(): 表达式主体。 2、第一个*号:表示返回类型,*号表示所有的类型。 3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service.impl包、子孙包下所有类的方法。 4、第二个*号:表示类名,*号表示所有的类。 5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。*/@pointcut("execution(* com.sample.service.impl..*.*(..))")
719a2dfc3d3d193d72f4d0647f87b26e3395eab6
环切什么是环切:
Around
                       (可以做权限,不成立到这里就结束了)
                        方法前后都监听,这个方法有权限可以选择不执行真实逻辑代码
                        调用方法时直接进入你的操作类方法
@Component()//实现类public class BakService {    public String ZhuCe(String url, String possword) {        return url +possword;    }}—————————————————————————————//处理类@Around("QieMethdf()")    public Object around(ProceedingJoinPoint proceedingJoinPoint) {        //如果需要返回值的话就需要就方法返回类型声明称Object不确定你的返回值是否是多个且类型一样        Object[] objects = proceedingJoinPoint.getArgs();        //拿到方法实现类的方法参数        //之所以用数据不确定你传进来的参数是多少个        System.out.println(Arrays.toString(objects));        System.out.println(proceedingJoinPoint.getTarget());        //拿到你实现类的执行对象        System.out.println("嘻嘻哈哈");        System.out.println(proceedingJoinPoint.getSignature());        //拿到你实现类的执行方法//        objects[0]=objects[0]+"123";//        objects[1]=objects[1]+"456";//        proceedingJoinPoint.proceed();//注意这里有两个一个是返回原参数一个是修改完的参数        if (!objects[1].equals("哈哈")) {            try {                throw new MiErrorException();            } catch (MiErrorException e) {                e.printStackTrace();            }        }        //之前可以加代码        try {            return proceedingJoinPoint.proceed();            //执行实现类中的代码            //将代码中的值返回除去        } catch (Throwable throwable) {            throwable.printStackTrace();       //这个异常是如果你的实现类出了错误,他就会在这报错         }        //之后也可以加代码        System.out.println("滚粗");        return null;    }//可以通过    System.out.println(bakService.getClass().getName()); 打印对象类名的方式来查看对象是否被监听

转载地址:http://feelo.baihongyu.com/

你可能感兴趣的文章
python各种模块,迭代器,生成器
查看>>
微信小程序 watch监听数据变化 类似vue中的watch
查看>>
u检验、t检验、F检验、X2检验 (转)
查看>>
不可不知的Python模块: collections
查看>>
PAT 1066. Root of AVL Tree (25)
查看>>
hdu1052
查看>>
服务器端推送技术
查看>>
python开发工具
查看>>
Home Assistant系列 -- 自动语音播报天气
查看>>
Hyberledger-Fabric 1.00 RPC学习(1)
查看>>
SDNU 1450.报时助手
查看>>
BZOJ 4144 Dijkstra+Kruskal+倍增LCA
查看>>
阻塞与非阻塞,同步与异步
查看>>
HTML段落自动换行的样式设置
查看>>
Android实现左右滑动指引效果
查看>>
html里frame导航框架实现方法
查看>>
shell编程系列5--数学运算
查看>>
在 UWP 应用中创建、使用、调试 App Service (应用服务)
查看>>
Active MQ C#实现
查看>>
C#实现秒表程序
查看>>