`

Spring高级注入之属性值注入

阅读更多

实际应用中,某个实例的属性可能是另一个对象的一个属性,Spring支持将bean实例的属性值直接赋值给一个变量

属性值的注入,是通过PropertyPathFactoryBean完成的,PropertyPathFactoryBean用来获取目标bean的属性,获得的值可以注入到其他bean,也可以定义成新的bean

实体类:

 

Java代码   收藏代码
  1. package Bean.superIOCparam;  
  2.   
  3. public class Person {  
  4.    private Son son;  
  5.    private String age;  
  6. public String getAge() {  
  7.     return age;  
  8. }  
  9. public void setAge(String age) {  
  10.     this.age = age;  
  11. }  
  12. public Son getSon() {  
  13.     return son;  
  14. }  
  15. public void setSon(Son son) {  
  16.     this.son = son;  
  17. }  
  18. }  
  19.   
  20.   
  21. package Bean.superIOCparam;  
  22.   
  23. public class Son {  
  24.   private String age;  
  25.   
  26. public String getAge() {  
  27.     return age;  
  28. }  
  29.   
  30. public void setAge(String age) {  
  31.     this.age = age;  
  32. }  
  33. }  

 配置文件:提供四种注入

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  3.   
  4. <beans>  
  5.   
  6.   <bean id="person" class="Bean.superIOCparam.Person" singleton="false">  
  7.      <property name="age">  
  8.         <value>30</value>  
  9.      </property>  
  10.      <property name="son">  
  11.         <bean class="Bean.superIOCparam.Son">  
  12.            <property name="age">  
  13.               <value>16</value>  
  14.            </property>  
  15.         </bean>  
  16.      </property>  
  17.   </bean>  
  18.     
  19.   <!--如下将会将person的属性son的属性age传入son1实例的age属性-->  
  20.     <bean id="son1" class="Bean.superIOCparam.Son">  
  21.         <property name="age">  
  22.           <!--以下是访问bean属性的简单方式,这样可以将person这个bean的age属性赋值给son1这个bean的age属性-->             
  23.          <bean id="person.son.age" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>  
  24.         </property>  
  25.     </bean>  
  26.       
  27.     <!-- 以下将会获得结果son,它将是person bean的son的数值-->  
  28.     <bean id="son2" class="org.springframework.beans.factory.config.PropertyPathFactoryBean">  
  29.        <property name="targetBeanName">  
  30.          <value>person</value>  
  31.        </property>  
  32.        <property name="propertyPath">  
  33.          <value>son</value>  
  34.        </property>  
  35.     </bean>  
  36.       
  37.      <!-- 以下将会获得结果16,它将是person bean的son的age属性-->  
  38.     <bean id="son3" class="org.springframework.beans.factory.config.PropertyPathFactoryBean">  
  39.        <property name="targetBeanName">  
  40.          <value>person</value>  
  41.        </property>  
  42.        <property name="propertyPath">  
  43.          <value>son.age</value>  
  44.        </property>  
  45.     </bean>  
  46.       
  47.     <!-- 以下会获得结果为30 ,它将是获得该bean的内部bean的age属性-->  
  48.     <bean id="son4" class="org.springframework.beans.factory.config.PropertyPathFactoryBean">  
  49.         <property name="targetObject">  
  50.             <bean class="Bean.superIOCparam.Person">  
  51.                 <property name="age"><value>30</value></property>  
  52.             </bean>  
  53.         </property>  
  54.         <property name="propertyPath"><value>age</value></property>  
  55.     </bean>  
  56. </beans>  

 测试代码:

Java代码   收藏代码
  1. public static void main(String[] args) throws Exception {  
  2.           
  3.         String path=new Test().getClass().getResource("/").getPath();  
  4.         String realpath=path.substring(1, path.length());  
  5.         ApplicationContext context=new FileSystemXmlApplicationContext(realpath+"/superIOCparam.xml");  
  6.         Son son1=(Son)context.getBean("son1");  
  7.         Son son2=(Son)context.getBean("son2");  
  8.   
  9.         System.out.println("person age is:"+son1.getAge());  
  10.         System.out.println("person age is:"+son2.getAge());  
  11.         System.out.println(context.getBean("son3"));  
  12.         System.out.println(context.getBean("son4"));  
  13.     }  

 

运行结果:

person age is:16
person age is:16
16
30

分享到:
评论

相关推荐

    知识共享-Spring注入属性值案例(雷惊风).

    ### Spring框架中的属性值注入详解 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用程序。它提供了全面的基础架构支持,包括依赖注入(Dependency Injection, DI)、面向切面编程...

    spring 设值注入

    在Spring框架中,设值注入(Value Injection)是一种将外部属性值注入到bean对象中的方法。它是通过在bean的配置元数据中定义属性值来实现的,这些值会在bean实例化时自动设置。设值注入是Spring依赖注入...

    spring 普通属性注入

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

    基于Spring boot @Value 注解注入属性值的操作方法

    在Spring Boot应用中,`@Value`注解是用于注入属性值的重要工具,它可以方便地从配置文件或者非配置文件中获取数据,并将其赋值给字段或者方法参数。本篇文章将详细阐述`@Value`注解的使用方法,包括如何注入配置...

    spring依赖注入底层详解

    在Spring中,依赖注入可以通过构造器注入、设值注入和接口注入三种方式实现。 1. 构造器注入:通过在类的构造函数中传递依赖对象来完成注入。这种方式在创建对象时就确保了所有依赖都已就绪,适合于对象的依赖关系...

    spring的注入方式

    然后,在Spring的配置文件中,定义bean并指定其属性值。例如,如果你有一个`UserService`类需要注入`UserRepository`,在XML配置文件中可以这样写: ```xml ``` 在`UserService`类中,你需要有如下的...

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

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

    day38 17-Spring的Bean的属性注入:注解方式

    在Spring框架中,Bean的属性注入是核心功能之一,它允许开发者在不编写代码的情况下配置对象的依赖关系。本文将详细讲解使用注解方式进行Bean属性注入的方法,以及相关的源码和工具应用。 首先,让我们了解Spring中...

    spring依赖注入的实现原理

    1. **BeanDefinition**:这是Spring中描述bean定义的接口,包含了bean的所有元数据,如类名、属性值等。这些信息在解析bean定义时被加载到`DefaultListableBeanFactory`中。 2. **InstantiationStrategy**:用于...

    Spring Ioc(依赖注入)入门例子--属性注入

    属性注入是指Spring容器将一个对象的属性值设置为另一个对象的引用。这通常用于将服务对象注入到需要使用它们的客户端对象中。在Spring中,有两种主要的属性注入方式:setter方法注入和构造器注入。 1. Setter方法...

    day38 14-Spring的Bean的属性的注入:集合属性的注入

    在Spring框架中,Bean的属性注入是核心功能之一,它允许我们通过配置文件或注解来设置Bean的属性值,从而实现对象的依赖管理。在本主题“day38 14-Spring的Bean的属性的注入:集合属性的注入”中,我们将深入探讨...

    day38 12-Spring的Bean的属性的注入:名称空间p

    Spring还提供了多种注入方式,如`属性值注入`、`引用注入`(注入其他Bean)等。 ### 名称空间p Spring的名称空间`p`是为简化属性注入而设计的一种XML配置语法糖。在传统的XML配置中,我们通常使用`&lt;property&gt;`标签...

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

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

    Spring依赖注入的方式

    设值注入,也称为属性注入,是通过setter方法来注入依赖。当对象已经创建,但还需要添加或修改依赖时,这种方式非常适用。 ```java public class UserService { private UserRepository userRepository; public ...

    关于spring boot中几种注入方法的一些个人看法

    在使用 @Autowired 之前,我们对一个 bean 配置起属性时,是使用 属性名" value=" 属性值"/&gt; 的方式来配置,比较繁琐,而且代码比较多。在 Spring 2.5 引入了 @Autowired 注释,我们平常直接引用的时候很少注意这些...

    spring各种属性的注入

    通过属性注入,可以将一个Bean的某些属性值或者引用其他Bean实例的值注入到当前Bean中。这种方式极大地提高了系统的灵活性和可维护性。 #### 文档概览 本文档主要介绍了在Spring配置文件中如何进行各种类型的属性...

    Spring属性注入

    在Spring中,属性注入(Property Injection)是一种重要的功能,它允许开发者在不直接创建对象的情况下设置对象的属性,从而实现了松耦合和更好的可测试性。 **XML方式的属性注入** 1. **Set注入**:这是Spring ...

    Spring 三种依赖注入方式.doc

    Spring 框架中提供了多种依赖注入方式,其中最常用的三种依赖注入方式分别是接口注入、设值注入和构造函数注入。下面,我们将分别对这三种依赖注入方式进行详细的介绍和分析。 一、接口注入 接口注入是指通过接口...

    Spring (bean怎样注入值)学习实例

    总结来说,Spring通过XML配置进行Bean的值注入,特别是集合类型的注入,能够灵活地管理对象间的依赖关系。这种方式使得代码更易于测试和维护,同时也降低了组件之间的耦合度。在实际开发中,可以根据项目需求选择...

    Spring In Action 属性注入

    设值注入是通过调用对象的setter方法来设置属性值,而构造器注入则是在对象实例化时通过构造函数传递参数。 二、XML配置中的属性注入 在Spring的XML配置文件中,我们可以通过`&lt;bean&gt;`标签的`property`子标签来进行...

Global site tag (gtag.js) - Google Analytics