spring setter注入 构造器 顺序


public class AwareBean implements BeanFactoryAware, BeanNameAware, ApplicationContextAware, InitializingBean {
    private String beanName;

    private ApplicationContext applicationContext;

    private BeanFactory beanFactory;

    @Override
    public void setBeanName(String beanName) {
        System.out.println("--Enter AwareBean.setBeanName(), beanName = " + beanName + "\n");
        this.beanName = beanName;
    }}
<bean id="awareBean" class="com.flynn.AwareBean">
        <property name="beanName" value="awareBean2"/>
    </bean>

上面setBeanName会执行2次 。先是setter注入然后是构造器注入

--Enter AwareBean.setBeanName(), beanName = awareBean2

--Enter AwareBean.setBeanName(), beanName = awareBean

 <bean id="awareBean" class="com.flynn.AwareBean">
      
    </bean>

构造器注入 ,只执行一次。

经过试验得知,Spring注入Bean,实例化一个Bean的时候,顺序如下:

1. 这个class的构造函数被执行;

2.Setter被执行;

3.如果这个class实现了InitializingBean(即implements InitializingBean)则,接下来执行public void afterPropertiesSet() throws Exception() 中的内容。

猜你喜欢

转载自blog.csdn.net/f327888576/article/details/81106819