自动装配

自动装配的意思是我们无需指定由哪一个bean来装配,spring会按照我们指定的规则去寻找相应的bean,自动装配有4种类型:

  • byName:如果某个bean的ID与property的名字一样,则这个bean就会自动装配;

  • byType:如果某个bean的类型与property的类型一致,则这个bean会被自动装配;

  • constructor:假设通过构造器注入来装配bean,我们让spring在应用上下文中自动选择与入参类型相同的Bean注入到构造器参数中

  • autodetect:Spring首先尝试constructor自动装配,如果没有发现与构造器相匹配的Bean,Spring会尝试使用byType自动装配。

注意,前两者是针对要装配的bean的所有property而言的,当然我们也可以为某个property提供独特的装配方案,而constructor则不行,我们不能为某个构造器入参提供独特的装配方案,假设我们有一个类Teacher引用了Student类:

2、懒加载

   

 延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean。

       配置方式很简单只需在<bean>标签上指定 “lazy-init” 属性值为“true”即可延迟初始化Bean。


Spring容器会在创建容器时提前初始化“singleton”作用域的Bean,“singleton”就是单例的意思即整个容器每个Bean只有一个实例,后边会详细介绍。Spring容器预先初始化Bean通常能帮助我们提前发现配置错误,所以如果没有什么情况建议开启,除非有某个Bean可能需要加载很大资源,而且很可能在整个应用程序生命周期中很可能使用不到,可以设置为延迟初始化。

  

3、依赖注入 

     在此配置中,resourceBean初始化在dependentBean之前被初始化,resourceBean销毁会在dependentBean销毁之后执行。


   销毁之前 关闭钩子

  但,如果你正在一个非web应用的环境下使用Spring的IoC容器,如dubbo服务,你想让容器优雅的关闭,并调用singleton的bean相应destory回调方法,你需要在JVM里注册一个“关闭钩子”(shutdown hook)。这一点非常容易做到,并且将会确保你的Spring IoC容器被恰当关闭,以及所有由单例持有的资源都会被释放。


4、

  <!-- 通过构造器参数索引方式依赖注入 -->

   

<bean id="byIndex" class="cn.javass.spring.chapter3.HelloImpl3">

        <constructor-arg index="0" value="Hello World!"/>

   <constructor-arg index="1" value="1"/>

</bean> 


    @java.beans.ConstructorProperties({"message", "index1"})

    public HelloImpl3(String message, int index1) {

        this.message = message;

        this.index1 = index1;

    }

    

    @Override

    public void sayHello() {

        System.out.println(index1 + ":" + message);

    }




静态工厂类

   <!-- 通过静态工厂参数索引方式依赖注入 -->

<bean id="byIndex" class="cn.javass.spring.chapter3.DependencyInjectByStaticFactory" factory-method="newInstance">

    <constructor-arg index="0" value="Hello World!"/>

   <constructor-arg index="1" value="1"/>

</bean> 



实例工厂类

  <bean id="instanceFactory" class="cn.javass.spring.chapter3.DependencyInjectByInstanceFactory"/>

    

    <!-- 通过实例工厂参数索引方式依赖注入 -->

<bean id="byIndex" factory-bean="instanceFactory" factory-method="newInstance">

    <constructor-arg index="0" value="Hello World!"/>

   <constructor-arg index="1" value="1"/>

</bean>