编程方式使用aop
添加aop依赖
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.8</version>
</dependency>
编写一个方法类
public class User {
public void a() {
System.out.println("a.....");
}
public void b() {
System.out.println("b.....");
}
}
写一个代理类
@Repository
@Aspect
public class Log {
//在注解的情况下不能同时使用 before生效 after不生效
@After("execution(public * *..User.*(..))")
@Before("execution(public * *..User.*(..))")
public void init() {
System.out.println("init....");
}
}
spring配置类
@Configuration
@ComponentScan("cn.chenxiejia")
//启用aop代理
@EnableAspectJAutoProxy
public class AppConfig {
@Bean
public User u() {
return new User();
}
public Log l() {
return new Log();
}
}
测试类
public class App {
public static void main(String[] args) {
var app = new AnnotationConfigApplicationContext(AppConfig.class);
User user = app.getBean("u", User.class);
user.a();
}
}
测试结果
配置方式使用aop
配置文件applicaltionContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<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" xmlns="http://www.springframework.org/schema/beans"
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="cn.chenxiejia.entity"/>
<bean name="user" class="cn.chenxiejia.entity.User"/>
<bean name="log" class="cn.chenxiejia.entity.log"/>
<aop:config>
<!--第一个*表示返回值类型 第二个*表示包名 ..表示当前包及子包 -->
<!--在User类使用方法时添加执行新的方法-->
<aop:pointcut id="p1" expression="execution(public * *..User.*(..))"/>
<aop:pointcut id="p2" expression="execution(public * *..User.*(..))"/>
<!--添加执行的方法-->
<aop:aspect ref="log">
<aop:after method="init" pointcut-ref="p2"/>
</aop:aspect>
<aop:aspect ref="log">
<aop:before method="init" pointcut-ref="p1"/>
</aop:aspect>
</aop:config>