1. 程式人生 > >在Spring的IOC容器裡配置Bean

在Spring的IOC容器裡配置Bean

xml 檔案中通過 bean 節點來配置 bean

<bean id="helloWorld" class="com.spring.HelloWorld">
   <property name="userName" value="Spring"></property>
</bean>

idBean 的名稱。

IOC 容器中必須是唯一的

id 沒有指定,Spring 自動將許可權定性類名作為 Bean 名字

id 可以指定多個名字,名字之間可用逗號、分號、或空格分隔

class:bean的全類名,通過反射的方式在IOC容器中建立Bean的例項,要求Bean中必須有無參的構造器,如要求在HelloWorld類中必須有無參的構造器

public HelloWorld(){
    System.out.println("HelloWorld's Constructor...");
}

Spring IOC 容器讀取 Bean 配置建立 Bean 例項之前, 必須對它進行例項化. 只有在容器例項化後, 才可以從 IOC 容器裡獲取 Bean 例項並使用.

Spring 提供了兩種型別的 IOC 容器實現.

BeanFactory: IOC 容器的基本實現.

ApplicationContext: 提供了更多的高階特性. BeanFactory 的子介面.

BeanFactory

Spring 框架的基礎設施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的開發者,幾乎所有的應用場合都直接使用 ApplicationContext 而非底層的 BeanFactory

無論使用何種方式, 配置檔案時相同的.

ApplicationContext 的主要實現類:

ClassPathXmlApplicationContext類路徑下載入配置檔案

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

FileSystemXmlApplicationContext: 從檔案系統中載入配置檔案

ConfigurableApplicationContext 擴充套件於 ApplicationContext,新增加兩個主要方法:refresh() close(), 讓 ApplicationContext 具有啟動、重新整理和關閉上下文的能力

ApplicationContext 在初始化上下文時就例項化所有單例的 Bean

WebApplicationContext 是專門為 WEB 應用而準備的,它允許從相對於 WEB 根目錄的路徑中完成初始化工作

 

                                    

通過bean的Id從IOC容器中獲取Bean的例項,利用ID定位到IOC容器中的Bean

完整原始碼

配置檔案application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">
    <!--配置bean-->

    <bean id="helloWorld" class="com.spring.HelloWorld">
        <property name="userName" value="Spring"></property>
    </bean>
</beans>

HelloWorld類

public class HelloWorld {

    private String userName;

    public void setUserName(String userName) {
        System.out.println("SetName: " + userName);
        this.userName = userName;
    }

    public void hello(){
        System.out.println("Hello: " + userName);
    }

    public HelloWorld(){
        System.out.println("HelloWorld's Constructor...");
    }
}

Main類

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

    public static void main(String[] args) {
        /*//建立HelloWorld的一個物件
        HelloWorld helloWorld = new HelloWorld();
        //為name屬性賦值
        helloWorld.setUserName("Tom");
        */
        //1、建立Spring的IOC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2、從IOC容器中獲取Bean
        HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
        //3、呼叫hello方法
        helloWorld.hello();
    }
}