我有以下定义:
<bean id="myInterceptor" class="info.fastpace.MyInterceptor"/>
<bean id="alikProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="myClass"/>
<property name="interceptorNames">
<list>
<value>myInterceptor</value>
</list>
</property>
</bean>
我定义了2个类:MyInterceptor
和MyClass
。
奇怪的是,Spring知道在调用类MyClass
(大写M)之前调用拦截器,即使类没有在commonContext.xml文件中配置。唯一的提示是代理bean定义中的myClass
(小写m)。
删除alikProxy bean定义时,不会调用拦截器。
Spring如何知道使用未定义 MyClass
参考来调用myClass
的拦截器?
答案 0 :(得分:1)
看起来您定义了一个类MyClass
的bean,但没有明确地给它任何名称,因此Spring只根据类名myClass
给它一个默认名称MyClass
。
<强>更新强>
我想在你的Spring上下文xml中你有<context:component-scan>
元素。
以下是图书Spring In Action, 3rd Edition的一个片段:
默认情况下,
<context:component-scan>
查找用一个注释的类 一些特殊的刻板印象注释:
@Component
- 表示该类的通用构造型注释 是一个Spring组件...跳过... 的
例如,假设我们的应用程序上下文中只包含
eddie
和guitar
bean。我们可以使用<bean>
并使用<context:component-scan>
注释Instrumentalist
和Guitar
类来消除XML配置中的显式@Component
声明。...跳过... 的
当Spring扫描
com.springinaction.springidol
包时,它会找到它Guitar
使用@Component
进行注释,并会在Spring中自动注册。 默认情况下,bean的ID将由camel-casing类名生成。在Guitar
的情况下,这意味着bean ID将为guitar
。