简单记录下

在springCloud集成ActiveMq的过程中。为了自己控制连接。需自定义类注册PooledConnectionFactory
但是在@Configuration 配置bean的时候

发现注入的ConnectionFactory最终都被转为了LazyTopicConnectionFactory
查看LazyTopicConnectionFactory类发现,该类中实现了BeanPostProcessor

并且重写了postProcessAfterInitialization这个方法,将ConnctionFactory的类均转为了LazyTopicConnectionFactory 进行返回,造成最终获取的bean类型不正确。


下面这个

else if (bean instanceof TopicConnectionFactory) {
return new LazyTopicConnectionFactory(this.beanFactory,
(TopicConnectionFactory) bean);
}





@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
// Wrap the caching connection factories instead of its target, because it catches
// callbacks
// such as ExceptionListener. If we don't wrap, cached callbacks like this won't
// be traced.
if (bean instanceof CachingConnectionFactory) {
return new LazyConnectionFactory(this.beanFactory,
(CachingConnectionFactory) bean);
}
if (bean instanceof JmsMessageEndpointManager) {
JmsMessageEndpointManager manager = (JmsMessageEndpointManager) bean;
MessageListener listener = manager.getMessageListener();
if (listener != null) {
manager.setMessageListener(
new LazyMessageListener(this.beanFactory, listener));
}
return bean;
}
if (bean instanceof XAConnectionFactory && bean instanceof ConnectionFactory) {
return new LazyConnectionAndXaConnectionFactory(this.beanFactory,
(ConnectionFactory) bean, (XAConnectionFactory) bean);
}
// We check XA first in case the ConnectionFactory also implements
// XAConnectionFactory
else if (bean instanceof XAConnectionFactory) {
return new LazyXAConnectionFactory(this.beanFactory,
(XAConnectionFactory) bean);
}
else if (bean instanceof TopicConnectionFactory) {
return new LazyTopicConnectionFactory(this.beanFactory,
(TopicConnectionFactory) bean);
}
else if (bean instanceof ConnectionFactory) {
return new LazyConnectionFactory(this.beanFactory, (ConnectionFactory) bean);
}
return bean;
}

只能自己处理下判断了


乐享:知识积累,快乐无限。