gpt4 book ai didi

java - Spring AOP - 代理从方法返回的对象

转载 作者:行者123 更新时间:2023-12-01 06:06:16 26 4
gpt4 key购买 nike

在此示例中:

public class ConnectionPool {
public java.sql.Connection getConnection() {
...
}
}

@Bean
@Scope("singleton")
public ConnectionPool connectionPool(...) throws Exception {
return new ConnectionPoolImpl(...);
}

我想监视从 getConnection() 返回的 Connection 对象上对 java.sql.Connection.close() 的调用。

我尝试将 @Lookup 添加到 getConnection() 方法,但没有效果。

如何让 Spring 代理 java.sql.Connection 对象?

最佳答案

您可以为ConnectionPool创建代理并在bean创建方法中返回代理

@Bean
@Scope("singleton")
public ConnectionPool connectionPool(...) throws Exception {
ConnectionPoolImpl delegate = new ConnectionPoolImpl(...);
ConnectionPoolCallHandler callHandler = new ConnectionPoolCallHandler(delegate);
ConnectionPool proxy = Proxy.newProxyInstance(
ConnectionPool.getClass().getClassLoader(),
new Class[]{ConnectionPool.class},
callHandler);

// return new ConnectionPoolImpl(...);
return proxy;
}

public class ConnectionPoolCallHandler implements InvocationHandler {
private ConnectionPoolImpl delegate;
public ConnectionPoolCallHandler(ConnectionPoolImpl delegate) {
this.delegate=delegate;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//all invoked methods should call
//appropriate methods of delegate passing all parameters
//plus your additional tracking logic here
}
}

关于java - Spring AOP - 代理从方法返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43983439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com