简单记录下
在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; }
只能自己处理下判断了
乐享:知识积累,快乐无限。