AOP的全称: Aspact  Oriented  Programming

AOP的目标(作用):让我们可以“专心做事”  日志记录,事务处理,异常捕获,缓存操作。

AOP原理

将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决

采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能

AOP的使用

使用Spring AOP实现系统日志功能

步骤如下:

1.搭建分层架构

public class User implements Serializable{

private Integer id; // 用户ID

private String username; // 用户名

private String password; // 密码

}

2.创建数据访问层接口和实现类

接口

public interface IDaoAop {

public void save(User user);

}

实现类

public class UserDao implements IDaoAop {

public void save(User user) {

System.out.println("save success!");

}

}

3.创建业务逻辑层接口和实现类

public interface IUserBiz {

public void save(User user);

}

实现类

public class UserBiz implements IUserBiz{

private IDaAop dao;

public void save(User user) {

dao.save(user);

}

//dao 属性的setter访问器,会被Spring调用,实现设值注入

public void setDao(IDaoAop dao) {

this.dao = dao;

}

}

4.创建前置和后置 处理类

前置增强

import java.lang.reflect.Method;

import org.apache.log4j.Logger;

import org.springframework.aop.MethodBeforeAdvice;

public class LoggerBefore implements MethodBeforeAdvice {

private static final Logger log = Logger.getLogger(LoggerBefore.class);

public void before(Method arg0, Object[] arguments, Object target)

throws Throwable {

log.info("前置内容AAA");

}

}

后置增强

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class LoggerAfter  implements AfterReturningAdvice{

public void afterReturning(Object returnValue, Method method, Object[] arguments,

Object target) throws Throwable {

System.out.println("后置增强代码");

}

}

5.

在Spring配置文件中完成业务对象和DAO的定义和装配,并定义了前置增强和后置增强组件

<bean id="dao" class ="全路径"/>

<bean id="dao" class ="全路径"/>

<property name="dao" ref="dao"></property>

</bean>

<!-- 定义前置增强组件 -->

<bean id="loggerBefore" class="全路径"/>

<!-- 定义后置增强组件 -->

<bean id="loggerAfter" class="全路径"/>

7.测试

public static void main(String[] args) {

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

IUserBiz biz=(IUserBiz)ctx.getBean("biz");

User user=new User();

biz.save(user);

System.out.println("success!");

切面: 横切关注点被模块化为特殊的类,这些类称为切面。

优点:每个关注点现在都集中于一处,而不是分散到多处代码中,服务模块更简洁,服务模块只需关注核心代码。

AOP术语

定义: 切面也需要完成工作。在AOP术语中,切面的工作被称为通知。

(AOP)理解的更多相关文章

  1. spring AOP理解和相关术语

    一.AOP理解 AOP:横向抽取机制,底层使用代理方式实现. 示例: 现有LogDAO接口以及实现Log接口的Log类.类有add的方法,现在要打印add方法的开始时间和结束时间.(即增强Log的ad ...

  2. AOP理解

    1.问题 问题:想要添加日志记录.性能监控.安全监测 2.最初解决方案 2.1.最初解决方案 缺点:太多重复代码,且紧耦合 2.2.抽象类进行共性设计,子类进行个性设计,此处不讲解,缺点一荣俱荣,一损 ...

  3. Aop理解 ioc理解

    AOP 把 [核心代码]和[非核心代码]分离 提高开发的效率 java设计模式: https://www.cnblogs.com/malihe/p/6891920.html N+1就是: 1:一条查询 ...

  4. spring ioc aop 理解

    OC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果 ...

  5. Spring(DI,AOP) 理解(一)

    感觉自己的spring理解的不好.所以重新开始学习. 这篇文章主要是来理解DI(依赖注入),Aop(切面) 一.DI(依赖注入,这里没有涉及到注释.只是用xml文件和Bean的方法来注册pojo,) ...

  6. spring学习笔记(三)我对AOP理解

    首先我们要知道AOP是什么?AOP全称Aspect OrientedProgramming,即面向切面编程.在这里我不想去说什么是切面,什么是切点,什么是通知等等,相关博客很多,如果大家想知道可以自己 ...

  7. Spring学习记录(十二)---AOP理解和基于注解配置

    Spring核心之二:AOP(Aspect Oriented Programming) --- 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软 ...

  8. spring 核心思想:AOP 理解

    什么是AOP? AOP概念介绍 所谓AOP,即Aspect orientied program,就是面向方面(切面)的编程. 面向切面编程Aspect-Orlented-Programming,即AO ...

  9. spring aop 理解

    aop简介 aop是spring 的两大特性之一,还有IOC.主要提供面向切面的编程思想,区分于面向对象编程. aop原理(动态代理+反射) 在一个方法体中,可能会存在很多其他的方法调用,我们可以把每 ...

  10. spring ioc和aop理解

    1.IOC 表示控制反转. 简单点说就是原来的对象是在要使用之前通过在代码里通过new Something()的方式创建出来的: IOC则是由spring容器创建同一创建,在程序要使用到该对象的时候, ...

随机推荐

  1. emacs设置tab缩进

    这两天使用Emacs自带的JavaScriptMode时,发现与其它编辑器下缩进不同,而且用emacs重新缩进对齐后,再用其它的编辑器打时缩进却乱掉了.分析应该是Tab缩进的问题,在.emacs中增加 ...

  2. 兼容html5新标签及媒体查询引入插件

    <!-- 以下2个插件是用于在IE8支持HTML5元素和媒体查询的,如果不用可移除 --> <!--[if lt IE 9]> <script src="htt ...

  3. Opencv— — Color Gradient

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  4. Linux下抓包工具tcpdump应用详解

      TCPDUMP简介 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一.sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的.对于网络管理人员来说 ...

  5. 关于yolov3 训练输出值

    Region xx: cfg文件中yolo-layer的索引: Avg IOU:当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1: Class: 标注物体的分类准确率,越大越 ...

  6. leetcode 395 至少有K个重复字符的最长子串

    找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k .输出 T 的长度. 示例 1: 输入: s = "aaabb", k = 3 输 ...

  7. LWDB

    题意: 给一棵 $n$ 个节点的树,维护两种操作: 1.将距离 $x$ $distance \leq d$ 的点染成 $c$ 2.询问 $x$ 的颜色. 解法: 首先将染色可以转换为每个时间对应一个颜 ...

  8. vector 大小

    vector定义以后就最好确定大小resize(),否则在vector析构时可能出现 "double free or corruption"这样的错误

  9. 3.2-3.3 Hive中常见的数据压缩

    一.数据压缩 1. 数据压缩 数据量小 *本地磁盘,IO *减少网络IO Hadoop作业通常是IO绑定的; 压缩减少了跨网络传输的数据的大小; 通过简单地启用压缩,可以提高总体作业性能; 要压缩的数 ...

  10. HDU - 4006 The kth great number multiset应用(找第k大值)

    The kth great number Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming ...