工作生活

Spring框架基于 XML 的 AOP 配置

2019-07-04  本文已影响0人  月哥说了算

第一步:创建 maven 工程并导入坐标

<dependencies>
 <dependency> 
<groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>5.0.2.RELEASE</version>
</dependency> 
<dependency>
 <groupId>org.aspectj</groupId> 
<artifactId>aspectjweaver</artifactId> 
<version>1.8.7</version>
</dependency> 
</dependencies>

第二步:准备必要的代码

/**
* 账户的业务层接口
* @author gzy
* @Company g
* @Version 1.0
*/
public interface IAccountService {
/**
* 模拟保存
*/
void saveAccount();
/**
* 模拟更新
* @param i
*/
void updateAccount(int i);
/**
* 模拟删除
* @return
*/
int deleteAccount();
}
/**
* 账户的业务层实现类
* @author gzy
* @Company g
* @Version 1.0
*/
public class AccountServiceImpl implements IAccountService {
@Override
public void saveAccount() {
System.out.println("保存了账户");
}

@Override
public void updateAccount(int i) {
System.out.println("更新了账户"+i);
}
@Override
public int deleteAccount() {
System.out.println("删除了账户");
return 0;
} }
/**
* 模拟一个用于记录日志的工具类
* @author gzy
* @Company h
* @Version 1.0
*/
public class Logger {
/**
* 用于打印日志
* 计划让其在切入点方法执行之前执行
*/
public void printLog() {
System.out.println("Logger 类中的 printLog 方法开始记录日志了。。。");
} }

第三步:创建 spring 的配置文件并导入约束

此处要导入 aop 的约束

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

第四步:配置 spring 的 ioc

<!-- 配置 service --> <bean id="accountService" class="com.service.impl.AccountServiceImpl"></bean>

第五步:配置 aop

<!--
aop 的配置步骤:
第一步:把通知类的创建也交给 spring 来管理
第二步:使用 aop:config 标签开始 aop 的配置
第三步:使用 aop:aspect 标签开始配置切面,写在 aop:config 标签内部
id 属性:给切面提供一个唯一标识
ref 属性:用于引用通知 bean 的 id。
第四步:使用对应的标签在 aop:aspect 标签内部配置通知的类型
使用 aop:befored 标签配置前置通知,写在 aop:aspect 标签内部
method 属性:用于指定通知类中哪个方法是前置通知
pointcut 属性:用于指定切入点表达式。
切入点表达式写法:
关键字:execution(表达式)
表达式内容:
全匹配标准写法:
访问修饰符 返回值 包名.包名.包名...类名.方法名(参数列表)
例如:
public void com.service.impl.AccountServiceImpl.saveAccount()
-->
<!-- 配置通知类 --> <bean id="logger" class="com.utils.Logger"></bean>
<!-- 配置 aop --> <aop:config>
<!-- 配置切面 --> <aop:aspect id="logAdvice" ref="logger">
<!-- 配置前置通知 --> <aop:before method="printLog" pointcut="execution( * 
com.service.impl.*.*(..))"/>
</aop:aspect>
</aop:config>
上一篇下一篇

猜你喜欢

热点阅读