`

Spring中的ref属性

阅读更多

ref元素是用在property中,来设置需要引用的容器管理的其它Bean。
 
   它的用法:<ref  bean|local|parent="someBean">,这里主要分析一下这三个参数的作用。
 
   这次先看实例,再进行讲解。
 
·  先建立一个包:javamxj.spring.basic.ref  ,然后把以下5个文件放在这个包下。
HelloBean.java  

package javamxj.spring.basic.ref;

public class HelloBean {
    private String hello;

    public String getHello() {
        return hello;
    }

    public void setHello(String hello) {
        this.hello = hello;
    }
}

 

HelloDate.java  

package javamxj.spring.basic.ref;

import java.util.Date;

public class HelloDate {
    private Date date;

    private HelloBean hb;

    public void setDate(Date date) {
        this.date = date;
    }

    public void setHb(HelloBean hb) {
        this.hb = hb;
    }

    public void sayHello() {
        System.out.println(hb.getHello() + "  " + date.toLocaleString());
    }

} 

 

beans.xml

<?xml version="1.0" encoding="GBK"?> 
<!DOCTYPE beans public "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    
    <bean id="helloBean" class="javamxj.spring.basic.ref.HelloBean">
        <property name="hello" value="Hello! Child Bean." />
    </bean>
    
    <bean id="dateBean" name="#date" class="java.util.Date"/>
    
    <bean id="hd1" class="javamxj.spring.basic.ref.HelloDate">
        <property name="hb">
            <ref bean="helloBeanParent"/>
        </property>
        <property name="date">
            <ref bean="#date"/>
            <!--<ref bean="dateBean"/>-->
        </property>
    </bean>
    
    <bean id="hd2" class="javamxj.spring.basic.ref.HelloDate">
        <property name="hb">
            <ref local="helloBean"/>
        </property>
        <property name="date">
            <ref local="dateBean"/>
        </property>
    </bean>
    
    <bean id="hd3" class="javamxj.spring.basic.ref.HelloDate">
        <property name="hb">
            <ref parent="helloBean"/>
        </property>
        <property name="date">
            <bean class="java.util.Date"/>
        </property>
    </bean>
    
</beans>

 

parent.xml  

<?xml version="1.0" encoding="GBK"?> 
<!DOCTYPE beans public "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    
    <bean id="helloBean" class="javamxj.spring.basic.ref.HelloBean">
        <property name="hello" value="Hello! Javamxj." />
    </bean>
    
    <bean id="helloBeanParent" class="javamxj.spring.basic.ref.HelloBean">
        <property name="hello" value="Hello! Parent Bean." />
    </bean>
    
</beans> 

 

Main.java  

package javamxj.spring.basic.ref;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class Main {

    public static void main(String[] args) {
        BeanFactory parent = new XmlBeanFactory(new ClassPathResource(
                "javamxj/spring/basic/ref/parent.xml"));
        BeanFactory child = new XmlBeanFactory(new ClassPathResource(
                "javamxj/spring/basic/ref/beans.xml"), parent);

        HelloDate hd1 = (HelloDate) child.getBean("hd1");
        HelloDate hd2 = (HelloDate) child.getBean("hd2");
        HelloDate hd3 = (HelloDate) child.getBean("hd3");

        hd1.sayHello();
        hd2.sayHello();
        hd3.sayHello();
    }
} 

 

·运行Main.java,输出结果如下:
 
Hello!  Parent  Bean.    2005-8-10  22:25:56
Hello!  Child  Bean.    2005-8-10  22:25:56
Hello!  Javamxj.    2005-8-10  22:25:56
 
 
     OK!这里主要分析beans.xml、Main.java这两个文件。对于Main.java要注意的是如何加载“parent”的,重点看看beans.xml中ref元素的用法。
 
   首先定义两个bean:helloBean、dateBean,分别指向HelloBean类和Date类。然后定义了hd1、hd2、hd3等三个bean,都指向HelloDate类。
 
·hd1:
   property标签中的“helloBeanParent”并不存在于beans.xml中,而是在parent.xml中,使用<ref  bean="someBean">可以从其它bean配置文件中寻找需要加载的目标bean。bean属性的值可以同目标bean的id属性相同,也可以同它的name属性中任意的一个值相同。
 
·hd2:
     property标签中的“helloBean”如果不存在于beans.xml中,则XML解析器会提示错误。<ref  local="someBean">只能这个bean配置文件中寻找需要加载的目标bean,而且local属性值必须同目标bean的id属性相同。
 
·hd3:
     property标签中的“helloBean”同时存在于beans.xml和parent.xml中,使用<ref  bean="someBean">则会优先从beans.xml中寻找需要加载的目标bean,如果需要从parent.xml中加载目标bean,则需使用<ref  parent="someBean">。在设置date时,使用的是内联bean,这时可以不要任何id或name定义。

分享到:
评论

相关推荐

    Spring之ref

    标题中的"Spring之ref"指的是在Spring框架中关于`@Autowired`注解的`@Qualifier("ref")`或`@Resource(name = "ref")`的使用,这些是用来精确指定依赖注入对象的引用。在Spring中,当我们有多个相同类型的Bean且需要...

    spring bean 属性总结

    Spring的`&lt;beans&gt;`和`&lt;bean&gt;`元素及其属性提供了强大的配置能力,使开发者能够灵活地定义、配置和管理应用程序中的组件。通过深入了解这些元素和属性,开发人员可以更有效地利用Spring框架的功能,构建更加健壮和可...

    spring 属性参考与自动绑定

    这意味着如果容器中存在一个类型匹配的bean,Spring会自动将其注入到相应的属性中。例如: ```xml &lt;value&gt;Hello!Justin! ``` 在上面的例子中,`helloBean`的`date`属性将自动绑定到类型为`Date`的`...

    spring 普通属性注入

    在Spring框架中,属性注入是核心特性之一,它允许我们通过依赖注入(Dependency Injection, DI)来管理对象的属性,而不是让对象自行创建或查找它们的依赖。这有助于提高代码的可测试性、可维护性和解耦性。下面将...

    spring2.0(三) 自定义属性编辑器

    在Spring 2.0框架中,自定义属性编辑器(Custom Property Editor)是一个重要的功能,它允许开发者扩展Spring的默认属性绑定机制,以处理特定类型的转换。本文将深入探讨这一特性,结合源码分析和实际应用,帮助你...

    spring各种属性的注入

    Spring能够自动解析日期格式,并将其注入到相应属性中。 #### Bean引用注入 Bean之间的引用注入是Spring框架的核心功能之一,它允许在一个Bean中引用另一个已经定义好的Bean。例如: ```xml ...

    Spring学习笔记(8)----属性注入的方式

    在Spring框架中,属性注入是将外部配置的属性值注入到Bean对象中,使得对象可以在运行时根据配置动态地获取其依赖的属性。本篇学习笔记主要探讨了Spring中的属性注入方式,包括了传统的XML配置注入、注解式注入以及...

    day38 11-Spring的Bean的属性的注入:对象属性

    在Spring框架中,Bean的属性注入是核心功能之一,它允许我们为Bean对象设置各种属性值,以便在应用运行时创建和配置完全初始化的对象。在本篇内容中,我们将深入探讨Spring如何处理Bean的属性注入,包括对象属性的...

    spring中自定义注解(annotation)与AOP中获取注解

    在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...

    mybatis-spring中文文档

    对于事务的处理,MyBatis-Spring整合支持Spring事务管理,可以将事务属性配置到对应的DAO层中。异常处理方面,MyBatis-Spring整合会将MyBatis异常转换成Spring框架统一的数据访问异常DataAccessException,这样程序...

    Spring中的方法注入

    综上所述,Spring中的方法注入提供了更灵活的方式来管理和注入依赖,它与构造函数注入、属性注入等一起,构成了Spring强大的依赖注入机制。理解并合理使用这些注入方式,可以帮助我们编写出更加健壮、易于维护的代码...

    Spring选择题(含答案).doc

    为了通过 Spring 给 DeptService 的 deptDAO 属性注入值,需要在 applicationContext.xml 文件中添加以下代码: A. &lt;constructor-arg&gt; &lt;ref bean="dao"/&gt; 这将通过构造方法来注入 DeptDAO 对象。 3. 在 Spring ...

    spring框架配置bean的高级属性

    本文将详细解读标题“spring框架配置bean的高级属性”以及描述中的内容,并结合具体的示例XML配置文件来探讨Bean配置中的高级技巧。 #### 核心概念与应用场景 在描述中提到的`hibernate tools`是一种用于简化...

    Spring中集合类型的装配

    在上述代码中,`myList`属性将被注入一个包含`bean1`、`bean2`和字符串"value"的List。`ref`标签用于引用其他bean,`value`标签则可以直接注入基本类型或字符串。 除了XML配置,Spring还提供了基于注解的装配方式。...

    Spring如何装配各种集合类型的属性

    在Spring框架中,集合类型的属性装配是常见的需求,如List、Set、Map等。这些集合在配置文件或注解中进行装配,可以帮助我们管理复杂的对象依赖关系。本篇将详细介绍Spring如何装配各种集合类型的属性。 1. **XML...

    给属性赋值ref.zip

    这样,Spring会将`address` bean注入到`person` bean的`address`属性中。 3. **级联赋值**: 级联赋值是指在一个bean中,给其内部属性的属性进行赋值。例如,`Person`类有一个`Address`属性,而`Address`类有一个...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    在myeclipse自动提示spring的配置信息

    创建一个新的MyEclipse项目,选择“Dynamic Web Project”,并在项目属性中配置为Spring项目。添加Springnature,这样MyEclipse就能识别该项目为Spring应用,并提供相应的支持。 3. **配置Spring XML** Spring的...

    spring中事物配置

    在Spring框架中,事务管理是实现业务逻辑时不可或缺的一部分,它确保了数据的一致性和完整性。...在实际项目中,根据具体需求,你可能还需要调整事务的传播行为、隔离级别、回滚规则等属性,以满足复杂的应用场景。

    spring中所需要的知识点及学习方向文档

    此外,Spring还支持属性注入(property injection),通过`&lt;property&gt;`标签设置对象的属性,以及依赖注入(dependency injection),通过`&lt;bean&gt;`标签的`ref`属性引用其他bean。Spring AOP提供面向切面的编程,用于...

Global site tag (gtag.js) - Google Analytics