方法一:spring接口实现
配置文件
<?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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
">
<context:annotation-config/>
<!-- 注册bean-->
<bean id="log" class="com.kuang.log.log"></bean>
<bean id="afterlog" class="com.kuang.log.Afterlog"></bean>
<bean id="userService" class="com.kuang.service.UserServiceimpl"></bean>
<!-- 配置aop-->
<aop:config>
<!-- 切入点 expression是表达式-->
<aop:pointcut id="pointcut" expression="execution(* com.kuang.service.UserServiceimpl.*(..))"/>
<!-- 执行环绕增强-->
<aop:advisor advice-ref="log" pointcut-ref="pointcut"></aop:advisor>
<aop:advisor advice-ref="afterlog" pointcut-ref="pointcut"></aop:advisor>
</aop:config>
</beans>
切面添加前面
package com.kuang.log;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class log implements MethodBeforeAdvice {
//Method:要执行对象的方法
//orgs:参数
//terget:目标对象
public void before(Method method, Object[] orgs, Object terget) throws Throwable {
System.out.println(terget.getClass().getName()+"的"+method.getName()+"被执行了");
}
}
切面添加后面
package com.kuang.log;
import org.springframework.aop.AfterReturningAdvice;
import java.lang.reflect.Method;
public class Afterlog implements AfterReturningAdvice {
//returnValue 返回值
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("执行了"+method.getName()+"方法,返回结果为:"+returnValue);
}
}
方法二:自定义类(主要是切面定义)
方式三:注解