spring_ioc_bean

bean的实例化方式

1.构造器方式

  Spring默认情况下是调用java类的构造器进行初始化,同时会调用bean的无参构造方法

  

public class Dog{
  private String name;
 private int age; ...
 public Dog(String name,int age){
  super();
  this.name=name;
  this.age=age;
}  }
xml文件中
<bean id="dog" class="类路径">
  <constructor-arg index="0" value="金毛"></...>
</bean>
index是构造方法的参数位置,从0开始
value是参数值

  

2.静态工厂方式 无需初始化工厂类对象就能获得Product类实例

public class Product{
  public void desc(){
       System.out.print("2112312413");        //工厂类生产的对象
  }  
}

public class StaticFactory{
    public static Product getProduct(){         //静态工厂类
      return new Product();  
}
}        
<bean id="product" class="静态工厂类路径" factory-method="getProduct">
</bean>

获取静态工厂创建的实例只需配置工厂类,及工厂类对应创建实例的方法,Spring会执行静态工厂类的静态方法创建对象,并返回引用

Product product = (Product) ac.getBean("product");
product.desc();

3.普通工厂方式

public class Product{
    public void desc(){
  System.out.println("asdafasdf");  
}
}

public class CustomFactory{
    public Product getProduct(){
    return new Product();  
}
}


<bean id="custonFactory" class=“工厂类路径”></bean>    定义工厂类
<bean id="product" factory-bean="cunstonFactory" factory-method="getProduct"></bean>
配置文件:当ac.getBean()获取product实例,spring会创建factory实例,并执行工厂方法,返回对象

4.定义多个配置文件

可以在一个配置文件中引入其他配置文件

在applicationContext.xml文件中  在beans标签下

<import resource ="需要引入的配置文件的相对路径" />

bean的管理

1.bean的作用域与初始化时间

<bean id="userDao" class="com. .... .UserDao" scope="singleton"
lazy-init="true"></bean>

scope取值范围:1.singleton 单例    spring ioc中仅存在一个Bean实例,根据lazy-init选择创建时间,lazy-init默认false

        2.prototype 元数据  getBean一次创建一个新的Bean实例,每次获取对象实例就创建一个新的对象实例

          lazy-init:true   第一次获取对象实例时创建

                false  容器加载时创建对象

2.bean的初始化和销毁方法

spring创建bean实例后调用bean的初始化方法,spring在容器关闭后,bean不被spring容器调用,进入可垃圾回收阶段,容器关闭前会调用bean的销毁方法,只有scope=singleton的bean才会执行销毁方法

<bean id="dog" class="类路径' scope="singLeton" lazy-init="true"
init-method="init"
destroy-method="destory">
     <constructor-arg index="0" value="边牧"></.....>
</bean>

Dog类中代码

public class Dog{
  private .....
     ...
   public void init(){
     ....初始化对象后,执行初始化方法
}
public void destory(){
  ...    关闭容器时调用销毁方法
} 
}

bean属性设置

1.依赖注入

  spring可以初始化对象还可以为成员变量赋值,不需要手动编码,依赖容器初始化对象,并赋值给bean全局变量的方式叫依赖注入

传统方式

Boy boy = new Boy();
Dog dog = new Dog();
boy.setDog(dog);

依赖注入:Spring容器初始化两个组件,依据配置的依赖关系,将Boy对象dog变量赋值

<bean id = "boy" class="Boy类路径">
<property name="dog" ref="dog"></...>             ref依赖于下面的bean id=“dog”
</bean> 
<bean id="dog" class="Dog类路径"></bean>

2.手动注入

  1.setter方法注入:spring调用bean组件中属性对应的setter方法完成属性的注入(赋值)

      1.基本类型注入:共有18中 8中基本类型和其封装类型 String和StringBuffer类型

    

<bean id="stetterBasic"
    class="类路径">
<property name="setterBasic中的属性 例 name" value="对应的值"></poperty>
</bean>   

      2.spring组件类型注入:当前bean组件属性为spring容器的其他bean组件,容器可以读取配置文件对当前属性进行赋值

<bean id="dog" class="Dog类路径">
  <proerty name="name" value="边牧"></property>
  <property name="age" value="3“></property>
</
bean> <bean id = "boy" class="Boy类路径">
<!--Boy类中有一个Dog类型的成员变量 为其赋值-->
<property name="dog" ref="dog"></property> </bean。

      3.集合类型注入 :泛指bean组件的属性式List Set Map 数组 Properties等

      List注入

<bean id="setterList" class="类路径">
    <property name="list">
    <list>
    <value type="java.lang.String">1</value>   基本类型
    <ref bean="bean"/>                                  不常用 spring组件类型
    <null></null>                                            不常用插入集合类型
  </list>
</property> </bean> <!-- list中对象的顺序按从上到下的赋值顺序,list当中的数据可以式基本类型,spring组件类型,集合类型等 -->

      set与list用法一致

      map方式注入

 

<property name="map">
    <map>
    <entry key-ref="bean"  value-ref=""></entry>   不常用 引用spring组件
    <entry key="aa" value="bb"></entry>
    </map>
</property>

        

  2.构造器方式注入:spring在初始化bean组件时,调用含参数构造器对全部变量赋值,赋值方式与setter方法赋值方式一致

<bean id="boy" class="类路径'>
    <constructor-arg index="0" value="123">
</constructor-arg>
<constructor-arg index="1" ref="dog"></constructor-arg>
</bean>

3.自动注入    

猜你喜欢

转载自www.cnblogs.com/fionalde/p/9116531.html
今日推荐