Spring学习记录4

Spring学习记录4

Aop开启

什么是aop

1 面向切面(f方面)编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

个人理解就是在不修改原来代码功能的情况下,添加新的功能模块

Aop的知识点

1.连接点
2.切入点
3.增强
4.切面

连接点
class Demo {
public void func1(){}
public void func2(){}
public void fun33(){}
}

上述有3个方法,由Aop的概念可知。我们可以在不改变上述3个方法的代码的前提下增强他的功能,那可以被增强的方法就叫做连接点,所以上面有3个链接点

切入点

上面的连接点都只是理论上的可能被增强的点,如果已经实现了,那个被增强的方法,叫切入点

增强

你增加的方法,你增强切入点的方法,就叫增强,也叫通知
增强的分类
*前置
*后置
*环绕
*异常
*最终

切面

是一个动作,操作
把增强,应用到连接点的过程,叫切面

实现方式

一般配合aspectj完成使用AOP操作
*基于xml
*基于注解(推荐)

相关依赖

aspectj相关在这里插入图片描述

切入点表达式

在这里插入图片描述
权限可以省略

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如何配置

在这里插入图片描述

配置通知(增强)

package Furrain.aopanno;

import org.springframework.stereotype.Component;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName User
 * @createDate 2020/12/17 22:58
 * @see Furrain.aopanno
 */

// 被增强的类
@Component(value = "user")
public class User {
    public void add(){
        System.out.println("add");
    }
}

package Furrain.aopanno;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName UserProxy
 * @createDate 2020/12/17 23:00
 * @see Furrain.aopanno
 */

// 增强的类
@Component
@Aspect //生成代理对象
public class UserProxy {

    //前置增强
    // Before注解,表示前置通知
    @Before(value = "execution(* Furrain.aopanno.User.add(..))")
    public void before(){
        System.out.println("before.....");
    }

    @After(value = "execution(* Furrain.aopanno.User.add(..))")
    public void after(){
        System.out.println("后面输出哦");
    }
}

<?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 https://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--开启扫描-->
    <context:component-scan base-package="Furrain.aopanno"></context:component-scan>


    <!--开启aespectj生成代理对象-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

测试

package Furrain.aopanno;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName Test
 * @createDate 2020/12/17 23:11
 * @see Furrain.aopanno
 */
public class Test {
    @org.junit.Test
    public void testAopanno()
    {
        ApplicationContext context = new ClassPathXmlApplicationContext("aop/bean1.xml");
        User user = context.getBean("user",User.class);
        user.add();
    }
}

问题:这里面有个坑的一点,aop依赖的aespectj吧,感觉有版本什么的问题,自己在网上下的几个包,最后死活不行,报Unexpected AOP exception; nested exception is java.lang.IllegalStateException: Unable to load cache item
然后去下载了教程使用的jar包,就没问题了,难顶

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值