• Spring学习(十)-----Spring依赖检查


    在Spring中,可以使用依赖检查功能,以确保所要求的属性可设置或者注入。
    依赖检查模式
    4个依赖检查支持的模式:
    • none – 没有依赖检查,这是默认的模式。
    • simple – 如果基本类型(int, long,double…)和集合类型(map, list..)的任何属性都没有设置,UnsatisfiedDependencyException将被抛出。
    • objects – 如果对象类型的任何属性都没有设置,UnsatisfiedDependencyException将被抛出。
    • all – 如果任何类型的任何属性都没有被设置,UnsatisfiedDependencyException将被抛出。

    注:默认模式是 none

    示例

    Customer和Person对象的示例。
    package com.yiibai.common;
    
    public class Customer 
    {
        private Person person;
        private int type;
        private String action;
    
        //getter and setter methods
    }
    
    package com.yiibai.common;
    
    public class Person 
    {
        private String name;
        private String address;
        private int age;
        
        //getter and setter methods    
    }

    1. none 依赖检查

    Spring bean配置文件使用 “none” 依赖检查模式。
    <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-2.5.xsd">
    
        <bean id="CustomerBean" class="com.yiibai.common.Customer" >
            <property name="action" value="buy" />
        </bean>
    
        <bean id="PersonBean" class="com.yiibai.common.Person">
            <property name="name" value="yiibai" />
            <property name="address" value="address ABC" />
            <property name="age" value="29" />
        </bean>
    
    </beans>
    如果没有明确定义的依赖检查模式,其默认为“none”。没有依赖检查将执行。

    2. simple 依赖检查

    Spring bean的配置文件使用“simple”依赖检查模式。
    <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-2.5.xsd">
    
        <bean id="CustomerBean" class="com.yiibai.common.Customer" 
             dependency-check="simple">
    
            <property name="person" ref="PersonBean" />
            <property name="action" value="buy" />
        </bean>
    
        <bean id="PersonBean" class="com.yiibai.common.Person">
            <property name="name" value="yiibai" />
            <property name="address" value="address ABC" />
            <property name="age" value="29" />
        </bean>
    </beans>
    在“type”属性(基本类型或集合类型),如尚未设置,UnsatisfiedDependencyException将抛出。
    org.springframework.beans.factory.UnsatisfiedDependencyException: 
    Error creating bean with name 'CustomerBean' 
    defined in class path resource [config/Spring-Customer.xml]: 
    Unsatisfied dependency expressed through bean property 'type': 
    Set this property value or disable dependency checking for this bean.

    3. objects 依赖检查

    Spring bean配置文件的 “objects”依赖检查模式。
    <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-2.5.xsd">
    
        <bean id="CustomerBean" class="com.yiibai.common.Customer" 
             dependency-check="objects">
    
            <property name="action" value="buy" />
            <property name="type" value="1" />
        </bean>
    
        <bean id="PersonBean" class="com.yiibai.common.Person">
            <property name="name" value="yiibai" />
            <property name="address" value="address ABC" />
            <property name="age" value="29" />
        </bean>
        
    </beans>
    在'person'属性(对象类型),尚未设置,一个UnsatisfiedDependencyException将抛出。
    org.springframework.beans.factory.UnsatisfiedDependencyException: 
    Error creating bean with name 'CustomerBean' 
    defined in class path resource [config/Spring-Customer.xml]: 
    Unsatisfied dependency expressed through bean property 'person': 
    Set this property value or disable dependency checking for this bean.

    4. all 依赖检查

    Spring bean配置文件的“all”依赖检查模式。
    <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-2.5.xsd">
    
        <bean id="CustomerBean" class="com.yiibai.common.Customer" 
             dependency-check="all">
    
            <property name="action" value="buy" />
        </bean>
    
        <bean id="PersonBean" class="com.yiibai.common.Person">
            <property name="name" value="yiibai" />
            <property name="address" value="address ABC" />
            <property name="age" value="29" />
        </bean>
    
    </beans>
    对“simple”和“objects”模式的组合,如果有的话类型(原型,集合和对象)的任何属性都没有设置,一个UnsatisfiedDependencyException将被抛出。
    全局默认的依赖检查
    明确定义的依赖检查模式,每个Bean配置繁琐且容易出错,可以在<beans>根元素设置一个默认的依赖性检查属性强制<beans>根元素内声明的整个bean类适用此规则。然而,这根默认模式将通过一个bean自己指定的模式下可覆盖。
    <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-2.5.xsd" 
        default-dependency-check="all">
    
        <bean id="CustomerBean" class="com.yiibai.common.Customer">
            <property name="action" value="buy" />
            <property name="type" value="1" />
        </bean>
    
        <bean id="PersonBean" class="com.yiibai.common.Person">
            <property name="name" value="yiibai" />
            <property name="address" value="address ABC" />
            <property name="age" value="29" />
        </bean>
        
    </beans>
    
    
    在这个配置文件中声明所有的Bean类默都是“all”依赖检查模式。
    @Required 注解
    在大多数情况下,你只需要确保特定属性已经设置,但有一定是所有的类型(原始,集合或对象)属性。
    作者:逆舟
    https://www.cnblogs.com/zy-jiayou/
    本博客文章均为作者原创,转载请注明作者和原文链接。
  • 相关阅读:
    创建github怎样管理
    端口号的作用
    正则
    分布式代码管理github
    实现MVC
    AngularJS核心特性(四大点)
    什么是跨域,什么是同源
    rem怎么计算
    正则须知(以后还会添加)
    LA 6448 Credit Card Payment
  • 原文地址:https://www.cnblogs.com/zy-jiayou/p/7700375.html
Copyright © 2020-2023  润新知