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

时间: 2024-10-10 08:49:41

spring学习之aop(面向切面编程)的相关文章

spring框架学习(三)——AOP( 面向切面编程)

AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能. 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 所谓的周边功能,比如性能统计,日志,事务管理等等 周边功能在Spring的面向切面编程AOP思想里,即被定义为切面 在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发 然后把切面功能和核心业务功能 "编织" 在一起,这就叫AOP 原理图 1. 功能分两大类,辅助功能和

深入分析JavaWeb Item54 -- Spring中的AOP面向切面编程2

一.在Advice方法中获取目标方法的参数 1.获取目标方法的信息 访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点.JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名 Object getTarget:返回被织入增强处理的目标对象 Object getThis:返

浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring框架的,这就说明你有权选择是否要用AOP来完成一些业务. AOP面向切面编程,通过另一种思考的方式,来弥补面向对象编程OOP当中的不足,OOP当中最重要的单元是类,所以万物皆对象,万物皆是 对象类.而在AOP的模块单元中,最基础的单元是切面,切面对切点进行模块化的管理. 最后再提一句:Spring当

Spring AOP 面向切面编程

AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例

sprint.net(2) AOP面向切面编程,spring.net的环绕通知;Spring.net的AOP通知的四种类型

AOP 有点类似于我们MVC里面的Filter过滤器,例如在MVC里面,如果给一个Action上打一个标签,就可以在这个Action执行之前或者之后,额外的执行一个方法,这个就相当于是面向切面编程. 无侵入式的. (也就是在不改变原来的代码的情况下,来跳转到一个其他的方法,执行完毕后回到主方法..),但是spring.net的AOP更牛叉,只需要在xml里面配置,就可以了,不需要在方法上面打特性的标签,也不需要继承什么类(例如MVC的过滤器是继承了ActionFilterAttribute) 主

深入探索spring技术内幕(七): 配置Spring AOP面向切面编程

一. AOP一些概念 Aspect( 切面 ): 指横切性关注点的抽象即为切面, 它与类相似, 只是两者的关注点不一样, 类是对物体特征的抽象, 而切面横切性关注点的抽象. joinpoint( 连接点 ): 指那些被拦截到的点. 在spring中, 这些点指的是方法, 因为spring只支持方法类型的连接点, 实际上joinpoint还可以是field或类构造器) Pointcut( 切入点 ): 指我们要对那些joinpoint进行拦截的定义. Advice( 通知 ): 指拦截到joinp

spring入门-AOP 面向切面编程

AOP 面向切面编程 在日常开发中最后将业务逻辑定义在一个专门的service包下,而实现定义在service包下的impl包中, 服务接口以IXXXService形式,而服务实现就是XXXService,这就是规约设计 步骤: 1.E:\Users\WorkSpaces\KmwalletApp\spring\aop\test\HelloWorldService.java 继承(implements)xx接口 2.E:\Users\WorkSpaces\KmwalletApp\spring\ao

Spring:AOP, 面向切面编程

AOP概述 什么是AOP, 面向切面编程 AOP为Aspect Oriented Programming的缩写, 意为:面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的延续, 是函数式编程的一种衍生范型. 利用AOP可以对业务逻辑的各个部分进行隔离, 从而使得业务逻辑各部分之间的耦合度降低, 提高程序的可重用性, 同时提高了开发的效率. - 传统开发模型: 纵向的编程.  面向切面编程: 纵横配合的编程. AOP的作用及优势 作用: 在程序运行期

java aop面向切面编程

最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html Aspect Oriented Programming  面向切面编程.解耦是程序员编码开发过程中一直追求的.AOP也是为了解耦所诞生. 具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回