注解开发AOP
程序员文章站
2022-03-06 20:59:46
...
配置类
@Configuration//声明当前类是一个配置类,相当于一个Spring的XML配置文件
@EnableAspectJAutoProxy //表示开启AOP代理自动配置
public class LogConfigation {
}
注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogAnnotation {
String value() default "";
}
切面类
@Component
@Aspect
public class LogAspect {
//表示只要加了注解LogAnnotation的方法都是要织入的点
@Pointcut("@annotation(com.example.demo.AOP.LogAnnotation)")
public void logAspect(){
}
//在使用了注解LogAnnotation的方法执行之前执行beforeMethod
@Before("logAspect()")
public void beforeMethod(JoinPoint joinpoint)
{
System.out.println("前置通知");
System.out.println(joinpoint.getSignature().getName());
System.out.println(joinpoint.getSignature().getDeclaringType().getName());
}
}
服务接口
public interface HelloService {
String getHello();
}
服务实现类
@Service("HelloService")
public class HelloServiceImpl implements HelloService {
@Override
@LogAnnotation("f")
public String getHello() {
System.out.println("hello");
return "hello";
}
}
测试类
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringRunner.class)
@WebAppConfiguration
@SpringBootTest
@Slf4j
public class test {
@Autowired
private HelloService helloService;
@Test
public void run(){
String hello = helloService.getHello();
System.out.println(hello);
}
}