许多AOP框架,比较常用的是Spring AOP 与AspectJ。这里主要学习的Spring AOP。

关于AOP

日志、事务、安全验证这些通用的、散步在系统各处的需要在实现业务逻辑时关注的事情称为“方面”,也可称为 关注点
AOP要做的事,就是从系统中分离出 方面 ,然后集中实现。从而独立地编写业务代码和方面代码,在系统运行时,再将方面“织入”到系统中。
这样好处是:
1、减少方面代码里的错误,处理策略改变时还能做到统一修改;
2、在编写业务逻辑时可以专心于核心业务;
 
AOP重要概念
 
切面:方面(日志、事务)的实现,如日志切面、权限切面等。通常是存放方面实现的普通java类,要被aop容器识别为切面,需要在配置中通过bean来标记指定。
通知:切面的具体实现。以目标方法为参照点。根据位置不同,可分前置、后置、异常、环绕、最终通知5种。切面类中的某个方法具体属于哪类通知,需要在配置中指定。
切入点:用于定义通知应该织入到哪些连接点上。
目标对象:将要织入切面的对象,即被通知的对象。这些对象只包含核心业务逻辑业务代码,所有日志、事务、安全验证等方面的功能等待AOP容器的织入。
代理对象:将通知应用到目标对象之后,被动态创建的对象。功能=目标对象中实现的核心业务逻辑功能+方面(日志、事务、安全验证)代码实现的功能。
织入:将切面应用到目标对象,从而创建一个新的代理对象的过程。
 

spring aop日志实现有基于代理类、基于schema、基于@AspectJ注解三种方式。其中前两类项目中配置文件比较复杂,注解方式配置比较简洁。

参考:Spring AOP 完成日志记录

配置文件中关于切入点的一个定义示例:

    <!-- 以AspectJ方式 定义 AOP -->
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(public * cn.com.bs..*work..*Work*.*(..))"
advice-ref="txAdviceWork" />
</aop:config>

看看Spring官方文档的定义(正则匹配原则 如何区分包名、类名、方法名):

spring aop学习记录的更多相关文章

  1. AOP和spring AOP学习记录

    AOP基本概念的理解 面向切面AOP主要是在编译期或运行时,对程序进行织入,实现代理, 对原代码毫无侵入性,不破坏主要业务逻辑,减少程序的耦合度. 主要应用范围: 日志记录,性能统计,安全控制,事务处 ...

  2. Spring AOP 学习例子

    http://outofmemory.cn/code-snippet/3762/Spring-AOP-learn-example     工作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大 ...

  3. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  4. 我的Spring Boot学习记录(二):Tomcat Server以及Spring MVC的上下文问题

    Spring Boot版本: 2.0.0.RELEASE 这里需要引入依赖 spring-boot-starter-web 这里有可能有个人的误解,请抱着怀疑态度看. 建议: 感觉自己也会被绕晕,所以 ...

  5. 在Intellij上面导入项目 & AOP示例项目 & AspectJ学习 & Spring AoP学习

    为了学习这篇文章里面下载的代码:http://www.cnblogs.com/charlesblc/p/6083687.html 需要用Intellij导入一个已有工程.源文件原始内容也可见:link ...

  6. Spring AOP学习笔记01:AOP概述

    1. AOP概述 软件开发一直在寻求更加高效.更易维护甚至更易扩展的方式.为了提高开发效率,我们对开发使用的语言进行抽象,走过了从汇编时代到现在各种高级语言繁盛之时期:为了便于维护和扩展,我们对某些相 ...

  7. Spring AOP学习笔记03:AOP的核心实现之获取增强器

    上文讲了spring是如何开启AOP的,简单点说就是将AnnotationAwareAspectJAutoProxyCreator这个类注册到容器中,因为这个类最终实现了BeanPostProcess ...

  8. Spring AOP学习笔记05:AOP失效的罪因

    前面的文章中我们介绍了Spring AOP的简单使用,并从源码的角度学习了其底层的实现原理,有了这些基础之后,本文来讨论一下Spring AOP失效的问题,这个问题可能我们在平时工作中或多或少也会碰到 ...

  9. Spring AOP学习笔记02:如何开启AOP

    上文简要总结了一些AOP的基本概念,并在此基础上叙述了Spring AOP的基本原理,并且辅以一个简单例子帮助理解.从本文开始,我们要开始深入到源码层面来一探Spring AOP魔法的原理了. 要使用 ...

随机推荐

  1. March 02nd, 2018 Week 9th Friday

    Make hay while the sun shines. 勿失良机. Last night the toothache woke me up and it was very difficult f ...

  2. Linux之系统优化

    查看系统版本 [root@luffy- /]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@luffy- /]# uname -m ...

  3. 16.ajax_case04

    # 抓取金色财经快讯接口 # https://www.jinse.com/lives import requests import json header = { 'Accept': 'text/ht ...

  4. 局域网下Android与scoket通信的实现

    因为最近实验室项目要求实现在局域网下将android app数据发送到winsock中进行保存,所以对此进行了简单学习.pc端因为是另一个同学做的,所以不做说明. 在android端,首先添加权限: ...

  5. vue获取当前元素

    Html: <li><a href="#" v-on:click="typeStyle">萨克斯萨克<span></s ...

  6. Idea自带工具解决冲突

    1:产生冲突 2:解决冲突 解决冲突具体操作: 手动合并代码: 此时点击的是local的>:点击changes的X则合并效果为: 也可以两侧都点击>.结果为: 也可以都点击X,结果为: 最 ...

  7. php 依赖注入的实现

    当A类需要依赖于B类,也就是说需要在A类中实例化B类的对象来使用时候,如果B类中的功能发生改变,也会导致A类中使用B类的地方也要跟着修改,导致A类与B类高耦合.这个时候解决方式是,A类应该去依赖B类的 ...

  8. AppCan10个超实用的APP必备插件,让你少敲80%代码

    一个APP的需求来自于哪儿?产品.老板.客户….. 做程序员不容易,需求一句话,就是几千几万行代码!所幸,在AppCan平台开发APP,开发者只需完成应用的前端部分,至于各项复杂的功能,就交给AppC ...

  9. 001_python单元测试

    一.同事推荐的 pytest库 ==> 官网:http://doc.pytest.org/en/latest/ github地址==>https://github.com/pytest-d ...

  10. Python2 处理 Unicode 字符串的规则

    在 Python2 中处理 Unicode 字符串,需遵循如下规则: 1. 程序中的字符串要加前缀 u 2. 不要用 str(),而应该用 unicode() 作为字符串转换函数.不要使用 chr() ...