在 UserCredentialsConnectionFactoryAdapter 中设置 targetConnectionFactory 时出错 Spring 4
Error while setting targetConnectionFactory in UserCredentialsConnectionFactoryAdapter Spring 4
我们在尝试设置 targetConnectionFactory 时收到以下代码中的编译错误。
根据Spring 4 documentation中给出的UserCredentialsConnectionFactoryAdapter的例子,setTargetConnectionFactory()方法将JndiObjectFactoryBean的对象作为参数。但是,看起来 JndiObjectFactoryBean 没有实现 'ConnectionFactory' 接口,这应该是这个 set 方法的参数。
这是 Spring 4 的错误吗?如果 JndiObjectFactoryBean 对象不能设置为 targetConnectionFactory ,那么在它的位置可以使用什么?
JndiObjectFactoryBean theJndiObjectFactoryBean = new JndiObjectFactoryBean();
theJndiObjectFactoryBean.setJndiTemplate(getJNDITemplate());
theJndiObjectFactoryBean.setJndiName(jndiConnectionFactoryName);
UserCredentialsConnectionFactoryAdapter theUserCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
theUserCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(theJndiObjectFactoryBean);
您的代码与示例之间的最大区别在于 XML 配置示例中,myTargetConnectionFactory 实际上是由 Spring 管理的 bean。你没有那样做。您只是在创建一个 Spring 不知道的新对象。当设置 myConnectionFactory 的 targetConnectionFactory 时,奇迹就发生了。尽管它 看起来 像 JndiObjectFactoryBean 类型,Spring 实际上是注入由工厂 bean 创建的底层 connectionFactory。
java 配置等效项是您创建一个 @Bean,该 @Bean returns JndiObjectFactoryBean 和另一个具有另一个依赖于 ConnectionFactory 的 UserCredentialsConnetionFactoryAdapter 的 bean。
我在尝试从 XML 配置转换为 beans 时遇到了一个非常相似的问题,并且
我在评论中找到了正确的答案(谢谢!),但不够清楚。
要处理不匹配,您需要从 JndiObjectFactoryBean 获取对象并将其转换为适当的类型。
connectionFactory.setTargetConnectionFactory((ConnectionFactory)targetConnectionFactory.getObject());
我们在尝试设置 targetConnectionFactory 时收到以下代码中的编译错误。
根据Spring 4 documentation中给出的UserCredentialsConnectionFactoryAdapter的例子,setTargetConnectionFactory()方法将JndiObjectFactoryBean的对象作为参数。但是,看起来 JndiObjectFactoryBean 没有实现 'ConnectionFactory' 接口,这应该是这个 set 方法的参数。
这是 Spring 4 的错误吗?如果 JndiObjectFactoryBean 对象不能设置为 targetConnectionFactory ,那么在它的位置可以使用什么?
JndiObjectFactoryBean theJndiObjectFactoryBean = new JndiObjectFactoryBean();
theJndiObjectFactoryBean.setJndiTemplate(getJNDITemplate());
theJndiObjectFactoryBean.setJndiName(jndiConnectionFactoryName);
UserCredentialsConnectionFactoryAdapter theUserCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
theUserCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(theJndiObjectFactoryBean);
您的代码与示例之间的最大区别在于 XML 配置示例中,myTargetConnectionFactory 实际上是由 Spring 管理的 bean。你没有那样做。您只是在创建一个 Spring 不知道的新对象。当设置 myConnectionFactory 的 targetConnectionFactory 时,奇迹就发生了。尽管它 看起来 像 JndiObjectFactoryBean 类型,Spring 实际上是注入由工厂 bean 创建的底层 connectionFactory。
java 配置等效项是您创建一个 @Bean,该 @Bean returns JndiObjectFactoryBean 和另一个具有另一个依赖于 ConnectionFactory 的 UserCredentialsConnetionFactoryAdapter 的 bean。
我在尝试从 XML 配置转换为 beans 时遇到了一个非常相似的问题,并且 我在评论中找到了正确的答案(谢谢!),但不够清楚。
要处理不匹配,您需要从 JndiObjectFactoryBean 获取对象并将其转换为适当的类型。
connectionFactory.setTargetConnectionFactory((ConnectionFactory)targetConnectionFactory.getObject());