Spring API接口
可以将日志记录、性能统计、安全控制、事务处理、异常处理等代码从业务逻辑代码中分离出来,放到一个非业务逻辑的方法中,进而改变这些行为的同时不影响业务逻辑代码;实现了减少重复代码以及模块间低耦合的目的,以此来达到专心处理业务逻辑代码,不用管日志记录、事务控制及权限控制等
跟着遇见狂神说Sring5的课程,实现了一下Aop
这是目录结构
首先,第一步创建环境所需的环境
UserService.java
package org.example.service;
public interface UserService {
public void Add();
public void update();
public void delete();
public void select();
}
UserServiceImpl.java
package org.example.service;
public class UserServiceImpl implements UserService{
@Override
public void Add() {
System.out.println("add方法被调用,增加了一个用户");
}
@Override
public void update() {
System.out.println("update方法被调用,修改了一个用户");
}
@Override
public void delete() {
System.out.println("delete方法被调用,删除了一个用户");
}
@Override
public void select() {
System.out.println("select方法被调用,查询全部用户");
}
}
其次,第二步书写一下日志文件执行的目标对象方法
创建Log文件的时候
记得调用这个接口
之后自动生成这个
/**
* mothod要执行的目标对象方法
* objects:参数
* target:目标对象
* @param method
* @param objects
* @param target
* @throws Throwable
*/
@Override
public void before(Method method, Object[] objects, Object target) throws Throwable {
}
创建AlterLog文件,调用这个AfterReturningAdvice接口,自动生成下面这些
public class AfterLog implements AfterReturningAdvice {
@Override
public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
}
第三步,在beans.xml内注册beans
第四步,配置aop,需要导入aop的约束本篇博客的重点
第五步,测试类测试
测试结果截图
在这里附一下,beans.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: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">
<!--注册bean-->
<bean id="userService" class="org.example.service.UserServiceImpl"/>
<bean id="log" class="org.example.log.Log"/>
<bean id="afterLog" class="org.example.log.AfterLog"/>
<!--配置aop,需要导入aop的约束-->
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* org.example.service.UserServiceImpl.*(..))"/>
<aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
<aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>
</aop:config>
</beans>