天天看点

Spring初始化Bean的顺序

构造函数->PostConstruct->InitializingBean的afterPropertiesSet方法->XML中bean的init-method指定初始化方法

在使用PostConstruct是忽略了Spring对Bean的注入是通过扫描包中类的注解实现的,没有在XML中配置相关信息

(<context:component-scan base-package="com.sxd.bean"></context:component-scan>)

导致PostConstruct指定的方法没有执行

public class User implements InitializingBean {

    public User() {
        System.out.println("User() Construct.");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("AfterPropertiesSet.");
    }

    @PostConstruct
    public void init() {
        System.out.println("PostConstruct Init.");
    }

    public void init_method() {
        System.out.println("Init method.");
    }
}
           

XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <!-- Definition for textEditor bean -->
    <bean id="user" class="com.sxd.bean.User" autowire="byType" init-method="init_method"></bean>
    <context:component-scan base-package="com.sxd.bean"></context:component-scan>
    <context:annotation-config></context:annotation-config>

</beans>
           
Spring初始化Bean的顺序