spring应用手册-AOP(注解)-(13)-@Pointcut的表达式-@target

本文详细解析了Spring AOP中的@Target注解如何匹配带有指定注解的类,以及在自定义注解和实际应用中的注意事项。通过实例演示,展示了如何仅针对带有自定义DkAnnotation的BookService类执行切面逻辑。
摘要由CSDN通过智能技术生成

戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注

@Pointcut的表达式-@target

spring应用手册(第三部分)

限制与连接点的匹配(使用 Spring AOP 时执行方法),其中执行 object 的 class 具有给定类型的 annotation。

我的解释就是:@target会匹配所有拥有@target指定注解类型的目标类。  注意是目标类,注解在接口和方法上面是无效的。

如果还不明白就看我的案例。

官方案例:

目标 object 具有@Transactional annotation 的任何连接点(仅在 Spring AOP 中执行方法):
@target(org.springframework.transaction.annotation.Transactional)

我们的案例:

我们自定义一个注解:
@Retention(RetentionPolicy.RUNTIME)
public @interface DkAnnotation {
}

在我们的BookService实现类上添加注解,注意是添加在实现类上,并不是接口和方法上。

/**
 * @author 戴着假发的程序员
 * 
 * @description
 */
@Component
@DkAnnotation //我自己定义的注解,当然也可以使用其他注解
public class BookService{
    @Override
    public void saveBook(String title){
        System.out.println("保存图书:"+title);
    }
    public void saveBook(String title,int count){
        System.out.println("保存"+title+","+count+"次");
    }
}

在Aspect类中添加pointcut配置:

/**
 * @author 戴着假发的程序员
 * 
 * @description
 */
@Component //将当前bean交给spring管理
@Aspect //定义为一个AspectBean
public class DkAspect {
    //使用@Target配置有DkAnnotation注解的目标类
    @Pointcut("@target(com.st.dk.demo7.annotations.DkAnnotation)")
    private void pointCut1(){}
    //定义一个前置通知
    @Before("pointCut1()")
    private static void befor(){
        System.out.println("---前置通知---");
    }
}

测试:

@Test
public void testAopPoint_Target(){
    ApplicationContext ac =
            new AnnotationConfigApplicationContext(Appconfig.class);
    BookService bean = ac.getBean(BookService.class);
    bean.saveBook("论一个假发程序员的修养");
    bean.saveBook("java从入门到颈椎康复之路",10);
}

结果:
在这里插入图片描述
我们会发现我们的方法全部被增强了。

再次提醒:@target只是对目标类的注解生效,对接口和方法的注解是不生效的。对其子类也不生效。

我们让BooService实现接口IBookService,然后再IBookServie接口上添加注解@DkAnnotation,或者在某个方法上添加注解@DkAnnotion,都不会被匹配。如果只在父类上添加了注解,子类不添加注解,则子类的任何方法也不会被匹配。 这个我们这里就暂时不测试,你可以自己测试以下。

如果还没明白,建议查看视频讲解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴着假发的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值