其他分享
首页 > 其他分享> > 2021-11-04aop的实现方法

2021-11-04aop的实现方法

作者:互联网

在spring中可以通过那些方法来实现动态代理


学习aop之前需要理解动态代理的过程与实现

aop主要还是学一个思想 在不影响原本业务的前提下 来实现业务的增强 也就是横向编程 在企业里面 千万不要随意去改动原有的代码 如果要来实现业务的扩充 我们就可以用到这里的思想 。

一、方法一(xml来实现)

前置信息 首先需要知道一些名词

切面 简单来说就是你需要增强的业务的类 比如你需要加一个日志功能在注册之前 那么 这个添加日志功能的类便是这个切面 。

通知 通知就是添加日志的这个方法 就是用来增强业务的简写

切入点 指的就是具体要在哪里加入这个增强方法比如在注册之前 那么切入点就是注册的这个方法

示例:正常流程是先 有一个类 类实现了接口的方法 实例化这个类 再调用这个类里面的add方法 但是这里我们有一个切面 切面里面有两个通知 再调用add方法的时候 我们先会去调用切面的通知 把他放到切入点那里从而实现aop

具体的样子就看下面的这个注解的代码

    <bean id="user" class="UserServerImpl"/>
    <bean id="log" class="Log"/>
    <bean id="userServer" class="UserServerImpl"/>

<!--    一定要记得开启注解的支持-->
    <aop:aspectj-autoproxy/>
  <aop:config>
<!--        这是aop的第二种实现方法-->
<!--        config里面是对这些aop的配置-->
        <aop:aspect ref="log" >
<!--            这里配置的是切面 就是切入进去的东西 需要做的事情-->
            <aop:pointcut id="point" expression="execution(* UserServerImpl.*(..))"/>
<!--            这里是切入的点  指的是具体在哪个方法来调用这个通知-->
            <aop:before method="before" pointcut-ref="point"/>
<!--            这里就开始调用切面的方法了  在哪里调用 调用什么方法都是通过这个来实现的-->
            <aop:after method="after" pointcut-ref="point"/>
        </aop:aspect>
    </aop:config>

这样的话就可以实现业务的增强

二、使用注解来进行增强

这个比较简单 只需要记住几个注解 还有使用的地方

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect//标注这个类是一个切面
public class Log {

    @Before("execution(* UserServer.*(..))")  这里的注解表示的是我们的通知是在切入点之前还是切入点之后
    public void before(){
        System.out.println("========输出之前的==============");
    }
    public void after(){
        System.out.println("========输出之后的==============");
    }
}

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AOPtest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//        1.这里通过beans.xml来取到context上下文配置
        UserServer user = (UserServer) context.getBean("userServer");
//        我们的spring取到的是这个类的接口 也就是我们管理的其实是这个代理而不是这个类
//        通过上下文配置取到里面的接口类
        user.del();
    }
}

三丶总结

springAOP由此看来并不是很难 其中的思想还是十分精髓 横向开发 利用动态代理和反射 来实现把类的功能进行扩充 代理模式是把 房东的主动权交给了第三方代理 代理来实现租房的方法并对功能进行扩充 那么我们spring也是 自己有了一个代理 我们把类和接口交给了这个代理 代理便自动的接管 顺便实现了扩充功能。

标签:11,实现,切入点,代理,04aop,切面,方法,public,2021
来源: https://blog.csdn.net/q584401071/article/details/121144927