从Spring的Java文档中,web.xml通常将包含一个DelegatingFilterProxy定义,其指定的过滤器名称与Spring的根应用程序上下文中的bean名称相对应。
DelegatingFilterProxy是否使用反射来了解其对象的名称,并使用此名称来查找filterchainproxy bean的名称,从而将请求委托给正确的filterchain类?
(但是那两个同名的豆不会冲突吗?)
答案 0 :(得分:2)
DelegtaingFilterProxy是否使用反射来了解其名称 对象并使用该名称查找filterchainproxy bean的名称 从而将请求委托给正确的filterchain类?
不是。它仅查询Spring ApplicationContext
返回一个名称与<filter-name>
中配置的名称相同的bean,最后将其归结为调用:
Filter filter = applicationContext.getBean(targetBeanName, Filter.class);
在幕后,它不需要使用反射来通过bean名称获取bean,因为在内部Spring会在地图中通过其bean名称索引所有Singleton bean,因此按其名称查找bean只是一个关键从这张地图上查找。
但是然后不会有两个同名的豆发生冲突
你是对的。这就是为什么如果您定义两个具有相同名称的bean,Spring会抛出异常,并且无法启动。