JAVA后台开发_从入门到精通

10 Spring依赖检查

2017-07-14  本文已影响7人  笑Skr人啊

在Spring中,可以使用依赖检查功能,以确保所要求的属性可设置或者注入。

依赖检查模式

4个依赖检查支持的模式:
注:默认模式是 none

实例

package com.gp6.dependencyCheck;

public class Customer {
    private Person person;
    
    private String action;
    
    private int type;


    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

package com.gp6.dependencyCheck;

public class Person {
    private String name;
    
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

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.gp6.dependencyCheck.Customer">
        <property name="action" value="buy" />
        <!-- <property name="type" value="1" />
        <property name="person" ref="PersonBean" /> -->
    </bean>

    <bean id="PersonBean" class="com.gp6.dependencyCheck.Person">
        <property name="name" value="gp6" />
        <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.gp6.dependencyCheck.Customer" dependency-check="simple">
        <property name="action" value="buy" />
        <property name="type" value="1" />
        <!-- <property name="person" ref="PersonBean" /> -->
    </bean>

    <bean id="PersonBean" class="com.gp6.dependencyCheck.Person">
        <property name="name" value="gp6" />
        <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.gp6.dependencyCheck.Customer" dependency-check="objects">
        <property name="action" value="buy" />
        <property name="type" value="1" />
        <!-- <property name="person" ref="PersonBean" /> -->
    </bean>

    <bean id="PersonBean" class="com.gp6.dependencyCheck.Person">
        <property name="name" value="gp6" />
        <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.gp6.dependencyCheck.Customer" dependency-check="all">
        <property name="action" value="buy" />
        <property name="type" value="1" />
        <property name="person" ref="PersonBean" />
    </bean>

    <bean id="PersonBean" class="com.gp6.dependencyCheck.Person">
        <property name="name" value="gp6" />
        <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.gp6.dependencyCheck.Customer">
        <property name="action" value="buy" />
        <property name="type" value="1" />
        <property name="person" ref="PersonBean" />
    </bean>

    <bean id="PersonBean" class="com.gp6.dependencyCheck.Person">
        <property name="name" value="gp6" />
        <property name="age" value="29" />
    </bean>
</beans>

在这个配置文件中声明所有的Bean类默都是“all”依赖检查模式。

@Required 注解

在大多数情况下,你只需要确保特定属性已经设置,但有一定是所有的类型(原始,集合或对象)属性

上一篇 下一篇

猜你喜欢

热点阅读