例1.已知有这么一段代码,会打印出Hello

 public static void main(String[] args) {
sayHello();
} public static void sayHello(){
System.out.print("Hello");
}

现在我们想打印出Java Hello world这个字符串,也就是在之前的Hello前后输出一点儿,所以写了如下代码:

 public static void main(String[] args) {
System.out.print("Java ");
sayHello();
System.out.print(" World");
} public static void sayHello(){
System.out.print("Hello");
}

这样,我们的问题就已经解决了,但是突然有一天,你们老板说,我不要打印Java,我想打印Python。那你就好办了啊,改下代码就好了么,可是突然,老板又想改成C,C++......这样一直改就不合适了吧。这时候你就要学习下AOP(面向切面编程)。

一、基础知识

1.在关aop的概念就不说了,直接从代码入手,慢慢过程中会说到。

2.AOP分为两种不同类型:静态AOP和动态AOP

静态AOP的意思就是:在编译期进行织入,就是说对切面进行的任何修改,都要进行重新编译程序。AspectJ就是一个典型的例子

  • 这个织入就是一个基本概念,通白来说就是把代码插入到执行的地方。上边这个例子中就是在Hello前后多打印两句,这个过程的思想就是织入。

动态AOP:在代码执行过程中进行织入,它的切面代码不是编译进class文件中的。Spring AOP是一种动态AOP

二、使用AOP技术解决上边这个例子

基础代码不变(只不过少了静态而已,这个不影响,在代码中有解释)

public void sayHello(){
System.out.print("Hello");
}

然后创建一个实现AOP Alliance(Spring AOP接口)中类的接口的切面类


/**
* 实现环绕通知的接口
* 环绕通知就是在目标代码前后都会执行的
*/
public class MyInterceptor implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
//之前
System.out.print("Java "); //这一句就是执行目标代码
Object proceed = invocation.proceed(); //之后
System.out.print(" World"); return proceed;
}
}

最后在main中执行织入操作

public static void main(String[] args) {

        //先创建执行目标类方法的对象
AOPDemo1 target = new AOPDemo1(); ProxyFactory proxyFactory = new ProxyFactory();
proxyFactory.addAdvice(new MyInterceptor());//这个MyInterceptor就是实现SpringAOP接口的类
proxyFactory.setTarget(target); AOPDemo1 proxy = (AOPDemo1) proxyFactory.getProxy();
proxy.sayHello();
} //因为没有用到类名调用,也不是在main中直接调用,所以不用加静态
public void sayHello() {
System.out.print("Hello");
}

这样,效果就和之前一样了。看不懂没关系,慢慢来。

SpringAOP基础的更多相关文章

  1. Spring知识点总结(四)之SpringAOP基础

        1. Spring aop中的基本概念        • 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候.在Spring AOP中,一个连接 ...

  2. SpringAOP 基础具体解释

    Spring AOP对于刚開始学习spring的同学来说有点难以理解.我刚工作的时候都没怎么理解,如今略微理解了一点,所以在这里我将用嘴简单的样例,最通俗易懂的话语来说出我的理解,可能因为我对Spri ...

  3. SpringAOP基础 - 静态代理设计模式

    代理模式在实现过程中,要创建一个接口(社交技巧-接口),代理类(经纪人 - 类)和真实类(范冰冰 - 类)同时实现这个接口. 举个例子: 我们想要找范冰冰吃饭,但是呢,她是大明星,不可能轻易见我们,我 ...

  4. Spring知识点总结(四)之SpringAOP基础 - 代理设计模式

        1. 分析程序中存在的问题(高内聚,低耦合)        通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...

  5. SpringAOP之使用切入点创建通知

    之前已经说过了SpringAOP中的几种通知类型以及如何创建简单的通知见地址 一.什么是切入点 通过之前的例子中,我们可以创建ProxyFactory的方式来创建通知,然后获取目标类中的方法.通过不同 ...

  6. spring事务详解(三)源码详解

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  7. spring5 源码深度解析----- Spring事务 是怎么通过AOP实现的?(100%理解Spring事务)

    此篇文章需要有SpringAOP基础,知道AOP底层原理可以更好的理解Spring的事务处理. 自定义标签 对于Spring中事务功能的代码分析,我们首先从配置文件开始人手,在配置文件中有这样一个配置 ...

  8. Spring学习记录3——Spring AOP

    SpringAOP基础 AOP简介: AOP是Aspect Oriented Programing的简称,翻译为“面向切面编程”.它适用于具有横切逻辑的应用场合,如性能检测,访问控制,事务管理及日志记 ...

  9. Spring(11) - Introductions进行类扩展方法

    Introductions(引用),在 Aspect 中称为类型间的声明,使切面能够声明被通知的对象(拦截的对象)实现给定的接口,并提供该接口的实现. 简单点说可以将一个类的实现方法复制到未实现的类中 ...

随机推荐

  1. 记录我的 python 学习历程-Day02-while 循环/格式化输出/运算符/编码的初识

    一.流程控制之--while 循环 循环就是重复做同一件事,它可以终止当前循环,也可以跳出这一次循环,继续下一次循环. 基本结构(基本循环) while 条件: 循环体 示例 # 这是一个模拟音乐循环 ...

  2. Python之HTTP协议

    HTTP协议,又称超文本传输协议,主要用于浏览器与服务器之间的通信. HTTP 协议的制作者是蒂姆·伯纳斯-李,1991年设计出来的,HTTP 协议设计之前目的是传输网页数据的,现在允许传输任意类型的 ...

  3. VLAN应用实例

    VLAN 此次内容主要介绍VLAN的Access接口.Trunk接口.Hybird接口的配置实例,以及实际应用. 一.介绍三种接口 1.Access接口 (1)Access接口是交换机上用来连接用户主 ...

  4. MySql数据基础之数据表操作

    MySql数据库中主要利用多个数据表进行数据的存储,我们可以将数据表理解成一个Excel表格,Excel表格的第一列可以将它看为id列,主要任务是数据表中数据的唯一标识,不能重复.不能为空.如果将数据 ...

  5. 用C语言开发的19个经典项目,你会第几个?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多 ...

  6. Orleans 配置端口的一些坑

    Orleans的配置有点乱的 整理了下 .Configure<EndpointOptions>(options => { //这里的IP决定了是本机 还是内网 还是公网 option ...

  7. Python文章相关性分析---金庸武侠小说分析-2018.1.16

    最近常听同事提及相关性分析,正巧看到这个google的开源库,并把相关操作与调试结果记录下来. 输出结果: 比较有意思的巧合是黄蓉使出打狗棒,郭靖就用了降龙十八掌,再后测试了名词的解析. 小说集可以百 ...

  8. LInux内核配置过程

    内核版本 linux 2.6.32.2 配置内核的过程 配置内核可以通过执行 make menuconfig 来进行,下面分析该命令的执行流程 执行该目标 %config: scripts_basic ...

  9. static介绍、内部类、final、权限修饰符的作用范围

    static 关键字:(可用于修饰方法.变量)     static 特点:         static是静态修饰符,一般修饰成员变量.被static修饰的属于全局共享.被static修饰的成员属于 ...

  10. hdu 5532 Almost Sorted Array (水题)

    Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...