1.1、

    Aop,  aspect object programming  面向切面编程

                    功能: 让关注点代码与业务代码分离!

            关注点,

                  重复代码就叫做关注点;

            切面,

                  关注点形成的类,就叫切面(类)!

                  面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候往业务方法上动态植入“切面类代码”。

            切入点,

                  执行目标对象方法,动态植入切面代码。

                  可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。

代码示例如下:

UserDao  目标对象

package com.murong.aop;

import org.springframework.stereotype.Component;

/**
* 目标对象
*/
@Component // 加入IOC容器
public class UserDao
{
public void save()
{
System.out.println("-----核心业务:保存!!!------");
}
}

Aop  切面类

package com.murong.aop;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; /**
*切面类
*/
@Component // 加入IOC容器
@Aspect
public class Aop
{
@Pointcut("execution(* com.murong.aop.UserDao.*(..))")//切入点
public void testPointCut(){ }
@Before("testPointCut()")
public void begin()
{
System.out.println("事务开启123");
}//关注点代码 @After("testPointCut()")
public void end()
{
System.out.println("事务结束456");
}//关注点代码
}

ApplicationContext  sping配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"
default-autowire="byType"> <!-- 开启注解扫描 -->
<context:component-scan base-package="com.murong.aop"></context:component-scan> <!--开启注解扫描-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans>

App  测试类

package com.murong.aop;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class App
{
private ApplicationContext ac = new ClassPathXmlApplicationContext("com/murong/aop/applicationContext");
@Test
public void test()
{
UserDao dao = (UserDao) ac.getBean("userDao");
dao.save();
}
}

使用总结:

步骤:

1) 先引入aop相关jar文件 (aspectj  aop优秀组件)

spring-aop-3.2.5.RELEASE.jar   【以spring3.2版本jar为例】

aopalliance.jar   【spring2.5源码/lib/aopalliance】

aspectjweaver.jar   【spring2.5源码/lib/aspectj】或【aspectj-1.8.2\lib】

aspectjrt.jar   【spring2.5源码/lib/aspectj】或【aspectj-1.8.2\lib】

注意: 用到spring2.5版本的jar文件,如果用jdk1.7可能会有问题。

需要升级aspectj组件,即使用aspectj-1.8.2版本中提供jar文件提供。

2) bean.xml中引入aop名称空间(文件头引入)

  

3) 开启aop注解

    如上图。

4) 使用注解

@Aspect 指定一个类为切面类

@Pointcut("execution(* cn.itcast.e_aop_anno.*.*(..))")  指定切入点表达式

@Before("pointCut_()") 前置通知: 目标方法之前执行

@After("pointCut_()") 后置通知:目标方法之后执行(始终执行)

@AfterReturning("pointCut_()")     返回后通知: 执行方法结束前执行(异常不执行)

@AfterThrowing("pointCut_()") 异常通知:  出现异常时候执行

@Around("pointCut_()") 环绕通知: 环绕目标方法执行

最新文章

  1. Quality 是什么?
  2. vue2 上传图片
  3. DICOM:DICOM3.0网络通信协议
  4. Android消息推送完美方案
  5. Check Box 用法
  6. 【制作镜像Win*】环境准备(设置yum源)
  7. PHP给图片加文字水印
  8. springboot2.1.3集成单节点elasticsearch6.4.0
  9. [Day17]常用API(System、Math、Arrays、BigInteger、BigDecimal)
  10. 记CSS格式化上下文
  11. selenium中,8种 find element 方法
  12. ansible运维工具(二)
  13. Rabbitmq 安装&amp;启动
  14. Spring事务管理——回滚(rollback-for)控制
  15. Eloquent Observer 的小坑
  16. MySQL的索引是什么?怎么优化?
  17. C++学习之路(三):volatile关键字
  18. 前言-关于学习OC还是学习Swift的个人理解
  19. 不使用flash实现复制文字(图片)到剪贴板
  20. linux 环境 php 链接 sqlserver 2008

热门文章

  1. mysql分表技术
  2. 第9步:ASMCA创建磁盘组
  3. Docker for window 无法共享磁盘
  4. python中函数参数*args和**kw的区别
  5. 面试题思考:IOC的优缺点
  6. ios APP 在 waiting for review时重新上传程序
  7. centos6.5下安装samba服务器与配置
  8. [LintCode] 通配符查询
  9. :nth- 从1开始计数,其他如:eq()、 index()从0开始计数
  10. 原生JS返回顶部,带返回效果