AOP within表达式不生效

首先看Aspect的代码

@Pointcut("within(com.davidhu.shopguide.admin.mapper..*) + " || within(com.davidhu.shopguide..*.impl..*)"
" ) public void applicationPackagePointcut() { // Method is empty as this is just a Pointcut, the implementations are in the // advices. }

需要被advice执行的方法

复制代码
public interface CrawlItemMapper extends BaseMapper<CrawlItem> {
    @Delete("delete from crawl_items where DATEDIFF(now(),item_create_time) > 4")
    int deleteHistoryItems();


    @Select("select id,goods_source_sn,goods_info_url,source,url_code," +
            "thumb_url,zhi_count,buzhi_count,star_count,comments_count,mall,title,emphsis,detail,detail_brief," +
            "label,category_text,item_create_time,item_update_time,main_image_url,big_image_urls,small_image_urls," +
            "price_text,price,unit_price,actual_buy_link,transfer_link,transfer_result,transfer_remark,coupon_info,taobao_pwd," +
            "score,score_minute,keywords,status,remark,creator," +
            "creator_id,last_operator,last_operator_id from crawl_items where TIMESTAMPDIFF(HOUR,item_create_time,now()) > 24")
    List<CrawlItem> getItemsAfter24Hours();

    @Select("select id, goods_source_sn,goods_info_url,source,url_code," +
            "thumb_url,zhi_count,buzhi_count,star_count,comments_count,mall,title,emphsis,detail,detail_brief," +
            "label,category_text,item_create_time,item_update_time,main_image_url,big_image_urls,small_image_urls," +
            "price_text,price,unit_price,actual_buy_link,transfer_link,transfer_result,transfer_remark,coupon_info,taobao_pwd," +
            "score,score_minute,keywords,status,remark,creator," +
            "creator_id,last_operator,last_operator_id from crawl_items_48h where TIMESTAMPDIFF(HOUR,item_create_time,now()) > 48")
    List<CrawlItem48h> getItemsAfter48Hours();

    @Select("select id, goods_source_sn,goods_info_url,url_code,thumb_url,zhi_count,buzhi_count,star_count,comments_count,mall,title,emphsis,detail,detail_brief," +
            "label,category_text,item_create_time,item_update_time,main_image_url,big_image_urls,price_text,actual_buy_link,transfer_link," +
            "taobao_pwd,transfer_result,transfer_remark,coupon_info,score,score_minute,keywords,status,remark from crawl_items where url_code=#{urlCode} for update")
    CrawlItem getItemByUrlCodeForUpdate(@Param("urlCode") String urlCode);

    @Select("select goods_info_url from crawl_items where status=1 order by score_minute desc, id desc limit 0,40")
    List<String> getFirstRecrawlItems();
}
复制代码

service方法

        CrawlItem item = crawlItemMapper.getItemByUrlCodeForUpdate(code);

不知为何crawlItemMapper的方法无法触发advice,但servie方法就可以。

如果把within改成execution就没问题

    /**
     * Pointcut that matches all Spring beans in the application's main packages.
     */
    @Pointcut("execution(* com.davidhu.shopguide.admin.mapper.CrawlItemMapper.*(..))" )
    public void applicationPackagePointcut() {
        // Method is empty as this is just a Pointcut, the implementations are in the
        // advices.
    }

 

根据文档,对within和execution的解释是这样(https://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html)

execution(MethodPattern)Picks out each method execution join point whose signature matches MethodPattern.

within(TypePattern)Picks out each join point where the executing code is defined in a type matched by TypePattern.

看起来没有什么问题,我猜是由于mybatisplus对CrawlItemMapper的处理造成的,问题还未知。

 

posted @   zjhgx  阅读(458)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示