GatewayProxyFactoryBean 源码分析
时间: 2023-07-01 17:09:56 浏览: 210
Proxy源代码分析
`GatewayProxyFactoryBean` 是 Spring Cloud Gateway 的核心组件之一,它的作用是根据用户定义的配置信息创建一个网关代理对象。下面对其源码进行分析。
1. 继承关系
`GatewayProxyFactoryBean` 继承自 `AbstractGatewayProxyFactoryBean` 类,该类实现了 `FactoryBean` 接口和 `BeanFactoryAware` 接口:
```java
public abstract class AbstractGatewayProxyFactoryBean<T extends WebFluxGatewaySupport> implements FactoryBean<T>, BeanFactoryAware {
// ...
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
// ...
}
```
2. 配置属性
`GatewayProxyFactoryBean` 类中定义了多个配置属性,这些属性用于配置网关代理对象的行为。例如,`routes` 属性用于配置路由规则,`filters` 属性用于配置过滤器规则,`properties` 属性用于配置额外的属性等。
```java
public class GatewayProxyFactoryBean extends AbstractGatewayProxyFactoryBean<WebFluxGatewaySupport> {
private List<RouteDefinition> routes = new ArrayList<>();
private List<GatewayFilterDefinition> filters = new ArrayList<>();
private Map<String, Object> properties = new HashMap<>();
// ...
public void setRoutes(List<RouteDefinition> routes) {
this.routes = routes;
}
public void setFilters(List<GatewayFilterDefinition> filters) {
this.filters = filters;
}
public void setProperties(Map<String, Object> properties) {
this.properties = properties;
}
// ...
}
```
3. getObject() 方法
`GatewayProxyFactoryBean` 中最重要的方法就是 `getObject()` 方法,它用于创建一个网关代理对象。具体实现如下:
```java
@Override
public WebFluxGatewaySupport getObject() throws Exception {
// 创建一个 WebFluxGatewaySupport 对象
WebFluxGatewaySupport gateway = new WebFluxGatewaySupport();
// 设置路由规则
if (!CollectionUtils.isEmpty(this.routes)) {
gateway.setRoutes(this.routes);
}
// 设置过滤器规则
if (!CollectionUtils.isEmpty(this.filters)) {
gateway.setFilters(this.filters);
}
// 设置额外的属性
if (!CollectionUtils.isEmpty(this.properties)) {
gateway.setProperties(this.properties);
}
// 初始化
gateway.afterPropertiesSet();
return gateway;
}
```
在 `getObject()` 方法中,首先创建了一个 `WebFluxGatewaySupport` 对象,并根据用户的配置信息设置了路由规则、过滤器规则和额外的属性。最后调用 `afterPropertiesSet()` 方法进行初始化并返回创建的网关代理对象。
4. 总结
`GatewayProxyFactoryBean` 是 Spring Cloud Gateway 的核心组件之一,它通过用户配置信息创建一个网关代理对象。在它的实现中,通过继承 `AbstractGatewayProxyFactoryBean` 类,实现了 `FactoryBean` 接口和 `BeanFactoryAware` 接口,并定义了多个配置属性。最重要的方法是 `getObject()` 方法,它用于创建一个网关代理对象,并根据用户的配置信息进行初始化。
阅读全文