【发布时间】:2017-01-02 22:48:29
【问题描述】:
旧的 spring XML 配置工作正常,我的 Aspect 调用每个人 getconnection Invoke:
<bean id="connectionInterceptor" class="mypackage.ConnectionAspect">
</bean>
<aop:config>
<aop:aspect id="connectionLifecycleAspect" ref="connectionInterceptor">
<aop:pointcut
expression="execution(java.sql.Connection javax.sql.DataSource.getConnection(..)) "
id="dataSourceGetConnection" />
<aop:around method="aroundGetConnection" pointcut-ref="dataSourceGetConnection" />
</aop:aspect>
</aop:config>
我的 java 类围绕获取连接
public class ConnectionAspect implements Serializable {
private final static Logger logger = Logger.getLogger(ConnectionAspect.class);
public Connection aroundGetConnection(ProceedingJoinPoint joinPoint) throws Throwable {
Connection connection = (Connection) joinPoint.proceed();
setSessionUser(connection);
return connection;
}
Spring boot 不起作用,当我调用 get Connection 时没有调用任何方法。 但是 spring service aop demo 正在运行。
@Component
@Aspect
public class ConnectionAspect implements Serializable {
@AfterReturning(pointcut = "execution(* javax.sql.DataSource.getConnection(..))", returning = "connection")
public Connection setClientIdentifier(Connection connection)
throws SQLException {
System.out
.println("-----------------------------------------------------------------------");
return connection;
}
@Pointcut("execution(java.sql.Connection javax.sql.DataSource.getConnection(..))")
public void aroundConnection() {
}
@Around("aroundConnection()")
public Object aroundConnection2(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Completed: " + joinPoint);
return joinPoint.proceed();
}
@Around("execution(java.sql.Connection javax.sql.DataSource.getConnection(..))")
public Object aroundConnection3(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("Completed: " + joinPoint);
return joinPoint.proceed();
}
}
【问题讨论】:
-
(1) 这对我来说是不可理解的:“Spring boot 不起作用,当我调用 get Connection 时没有调用任何方法。”请解释:什么不起作用?哪个方法没有被调用?有任何错误信息吗? (2) 你有没有注意到这里有两个类名完全相同的类/方面?这可能是问题吗? (3) 应用程序是否从您的文件中提取了包含 AOP 配置的任何其他 XML 配置? (4) 如果您将
aroundGetConnection(..)更改为具有完全相同的签名(返回类型!)和内容,例如aroundConnection2()?
标签: spring spring-boot datasource spring-aop