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包,就没问题了,难顶