`
sunxboy
  • 浏览: 2831548 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring高级注入之属性值注入

阅读更多

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

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

实体类:

package Bean.superIOCparam;

public class Person {
   private Son son;
   private String age;
public String getAge() {
    return age;
}
public void setAge(String age) {
    this.age = age;
}
public Son getSon() {
    return son;
}
public void setSon(Son son) {
    this.son = son;
}
}


package Bean.superIOCparam;

public class Son {
  private String age;

public String getAge() {
    return age;
}

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

 配置文件:提供四种注入

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <bean id="person" class="Bean.superIOCparam.Person" singleton="false">
     <property name="age">
        <value>30</value>
     </property>
     <property name="son">
        <bean class="Bean.superIOCparam.Son">
           <property name="age">
              <value>16</value>
           </property>
        </bean>
     </property>
  </bean>
  
  <!--如下将会将person的属性son的属性age传入son1实例的age属性-->
    <bean id="son1" class="Bean.superIOCparam.Son">
        <property name="age">
          <!--以下是访问bean属性的简单方式,这样可以将person这个bean的age属性赋值给son1这个bean的age属性-->           
         <bean id="person.son.age" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
        </property>
    </bean>
    
    <!-- 以下将会获得结果son,它将是person bean的son的数值-->
    <bean id="son2" class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
       <property name="targetBeanName">
         <value>person</value>
       </property>
       <property name="propertyPath">
         <value>son</value>
       </property>
    </bean>
    
     <!-- 以下将会获得结果16,它将是person bean的son的age属性-->
    <bean id="son3" class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
       <property name="targetBeanName">
         <value>person</value>
       </property>
       <property name="propertyPath">
         <value>son.age</value>
       </property>
    </bean>
    
    <!-- 以下会获得结果为30 ,它将是获得该bean的内部bean的age属性-->
    <bean id="son4" class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
        <property name="targetObject">
            <bean class="Bean.superIOCparam.Person">
                <property name="age"><value>30</value></property>
            </bean>
        </property>
        <property name="propertyPath"><value>age</value></property>
    </bean>
</beans>

 测试代码:

public static void main(String[] args) throws Exception {
        
        String path=new Test().getClass().getResource("/").getPath();
        String realpath=path.substring(1, path.length());
        ApplicationContext context=new FileSystemXmlApplicationContext(realpath+"/superIOCparam.xml");
        Son son1=(Son)context.getBean("son1");
        Son son2=(Son)context.getBean("son2");

        System.out.println("person age is:"+son1.getAge());
        System.out.println("person age is:"+son2.getAge());
        System.out.println(context.getBean("son3"));
        System.out.println(context.getBean("son4"));
    }

 

运行结果:

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

分享到:
评论

相关推荐

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

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

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

    主要介绍了结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    spring 实例的工厂方法 依赖注入属性,都使用property 元素确

    spring练习 刚刚学spring,做了个小小小项目,来加深理解。... ·其他依赖注入属性,都使用property 元素确定参数值。 Person.java PersonFactory.java Chinese.java American.java bean.xml SpringTest.java

    高级开发spring面试题和答案.pdf

    spring 三种注入(就是从spring容器中将bean放入对象属性值中) Spring下描述依赖关系@Resource, @Autowired和@Inject的区别与联系 Spring中BeanFactory和ApplicationContext的区别 谈谈Spring IOC的理解,原理与...

    Spring中利用配置文件和@value注入属性值代码详解

    主要介绍了Spring中利用配置文件和@value注入属性值代码详解,代码中注释比较详细,具有一定参考价值,需要的朋友可以了解下。

    spring(一)–概念和历史/hellospring/IOC创建对象的方式/Spring配置/set注入/c命名和p命名空间注入/bean的作用域

    文章目录一、概念和历史二、hellospring三、IOC创建对象的方式四、Spring配置五、set注入–属性注入六、c命名和p命名空间注入七 、bean的作用域 一、概念和历史 Spring的形成,最初来自Rod Jahnson所著的一本很有...

    spring杂谈 作者zhang KaiTao

    1.12 如何为spring代理类设置属性值 1.13 我对SpringDAO层支持的总结 1.14 我对SpringDAO层支持的总结 1.15 我对SpringDAO层支持的总结 1.16 我对Spring 容器管理事务支持的总结 1.17 我对Spring 容器管理事务支持的...

    Spring相关测试1全部

    Spring中注入属性值细节、自动装配、bean之间的关系、bean的作用域、使用外部属性文件、SpEL、IOC容器中Bean 的生命周期、泛型依赖注入。

    spring.net中文手册在线版

    使用对象或类的属性值进行注入 4.3.5.2.使用字段值进行注入 4.3.5.3.使用方法的返回值进行注入 4.3.6.IFactoryObject接口的其它实现 4.3.6.1.Log4Net 4.3.7.使用depends-on 4.3.8.自动装配协作对象 4.3.9.检查依赖项...

    Spring-Reference_zh_CN(Spring中文参考手册)

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...

    Spring.zip

    Spring注入基本值,Spring注入集合和数组,利用Spring初始化数据库连接池,Spring 表达式读取对象(Bean、数组、Map、Properties)的属性值,bean的注入方式等。

    Spring 2.0 开发参考手册

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    Spring文件的上传和下载

    基于Spring的Web项目,涉及的要点、servlet的注入和使用,spring上下文对象的获得和使用,以及配置属性文件properties中属性值的获得,最后通过前台首页显示,实现文件的上传和下载

    Spring中文帮助文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 ...

    Spring API

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 ...

    Spring.3.x企业应用开发实战(完整版).part2

    5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级的国际化信息资源 5.6 容器事件 5.6.1 Spring事件类结构 5.6.2 解构Spring事件体系的具体实现 5.6.3 一个实例 5.7 小结 第6章...

    Spring.net框架

    t.InvokeMember(prop.propertyName, ........BindingFlags.SetProperty, null, o, new Object[] {p})利用反射机制对创建出来的对象设置属性值。 我们的Factory就是利用这种方式根据配置文件动态加载程序集,动态创建...

    spring chm文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    spring02-6

    spring中属性注入,可以将值卸载property文件中然后读取

    spring自动装配例子

    (2)byName:根据属性 名 自动装配,设值注入 &lt;bean id="xxx" class="xxx" &gt;&lt;/bean&gt; (3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 &lt;bean class="xxx" &gt;&lt;/bean&gt; (4)constructor:与 ...

Global site tag (gtag.js) - Google Analytics