1.添加包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.添加aop.xml
<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
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- dao 实例 -->
<bean id="userService" class="com.stude.aop.aspect.UserXml"></bean>
<!-- 切面类 -->
<bean id="aop" class="com.stude.aop.aspect.AopXmlAspect"></bean>
<!-- Aop配置 -->
<aop:config>
<!-- 定义一个切入点表达式: 拦截哪些方法 -->
<aop:pointcut expression="execution(* com.stude.aop.aspect.UserXml.*(..))"
id="pt"/>
<!-- 切面 -->
<aop:aspect ref="aop">
<!-- 环绕通知 -->
<aop:around method="around" pointcut-ref="pt"/>
<!-- 前置通知: 在目标方法调用前执行 -->
<aop:before method="begin" pointcut-ref="pt"/>
<!-- 后置通知: -->
<aop:after method="commit" pointcut-ref="pt"/>
<!-- 返回后通知 -->
<aop:after-returning method="returning"
pointcut-ref="pt"/>
<!-- 异常通知 -->
<aop:after-throwing method="afterThrowing"
pointcut-ref="pt"/>
</aop:aspect>
</aop:config>
</beans>
3.切面类
/**
* Created on 2019/4/5.
*
* @author Grak
* @since 1.0
*/
public class AopXmlAspect {
// 前置通知
public void begin() {
System.out.println("前置通知");
}
//
// 后置通知
public void commit() {
System.out.println("后置通知");
}
// 运行通知
public void returning() {
System.out.println("运行通知");
}
// 异常通知
public void afterThrowing() {
System.out.println("异常通知");
}
// 环绕通知
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("环绕通知开始");
proceedingJoinPoint.proceed();
System.out.println("环绕通知结束");
}
}
4、实例方法
/**
* Created on 2019/4/5.
*
* @author Grak
* @since 1.0
*/
@Component
public class UserXml {
public void add(String message) {
System.out.println("执行UserXml添加方法:" + message);
}
}
@ImportResource("classpath:aop.xml")
@SpringBootApplication
public class AopApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(AopApplication.class, args);
//AopXmlAspect执行
UserXml user = (UserXml) ctx.getBean("userXml");
user.add("sssss");
}
}