一、Spring AOP概述
1、AOP含义
AOP: Aspect-Oriented Programming (面向切面编程)
2、AOP作用
Spring的AOP作用在于解耦。AOP让一组类共享相同的行为(比如事务管理、日志管理、安全管理)。OOP(Object-Oriented Programming)只能通过继承类或实现接口来增加代码的耦合度,而且类继承是单根继承(不允许一子多父),阻碍了将更多的行为添加到一组类上,此时AOP可以弥补OOP的不足。
3、AOP与OOP
AOP(Aspect-Oriented Programming)—— 横向的关系
OOP(Object-Oriented Programming)—— 纵向的关系
4、AOP使用方式
Spring里有两种方式使用AOP:(1)配置方式;(2)注解方式
二、采用配置方式使用AOP
1、在net.wz.spring包里创建lesson05.aop_xml子包
2、在aop_xml子包里创建杀龙任务类 - SlayDragonQuest
package net.wz.spring.lesson05.aop_xml;
import org.springframework.stereotype.Component;
/**
* 功能:杀龙任务类
* 作者:吴钊
* 日期:2021年03月24日
*/
@Component
public class SlayDragonQuest {
public void embark() {
System.out.println("执行杀龙任务。");
}
}
3、在aop_xml子包里创建勇敢骑士类 - BraveKnight
package net.wz.spring.lesson05.aop_xml;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 功能:勇敢骑士类
* 作者:吴钊
* 日期:2021年03月24日
*/
@Component
public class BraveKnight {
@Autowired
private SlayDragonQuest slayDragonQuest;
public void embarkOnQuest() {
slayDragonQuest.embark();
}
}
4、在aop_xml子包里创建游吟诗人类 - Minstrel
package net.wz.spring.lesson05.aop_xml;
import org.springframework.stereotype.Component;
/**
* 功能:游吟诗人类
* 作者:吴钊
* 日期:2021年03月24日
*/
@Component
public class Minstrel {
public void singBeforeQuest() {
System.out.println("啦啦啦,骑士出发了!");
}
public void singAfterQuest() {
System.out.println("真棒啊!骑士完成了任务!");
}
}
5、创建Spring配置文件
在resources里创建aop_xml目录,在里面创建spring-config.xml配置文件
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://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="net.wz.spring.lesson05.aop_xml" />
<!--AOP配置-->
<aop:config>
<!--定义切面-->
<aop:aspect ref="minstrel">