Spring5|Spring5 官方文档第三章Bean学习笔记(一)

1、设置别名,
2、通常情况下,指定要构造的bean类,容器本身通过反射调用bean
的构造方法直接创建bean,与在java代码中使用new是等价的。
3、使用构造函数方式创建bean时,要提供无参的构造方法。
4、当通过静态工厂方法创建对象时,首先,创建对象时,通过传入接口实例,来创建对象,配置时,bean中传入的不再是实现类,而是静态工厂类,需要添加factory-method属性,也就是静态工厂方法名字,同时在bean的子标签中配置该工厂方法的参数,bean的子标签设置setter方法要传入的值。
5,使用实例工厂的话,不同之处在于要配置实例工厂的bean。当有多个工厂时,都需要进行配置。
6,基于构造函数的依赖注入:

ref标签设置引用类型的参数。
type标签表示参数类型,基本数据类型可以直接写,比如int。String要写为java.lang.String
index显示指定参数索引
如果出现参数名称歧义的问题,可以使用@ConstructorProperties注解重新设置参数名称。
例如:@ConstructorProperties({"years", "ultimateAnswer"})
7、在setter方法上面添加注解@Required来检查依赖是否注入。
8、如果第三方库没有提供setter方法,使用构造函数注入是一个很好的选择。
9、容器分层,父容器id与子容器id名称相同,可以使用ref标签的parent属性。
10、当使用bean的集合合并的时候,子集合的bean标签的parent属性定义父集合,子集合的props标签的merge属性为true时,可以将父子集合的merge属性进行合并。
11、Spring把null字符串都默认为''",用表示null值
12、xmlns:p="http://www.springframework.org/schema/p"
可以使用p标签简略编写。




13.可以使用混合属性名字,例如:



foo.Bar类中,有一个属性fred,fred中有bob,bob中有sammy,sammy的值为123。
在这里,最后一个属性前面的所有属性不能为null,也就是fred、bob不能为null。
14、bean标签的属性depends-on="A",仅在singleton模式下适用,表示当前A类在当前bean初始化之前初始化,在当前bean销毁之前销毁。depends-on中可以存放多个值,可以使用空格,逗号,或者分号分隔开。
15、bean标签中的属性lazy-init属性为true,为延迟加载,lazy-init,ApplicationContext在读取所有的bean的时候,会对所有bean进行预初始化,如果不希望IOC对该bean进行与初始化,而是在第一次请求的时候,直接创建一个bean实例。
16、当一个延迟加载的bean是一个非延迟加载的Singleton bean的依赖时,ApplicationContext会初始化这个延迟加载的bean,因为必须提供Singleton bean的依赖。在其他地方是非延迟初始化的。
17、自动装配bean,默认是没有自动装配的,也就是Autowired=true
自动装配有四种模式:
---- no:默认为no,无自动装配,当系统比较庞大的情况下,Spring官方推荐使用默认装配,因为这样可以很清晰的描述系统结构。
---- byName:通过属性名称自动装配,找到对应名称的bean,通过setter方法将属性名称赋值。
---- byType:通过类型自动装配,如果系统中只有一个属性的类型与之对应,那么将自动装配,如果该类型大于一个的话,会抛出异常,如果没有的话,那么bean的属性的不会被赋值。
---- constructor:通过构造函数自动装配,如果没有与之对应的bean的参数类型,那么会出现错误。
18、property与constructor-arg会覆盖自动装配。
【Spring5|Spring5 官方文档第三章Bean学习笔记(一)】19、bean标签的autowire-candidate=false,可以将该bean排除在自动装配之外。

    推荐阅读