spring学习之aop(面向切面编程)
时间:2019-07-20
本文章向大家介绍spring学习之aop(面向切面编程),主要包括spring学习之aop(面向切面编程)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
AOP术语学习:
Aspect:切面,封装用于横向插入系统功能(事务,日志)的类
Joinpoint:连接点,在程序执行过程中的某个阶段点
Pointcut:切入点,切面与程序流程的交叉点,即那些需要处理的连接点。
Advice:在定义好的切入点所要执行的程序代码,可以理解为切面类中的方法。
Target Object:通知的对象,如果aop采用的是动态aop实现,该对象就是一个被代理对象。
Proxy:代理,将通知应用到目标对象之后,被动态创建的对象。
Weaving:织入,将切面代码插入到目标对象上,从而生成代理对象的过程。
要导入的包:
jdk代理:
UserDao.java
1 package com.itheima.jdk; 2 3 public interface UserDao { 4 public void addUser(); 5 public void deleteUser() ; 6 }
UserDaoImpl.java
1 package com.itheima.jdk; 2 3 import org.springframework.stereotype.Repository; 4 5 /* aop jdk代理*/ 6 @Repository("userDao") 7 public class UserDaoImpl implements UserDao { 8 9 @Override 10 public void addUser() { 11 // TODO Auto-generated method stub 12 System.out.println("添加用户"); 13 } 14 15 @Override 16 public void deleteUser() { 17 // TODO Auto-generated method stub 18 System.out.println("删除用户"); 19 } 20 21 }
JdkProxy.java
1 package com.itheima.jdk; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 import java.lang.reflect.Proxy; 6 7 import com.itheima.aspect.MyAspect; 8 9 public class JdkProxy implements InvocationHandler { 10 11 /* 声明目标类接口 */ 12 private UserDao userDao; 13 14 15 /* 创建代理方法 */ 16 public Object creatProxy(UserDao userDao) { 17 this.userDao=userDao; 18 /* 类加载器 */ 19 ClassLoader classLoader=JdkProxy.class.getClassLoader(); 20 //被代理对象实现的所有接口 21 Class<?>[] interfacesClasses=userDao.getClass().getInterfaces(); 22 //使用代理类进行增强,返回的是代理后的对象 23 return Proxy.newProxyInstance(classLoader, interfacesClasses, this); 24 } 25 26 /* 所有动态代理类的方法调用都交由invok方法处理 27 * arg0 被代理后的对象 28 * arg1 将要被执行的方法信息 29 * arg2 执行方法需要的参数 30 * */ 31 32 @Override 33 public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable { 34 // TODO Auto-generated method stub 35 36 //声明切面 37 MyAspect myAspect=new MyAspect(); 38 //前增强 39 myAspect.check_Permission(); 40 //在目标类上调用方法,传入参数 41 Object object=arg1.invoke(userDao, arg2); 42 //后增强 43 myAspect.log(); 44 return object; 45 } 46 47 }
MyAspect.java
1 package com.itheima.aspect; 2 3 4 /*jdk代理 5 切面类:可以存在多个通知Advice(增强的方法)*/ 6 public class MyAspect { 7 public void check_Permission() { 8 System.out.println("模拟检查权限"); 9 } 10 11 public void log() { 12 System.out.println("模拟创建日志"); 13 } 14 }
JdkTest.java
package com.itheima.jdk; //jdk动态代理测试 public class JdkTest { public static void main(String[] args) { // TODO Auto-generated method stub //创建代理对象 JdkProxy jdkProxy=new JdkProxy(); //创建目标对象 UserDao userDao=new UserDaoImpl(); //从代理对象中获取增强后的目标对象 UserDao useaoDao1=(UserDao)jdkProxy.creatProxy(userDao); useaoDao1.addUser(); useaoDao1.deleteUser(); } }
实验截图:
原文地址:https://www.cnblogs.com/2312947032zyk/p/11210389.html
- thrift:swift项目笔记
- Java常用类(五)之集合工具类Collections
- Windows8小技巧(1)—Map Network Drive
- mysql: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for opera
- tomcat 8.5.9.0 解决catalina.out过大的问题
- 物联网是如何驱动网络变革的?——上
- Java常用类(四)之数组工具类Arrays
- java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z 的解决
- JS魔法堂:定义页面的Dispose方法——[before]unload事件启示录
- HashSet/HashMap详解
- Ajax大显身手
- bash编程之xargs实用技巧
- 表单验证和正则表达式
- ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 公共钥匙盒-CSP数组排序练习
- 疫情这么严重,还不待家里学Numpy和Pandas?
- CSP-201812-2-小明放学-Java
- Mac怎么设置docker国内镜像源来加速下载?
- 适合数据分析面试笔试入门的编程题
- 女同事问狗哥什么是线程池的阻塞队列?
- BAT某厂数据分析终面面经
- 通过常见的业务掌握SQL高级功能
- 滴滴出行数据分析师面试经验
- 如何制作推论统计分析报告
- 全局唯一 ID 服务的分布式ID生成系统
- SpringBoot 国际化实现跨地区的多语言切换
- MySQL 死锁产生原因和解决方法
- 手把手教你ShardingSphere和Mybatis拦截器实现特殊字段动态切换加密
- Swagger3.0官方starter诞生,可以扔掉那些野生starter了