文档章节

DynamicProxy--springAop 入门篇

埔枘
 埔枘
发布于 2017/08/29 23:01
字数 362
阅读 22
收藏 1

springAop 面向切面编程,重要的是切点,多个点结合起来就是面,所以是切面,我个人是怎么理解的,有点受高中数学的影响,我们接下来说说一下三点

        1.前置增强

        2.后置增强

        3.环绕增强

  1. 前置增强

    是什么呢?就是我们之前的before() 方法

  2. 后置增强

    同理就是,after()

   3.环绕增强

        不就是前后一套都来,不就是环绕增强了吗?对,是的,我们还是来看代码吧

//接口

public interface Hello {
    public void say(String name);
}
//实现类
public class HelloImpl implements Hello {
    public void say(String name) {
        System.out.println(name);
    }
}
//这个类 实现的before()就是springAop的前置增强,自然afterReturning就是后置增强咯,哈哈哈
public class SuperAdvice implements AfterReturningAdvice,MethodBeforeAdvice{
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("之后");
    }
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("之前");
    }
}

//测试

@Test
    public void a(){
        ProxyFactory proxyFactory = new ProxyFactory();
        proxyFactory.setTarget(new HelloImpl());
        proxyFactory.addAdvice(new SuperAdvice());
        Hello hello = (Hello) proxyFactory.getProxy();
        hello.say("张三");
    }

console:

    之前

    张三

    之后

 

那么怎么实现环绕增强呢? 看代码

public class AroundAdvice implements MethodInterceptor{
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        System.out.println("之前");
        Object result = methodInvocation.proceed();
        System.out.println("之后");
        return result;
    }
}
MethodInterceptor并不是spring的接口,而是Aop联盟提出的强大接口,调用方式一样

 

public class TestA {
    @Test
    public void a(){
        ProxyFactory proxyFactory = new ProxyFactory();
        proxyFactory.setTarget(new HelloImpl());
        proxyFactory.addAdvice(new AroundAdvice());
        Hello hello = (Hello) proxyFactory.getProxy();
        hello.say("张三");
    }
}

结果同上

console:

    之前

    张三

    之后

 

下次继续说!

© 著作权归作者所有

埔枘
粉丝 1
博文 24
码字总数 8223
作品 0
怀化
程序员
私信 提问
Aspect#

Aspect#就是castle.dynamicproxy的扩展,而castle.dynamicproxy得本质就是通过reflection,emit,delegate,在运行时动态的为非sealed类的virtual方法生成proxy类。Aspect#则是在此基础上定义了...

匿名
2008/11/10
2.4K
0
Spring系列之AOP基本主要类概述

在这篇文章中我将对自己了解的AOP中的基本主要类做一个概述,可能不包括一些AOP高级用法的类以及是自己还不了解的类。会不定期的进行补充和修改。 SpringAOP基础解析类 类名 作用概述 AopNam...

Mr_zebra
2018/07/20
32
0
Java高级编程细节-动态代理-进阶高级开发必学技能

关于代理模式的话题有很多, 在开发中经常用到的应该是静态代理模式,能很好的去耦合。 动态代理是代理模式的另外一种实现。 动态代理的区别在哪里? 动态代理有什么好处? 今天我们来分析下...

远方的梦Java
2018/07/28
0
0
SpringCloud Eureka 源码解析 —— 应用实例注册发现(八)之覆盖状态

SpringCloud Eureka 源码解析 —— 应用实例注册发现(八)之覆盖状态 Harries Blog™2017-11-065 阅读 ACESpringAppcachecatAPIbuildActionb 摘要: 原创出处 http ://www. ioc oder.cn/ Eu...

Harries Blog™
2017/11/06
0
0
Spring AOP就是这么简单啦

前言 只有光头才能变强 上一篇已经讲解了Spring IOC知识点一网打尽!,这篇主要是讲解Spring的AOP模块~ 之前我已经写过一篇关于AOP的文章了,那篇把比较重要的知识点都讲解过了一篇啦:Sprin...

Java3y
2018/05/24
257
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
10
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部