解释Spring Bean的声明周期
Spring容器 从XML 文件中读取bean的定义,并实例化bean。
Spring填充bean定义(DI)中指定的所有属性。
如果bean实现了BeanNameAware接口,spring会将bean的id传递给setBeanName()方法。
如果有任何BeanBeanPostProcessor与该bean关联,Spring将调用postProcesserBeforeInitialization()方法。
如果bean实现了IntializingBean,则调用其afterPropertySet()方法。如果bean声明了init方法,则调用指定的init方法。
如果有任何与bean关联的beanPostProcessor,则将调用它们的postProcessAfterInitialization()方法。
如果bean实现l了DisposableBean,它将调用destroy()方法。
解释不同类型的自动装配
自动装配有五种模式,可用于指示Spring容器使用autowiring进行依赖注入:
no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。
byName:通过参数名 自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。
byType:过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件,则抛出异常。
constructor:这个方式类似于byType, 但是要提供构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。
autodetect:首先尝试使用constructor来自动装配,如果不行,则使用byType方式。