|、创建bean的三种方式
1.驱动构造器来创建Bean。
有参数或无参数的构造器都行。
2.调用静态工厂方法来创建Bean
factory-method:指定工厂方法名 —— 这个是关键。
constructor-arg:指定工厂方法所需的参数。
class:指定工厂类的类名。
3.调用实例工厂方法来创建Bean
factory-method:指定工厂方法名 —— 这个是关键。
constructor-arg:指定工厂方法所需的参数。
factory-bean:指定工厂实例。不要指定class。
||、抽象Bean与子Bean
实际项目中,可能会出现多个Bean,它们的配置信息大部分都是相同,只有少量代码是不同。
如果继续保留这种配置,坏处是:
- 代码显得臃肿。
- 项目需要修改、升级时,开发者就需要同时修改多个地方。
此时,应该考虑将这些Bean中相同配置信息抽取出来,配置成一个Bean模板,我们并不希望Spring
为该模板创建Bean,因此应该将<bean.../>设置abstract="true"
子Bean:
指定了parent=父Bean的<bean.../>就是子Bean,这种子Bean的作用仅仅只是从父Bean得到配置信息。
【备注】 此处的子Bean与Java的继承是截然不同:
Bean继承的是配置信息,子Bean可以和父Bean是不同类型。
- 而Java中子类一定是一种特殊的父类。
Spring中的继承是配置值的延续,而Java中的继承是成员变量,方法的延续。
1.驱动构造器来创建Bean。
有参数或无参数的构造器都行。
2.调用静态工厂方法来创建Bean
factory-method:指定工厂方法名 —— 这个是关键。
constructor-arg:指定工厂方法所需的参数。
class:指定工厂类的类名。
3.调用实例工厂方法来创建Bean
factory-method:指定工厂方法名 —— 这个是关键。
constructor-arg:指定工厂方法所需的参数。
factory-bean:指定工厂实例。不要指定class。
||、抽象Bean与子Bean
实际项目中,可能会出现多个Bean,它们的配置信息大部分都是相同,只有少量代码是不同。
如果继续保留这种配置,坏处是:
- 代码显得臃肿。
- 项目需要修改、升级时,开发者就需要同时修改多个地方。
此时,应该考虑将这些Bean中相同配置信息抽取出来,配置成一个Bean模板,我们并不希望Spring
为该模板创建Bean,因此应该将<bean.../>设置abstract="true"
子Bean:
指定了parent=父Bean的<bean.../>就是子Bean,这种子Bean的作用仅仅只是从父Bean得到配置信息。
【备注】 此处的子Bean与Java的继承是截然不同:
Bean继承的是配置信息,子Bean可以和父Bean是不同类型。
- 而Java中子类一定是一种特殊的父类。
Spring中的继承是配置值的延续,而Java中的继承是成员变量,方法的延续。