委派过滤器代理如何知道要调用哪个过滤器来委派 doFilter 调用?



来自Spring的Java文档,web.xml通常包含一个DelegatingFilterProxy定义,指定的过滤器名称对应于Spring根应用程序上下文中的bean名称。

DemissionatingFilterProxy 是否使用反射来知道其对象的名称,并使用此名称查找 filterchainproxy bean 的名称,从而将请求委托给正确的 filterchain 类?

(但是两个同名的豆子不会导致冲突吗?

DelegtaingFilterProxy 是否使用反射来知道它的名称 对象并使用此名称查找过滤器链代理 Bean 的名称 从而将请求委托给正确的过滤器链类?

没有。它只是查询 SpringApplicationContext返回一个 bean,其名称与<filter-name>中配置的名称相同,最终归结为调用:

Filter filter = applicationContext.getBean(targetBeanName, Filter.class);

在幕后,它不需要使用反射来按豆名获取一个豆,因为内部 Spring 会在地图中按豆名索引所有单例豆。因此,通过名称查找豆子只是从这张地图中查找的关键。

但是,两个同名的豆子不会发生冲突

吗?

你是对的。这就是为什么如果你定义两个同名的 bean,Spring 会抛出异常并且它无法启动。

最新更新