相关疑难解决方法(0)

混合组件扫描和同一类的XML bean定义时的Spring行为?

我有一个关于组件扫描的问题,以及在Spring版本3.0.5.RELEASE中为同一服务类的XML配置中使用额外的bean定义.

我创建了一个带有注释的"MyService"类

@Service( "myService" )
Run Code Online (Sandbox Code Playgroud)

并且对于同一个类,有一个bean定义,如下所示:

<bean id="myService" class="....MyService" />
Run Code Online (Sandbox Code Playgroud)

我放了一个

System.out.println( "MyService has been instantiated" );
Run Code Online (Sandbox Code Playgroud)

消息到MyService类的构造函数中.当我的应用程序启动时,该消息将在控制台上显示一次.Spring似乎很聪明,可以检测到只有一个具有id"myService"的类的实例.

但即使我将注释更改为

@Service( "myService2" )
Run Code Online (Sandbox Code Playgroud)

并将xml bean定义id保留为"myService",该类只会被实例化一次.

我的两个问题是:

  1. 虽然这是我目前想要的行为,是否可以将XML bean定义和组件扫描混合到一个类中,让它使用不同的Bean ID实例化两次?

  2. 有谁知道,Spring的"幕后"机制是什么?Spring如何决定何时只实例化一次类?(也许不允许在同一个类中混合组件扫描和XML bean定义?)

非常感谢你的帮助!

spring

5
推荐指数
1
解决办法
3526
查看次数

标签 统计

spring ×1