1. 程式人生 > >Spring(八):Spring配置Bean

Spring(八):Spring配置Bean

兩種 exceptio 名稱 CA exception 通過 文件系統 publish 基礎

在Spring的IOC容器裏配置Bean

配置Bean形式:基於xml文件方式、基於註解的方式

在xml文件中通過bean節點配置bean:

<?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 name="helloSpring" class="com.dx.spring.beans.HelloSpring"> <property name="name" value="Spring"></property> </bean> </beans>

參考:《Spring(二):Spring框架&Hello Spring》中配置過程

id:Bean的名稱

1)在IOC容器中必須是唯一的;

2)若id沒有指定,Spring會自動將全系nag定型為類名作為Bean的名字;

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

Bean的配置方式:通過全類名(反射實現,此時要求該bean類擁有一個無參數構造器)、通過工廠方法(靜態工廠方法&實例工廠方法)、FactoryBean

IOC容器BeanFactory&ApplicationContext概述

Spring容器

1)在Spring IOC容器讀取Bean配置創建Bean實例之前,必須對它進行實例化。只有在容器實例化後,才可以從IOC容器裏獲取Bean實例並使用。

2)Spring提供了兩種類型IOC容器實現

---BeanFactory:IOC容器的基本實現。BeanFactory是Spring框架的基礎設施,面向Spring本身。

---ApplicationContext:提供了更多的高級屬性,是BeanFactory的子接口。ApplicationContext面向使用Spring框架的開發者,幾乎所有的應用場合都直接使用ApplicationContext,而非底層的BeanFactory。

備註:

1)無論使用兩種方式的哪一種,配置文件是相同的。

2)如何卻別ApplicatinContext是BeanFactory的子接口:

ApplicatinContext的類定義:

// Compiled from ApplicationContext.java (version 1.8 : 52.0, no super bit)
public abstract interface org.springframework.context.ApplicationContext 
extends org.springframework.core.env.EnvironmentCapable,
org.springframework.beans.factory.ListableBeanFactory,
org.springframework.beans.factory.HierarchicalBeanFactory,
org.springframework.context.MessageSource,
org.springframework.context.ApplicationEventPublisher,
org.springframework.core.io.support.ResourcePatternResolver {
// Method descriptor #10 ()Ljava/lang/String; @org.springframework.lang.Nullable public abstract java.lang.String getId(); // Method descriptor #10 ()Ljava/lang/String; public abstract java.lang.String getApplicationName(); // Method descriptor #10 ()Ljava/lang/String; public abstract java.lang.String getDisplayName(); // Method descriptor #16 ()J public abstract long getStartupDate(); // Method descriptor #18 ()Lorg/springframework/context/ApplicationContext; @org.springframework.lang.Nullable public abstract org.springframework.context.ApplicationContext getParent(); // Method descriptor #20 ()Lorg/springframework/beans/factory/config/AutowireCapableBeanFactory; public abstract org.springframework.beans.factory.config.AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws java.lang.IllegalStateException; }

從上邊我們知道ApplicationContext是繼承了org.springframework.beans.factory.ListableBeanFactoryorg.springframework.beans.factory.HierarchicalBeanFactory接口,而這兩個接口都是繼承了org.springframework.beans.factory.BeanFactory接口。

public interface BeanFactory {
    String FACTORY_BEAN_PREFIX = "&";
    Object getBean(String name) throws BeansException;
    <T> T getBean(String name, @Nullable Class<T> requiredType) throws BeansException;
    Object getBean(String name, Object... args) throws BeansException;
    <T> T getBean(Class<T> requiredType) throws BeansException;
    <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
    boolean containsBean(String name);
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
    boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
    boolean isTypeMatch(String name, @Nullable Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
    @Nullable
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;
    String[] getAliases(String name);

}

因此,說ApplicationContext是BeanFactory的子接口類。

ApplicaionContext

ApplicationContext的主要實現類:

---ClassPathXmlApplicationContext:從類路徑下加載配置文件

---FileSystemXmlApplicationContext:從文件系統中加載配置文件。

依賴註入的方式:屬性註入;構造函數註入;工廠方法(不推薦、也不常用)

註入屬性值細節

自動裝配

bean之間的關系:繼承;依賴。

bean的作用域:singleton;property;web環境作用域

使用外部屬性文件

SPEL

IOC容器中Bean的聲明周期

Spring4.x新概念:泛型依賴註入。

Spring(八):Spring配置Bean