Hibernate AOP 拦截 SessionFactory.openSession() 方法问题
问题可能出在切点表达式上。根据 Hibernate 的官方文档,SessionFactoryImpl.SessionBuilderImpl 是一个内部类,因此可能无法被 AOP 拦截到。建议使用 org.hibernate.SessionFactory 接口的 openSession() 方法作为切点表达式。同时,需要确保该切面类被正确声明为一个 Bean,且被扫描到。
@Pointcut('execution(* org.hibernate.SessionFactory.openSession(..))') public void openSession() {}
@AfterReturning(pointcut = 'openSession()', returning = 'session') public void afterOpenSession(Object session) { if (session instanceof Session s) { FilterBean filterBean = GlobalFilterContext.getFilterBean(); if (filterBean != null && GlobalFilterContext.isFilter()) { setFilter(s, 'servicerFilter', 'servicerId', filterBean.getServicerId()); setFilter(s, 'tenantFilter', 'tenantId', filterBean.getTenantId()); setFilter(s, 'communityFilter', 'communityIds', filterBean.getCommunityIds()); } } }
原文地址: https://www.cveoy.top/t/topic/oKOQ 著作权归作者所有。请勿转载和采集!