IOC装配Bean

(1)Spring框架Bean实例化的方式提供了三种方式实例化Bean
    构造方法实例化(默认无参数,用的最多)
    静态工厂实例化
    实例工厂实例化

下面先写这三种方法的applicationContext.xml配置文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
 6         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 8        
 9     <!-- Bean的三种实例化方式================================================================================ -->    
10       <!-- 2.1  使用无参的构造器 -->
11      <bean id="bean1" class="com.study.spring.b_instance.Bean1"></bean>
12       <!-- 2.2使用静态工厂方法  factory-method 是工厂提供的静态方法 -->
13      <bean id="bean2" class="com.study.spring.b_instance.Bean2" factory-method="createInstance"></bean>
14      <!-- 2.3配置实例化工厂的方法 -->
15      <bean id="bean3Factory" class="com.study.spring.b_instance.Bean3Factory"></bean>
16      <bean id="bean3" factory-bean="bean3Factory" factory-method="getInstance"></bean>
17     <!-- end.Bean的三种实例化方式================================================================================ -->    
Bean1类
public class Bean1 {
    
    //必须提供无参的构造函数  系统有默认无参的构造函数
}
Bean2类
public class Bean2 {
    private static Bean2 Bean2 = new Bean2();

    private Bean2() {
    }

    public static Bean2 createInstance() {
        return Bean2;
    }
}

 Bean3类

public class Bean3 {

}

Bean3Factory类

 1 public class Bean3Factory {
 2     
 3     private Bean3Factory(){
 4         
 5     }
 6       
 7     public Bean3 getInstance(){
 8         return new Bean3();
 9     }
10 }

测试类InstanceDemo

 1 import org.junit.Test;
 2 import org.springframework.context.ApplicationContext;
 3 import org.springframework.context.support.ClassPathXmlApplicationContext;
 4 
 5 public class InstanceDemo {
 6     
 7     //实例化工厂方法
 8     @Test
 9     public void demo3(){
10        //加载配置文件 创建工厂
11         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
12         
13         Bean3 bean3 =(Bean3) applicationContext.getBean("bean3");
14         System.out.println(bean3);
15         
16     }
17     
18     //静态工厂方法
19     @Test
20     public void demo2(){
21        //加载配置文件 创建工厂
22         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
23         
24         Bean2 bean2 =(Bean2) applicationContext.getBean("bean2");
25         System.out.println(bean2);
26         
27     }
28     //构造方法得到bean对象
29     @Test
30     public void demo1(){
31        //加载配置文件 创建工厂
32         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
33         
34         Bean1 bean1 =(Bean1) applicationContext.getBean("bean1");
35         System.out.println(bean1);
36         
37     }
38 }
39 /*
40  * 这三个都得到类似于com.study.spring.b_instance.Bean1@7229c204 的内存地址
41  */

(2).Bean的其他配置:

     一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称

         id 属性在IoC容器中必须是唯一的

         id 的命名要满足XML对ID属性命名规范 必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号

  如果Bean的名称中含有特殊字符,就需要使用name属性 例如: <bean name="#person" class="cn.itcast.bean.Person"/>

        因为name属性可以相同,所以后出现Bean会覆盖之前出现的同名的Bean

   id和name的区别:

    id遵守XML约束的id的约束.id约束保证这个属性的值是唯一的,而且必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 

        name没有这些要求

   如果bean标签上没有配置id,那么name可以作为id.

  Bean的scope属性

  <!-- 3.Bean的scope属性===================================================================== -->    
     <bean id="product" class="com.study.spring.c_scope.Product" scope="singleton"></bean>
  <!-- end.Bean的scope属性===================================================================== -->    

      * singleton :单例的.(默认的值.)

    * prototype :多例的.

     * request :web开发中.创建了一个对象,将这个对象存入request范围,request.setAttribute();

   * session :web开发中.创建了一个对象,将这个对象存入session范围,session.setAttribute();

   * globalSession :一般用于Porlet应用环境.指的是分布式开发.不是porlet环境,globalSession等同于session;

3.Bean属性的依赖注入

 前面已经知道如何获得对象,那我们接下来要知道如果给对象对象的属性赋值。

Spring框架(2)---IOC装配Bean(xml配置方式)

下面通过举例说明:

Spring框架(2)---IOC装配Bean(xml配置方式)
public class Car {

    private String name;

    private double price;

    public Car(String name, double price) {
        super();
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car [name=" + name + ", price=" + price + "]";
    }
}
Car 类

相关文章: