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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://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");@Testpublic 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_()") 环绕通知: 环绕目标方法执行

转载于:https://www.cnblogs.com/yuanchaoyong/p/6416512.html

设计模式(五) 注解方式实现AOP相关推荐

  1. 第五章 Spring进阶-注解方式实现AOP(1)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 徒弟:师傅,我 ...

  2. (转)使用Spring的注解方式实现AOP的细节

    http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...

  3. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  4. Spring5学习(七):注解方式进行AOP操作 及 多种通知类型的测试

    先来介绍一下AOP操作中的几个术语: 1.连接点:指类里面可以被增强的方法 2.切入点:指实际被增强的方法 3.通知:指实际增强的逻辑部分 4.切面:把通知应用到切入点的过程 Spring框架一般都是 ...

  5. springboot注解方式实现aop及常规方式

    本文介绍springboot实现aop的两种方式 首先需要引入对应依赖: <dependency><groupId>org.springframework.boot</g ...

  6. 使用注解方式进行aop编程(代码)

    UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...

  7. spring学习--基于注解方式创建对象AOP

    概念 下面四个注解功能是一样的,都可以用来创建 bean 实例 ​ (1)@Component ​ (2)@Service ​ (3)@Controller ​ (4)@Repository 1.引入 ...

  8. spring框架:简述AOP的使用(xml方式和注解方式)

    本人小白一枚,欢迎大家一起讨论学习,如有错误,还望大家指教. AOP概述 AOP的概念: AOP,全称Apect Oriented Programming,译为面向切面编程,简单的说它可以帮我们把程序 ...

  9. (转)Spring使用AspectJ进行AOP的开发:注解方式

    http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...

  10. AOP——基于AspectJ的注解来实现AOP操作

    1.使用注解方式实现AOP操作 第一步:创建对象 <!-- 创建对象 --> <bean id="book" class="com.bjxb.aop.B ...

最新文章

  1. 生成树计数Matrix-Tree定理-数学
  2. 软件测试集成测试广度,软件测试的规范[6]
  3. java青蛙青蛙跳井_速解青蛙跳井问题
  4. 只读字符串的c语言命令,C语言只读空间 - C 语言程序设计
  5. 蓝桥杯2016省赛真题-剪邮票(dfs)
  6. 刘强东说过,如果京东失败99%是我个人造成,这话会灵验吗?
  7. Python 列表list与数组array的区别
  8. python内置对象是什么_#【Python】【基础知识】【内置对象常用方法】
  9. 开源 三层模型_开源模型将如何超越其他模型
  10. SQLServer left join 出现比左表多的数据
  11. 这款老不死的笔记本,产品小姐姐的最爱......
  12. cimiss数据_CIMISS数据下载小助手
  13. python中怎样使用re模块_python如何导入re模块
  14. docx文档文字怎么加边框_Word技巧:怎么给文本加方框
  15. postgresql 客户端 uri 设置时区
  16. 红米note9pro刷鸿蒙,红米Note10Pro:正式说你好,红米Note9Pro:彻底说再见!
  17. 优化 | 线性化:0-1变量乘以连续变量的线性化
  18. 2022-2028年全球与中国细菌生物农药行业市场深度调研及投资预测分析
  19. 店盈通:拼多多商品怎么上架?
  20. pyqt5 图像上划线_PyQt5如何用QPainter在QScrollArea上画线?

热门文章

  1. oracle12c dba或者sys身份的账户和密码,怎么一次性安装好oracle 12c依赖包
  2. 阿里巴巴 程劭非(寒冬)- 《浅谈前端交互的基础设施的建设》
  3. NO.164 禅道的自定义功能:导航和主页的自定义
  4. violin 结构介绍
  5. 删除不需要的iPhone语言文件
  6. 注意细节:Javascript中的变量作用域
  7. 时间管理:战略时间块,缓冲时间块,逃离时间块
  8. ca蜘蛛特效nvas-nest.js | Bootstrap中文网开源项目免费 CDN 服务
  9. sizeo(结构体)的问题
  10. Hibernate常用查询