spring实例化bean类
1、bean定义本质上是用于创建一个或多个对象的配方。容器在被询问时查看命名bean的配方,并使用由该bean定义封装的配置元数据来创建(或获取)实际对象。
2、如果使用基于XML的配置元数据,则指定要在元素的 class 属性中实例化的对象的类型(或类)<bean/> 。此 class 属性(在内部,是 实例 Class 上的属性 BeanDefinition )通常是必需的。
3、可以通过以下 Class 两种方式之一使用该属性:1)、通常,在间恒溪痞容器本身通过反向调用其构造函数直接创建bean的情况下指定要构造的bean类,稍微等同于使用 new 运算符的Java代码。2)、要指定包含 static 为创建对象而调用的工厂方法的实际类,在不太常见的情况下,容器 static在类上调用 工厂方法来创建bean。从调用 static 工厂方法返回的对象类型可以完全是同一个类或另一个类
4、如果要为 static 嵌套类配置bean定义,则必须使用嵌套类的二进制名称。例如,如果您 Some皈其拄攥Thing 在 com.example 包中调用了一个类,并且此类 SomeThing 具有一个static 被调用的嵌套类 OtherThing ,则 class bean定义中的属性值将为com.example.SomeThing$OtherThing 。请注意,使用 $ 名称中的字符将嵌套类名与外部类名分开。
5、当您通过构造方法创建bean时,所有普通类都可以使用并与Spring兼容。也就是说,正在开发的类不需要实现任何特定接口或以特定方式编码。简单地指定bean类就足够了。但是,根据您为该特定bean使用的IoC类型,您可能需要一个默认(空)构造函数。
6、Spring IoC容器几乎可以管理您希望它管理的任何类。它不仅限于管理罕铙杪痱真正的JavaBeans。大多数Spring用户更喜欢实醪撅此饕际的JavaBeans,只有一个默认(无参数)构造函数,并且在容器中的属性之后建模了适当的setter和getter。您还可以在容器中拥有更多异国情调的非bean样式类。例如,如果您需要使用绝对不符合JavaBean规范的旧连接池,那么Spring也可以对其进行管理。
7、定义使用静态工厂方法创建的bean时,请使用该 class 属性指定包含 static 工厂方法的类,并使用 factory-method 名称的属性指定工厂方法本身的名称。您应该能够调用此方法(使用可选参数,如稍后所述)并返回一个活动对象,随后将其视为通过构造函数创建的对象。这种bean定义的一个用途是 static 在遗留代码中调用工厂。
8、以下bean定义指定通过调用工厂方法来创建bean。该定义未指定返回对象的类型(类),仅指定包含工厂方法的类。在此示例中,该 createInstance() 方法必须是静态方法。以下示例显示如何指定工厂方法:
9、以下示例显示了一个可以使用前面的bean定义的类: