Fix TcpConnectionFactory FactoryBean

- bean factory and application context were not injected
- `afterPropertiesSet()` was not called

**cherry-pick to all supported branches**

# Conflicts:
#	spring-integration-ip/src/main/java/org/springframework/integration/ip/config/TcpConnectionFactoryFactoryBean.java
This commit is contained in:
Gary Russell
2019-11-20 14:23:29 -05:00
committed by Artem Bilan
parent 0cbea82946
commit cb8b4bca52

View File

@@ -18,10 +18,11 @@ package org.springframework.integration.ip.config;
import java.util.concurrent.Executor;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.context.Lifecycle;
@@ -58,7 +59,7 @@ import org.springframework.util.Assert;
* @since 2.0.5
*/
public class TcpConnectionFactoryFactoryBean extends AbstractFactoryBean<AbstractConnectionFactory>
implements Lifecycle, BeanNameAware, BeanFactoryAware, ApplicationEventPublisherAware {
implements Lifecycle, BeanNameAware, ApplicationEventPublisherAware, ApplicationContextAware {
private volatile AbstractConnectionFactory connectionFactory;
@@ -76,7 +77,7 @@ public class TcpConnectionFactoryFactoryBean extends AbstractFactoryBean<Abstrac
private volatile boolean soTcpNoDelay;
private volatile int soLinger = -1; // don't set by default
private volatile int soLinger = -1; // don't set by default
private volatile boolean soKeepAlive;
@@ -126,7 +127,8 @@ public class TcpConnectionFactoryFactoryBean extends AbstractFactoryBean<Abstrac
private volatile ApplicationEventPublisher applicationEventPublisher;
private volatile BeanFactory beanFactory;
private ApplicationContext applicationContext;
public TcpConnectionFactoryFactoryBean() {
@@ -137,23 +139,23 @@ public class TcpConnectionFactoryFactoryBean extends AbstractFactoryBean<Abstrac
}
@Override
public final void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public Class<?> getObjectType() {
return this.connectionFactory != null ? this.connectionFactory.getClass() :
this.type == null ? AbstractConnectionFactory.class :
isServer() ? AbstractServerConnectionFactory.class :
isClient() ? AbstractClientConnectionFactory.class :
AbstractConnectionFactory.class;
this.type == null ? AbstractConnectionFactory.class :
isServer() ? AbstractServerConnectionFactory.class :
isClient() ? AbstractClientConnectionFactory.class :
AbstractConnectionFactory.class;
}
@Override
protected AbstractConnectionFactory createInstance() throws Exception {
if (!this.mapperSet) {
this.mapper.setBeanFactory(this.beanFactory);
this.mapper.setBeanFactory(getBeanFactory());
}
if (this.usingNio) {
if (isServer()) {
@@ -194,6 +196,11 @@ public class TcpConnectionFactoryFactoryBean extends AbstractFactoryBean<Abstrac
this.connectionFactory = connectionFactory;
}
}
this.connectionFactory.setBeanFactory(getBeanFactory());
if (this.applicationContext != null) {
this.connectionFactory.setApplicationContext(this.applicationContext);
}
this.connectionFactory.afterPropertiesSet();
return this.connectionFactory;
}