吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Spring_PropertyPathFactoryBean

<?xml version="1.0" encoding="GBK"?>
<project name="spring" basedir="." default="">
    <property name="src" value="src"/>
    <property name="dest" value="classes"/>

    <path id="classpath">
        <fileset dir="../../lib">
            <include name="**/*.jar"/>
        </fileset>
        <pathelement path="${dest}"/>
    </path>

    <target name="compile" description="Compile all source code">
        <delete dir="${dest}"/>
        <mkdir dir="${dest}"/>
        <copy todir="${dest}">
            <fileset dir="${src}">
                <exclude name="**/*.java"/>
            </fileset>        
        </copy>
        <javac destdir="${dest}" debug="true" includeantruntime="yes"
            deprecation="false" optimize="false" failonerror="true">
            <src path="${src}"/>
            <classpath refid="classpath"/>
            <compilerarg value="-Xlint:deprecation"/>
        </javac>
    </target>

    <target name="run" description="Run the main class" depends="compile">
        <java classname="lee.SpringTest" fork="yes" failonerror="true">
            <classpath refid="classpath"/>
        </java>
    </target>

</project>
<?xml version="1.0" encoding="GBK"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <!--下面配置定义一个将要被引用的目标bean-->
    <bean id="person" class="org.crazyit.app.service.Person">
        <property name="age" value="30"/>
        <property name="son">
            <!-- 使用嵌套Bean定义setSon()方法的参数值 -->
            <bean class="org.crazyit.app.service.Son">
                <property name="age" value="11" />
            </bean>
        </property>
    </bean>

    <!-- 将指定Bean实例的getter方法返回值定义成son1 Bean -->
    <bean id="son1" class=
        "org.springframework.beans.factory.config.PropertyPathFactoryBean">
        <!-- 确定目标Bean,指定son1 Bean来自哪个Bean的getter方法 -->
        <property name="targetBeanName" value="person"/>
        <!-- 指定son1 Bean来自目标bean的哪个getter方法,son代表getSon() -->
        <property name="propertyPath" value="son"/>
    </bean>

    <!-- 简化配置
    <util:property-path id="son1" path="person.son"/> -->

    <!-- 下面定义son2 Bean -->
    <bean id="son2" class="org.crazyit.app.service.Son">
        <property name="age">
            <!-- 使用嵌套Bean为调用setAge()方法指定参数值 -->
            <!-- 以下是访问指定Bean的getter方法的简单方式, 
            person.son.age代表获取person.getSon().getAge()-->
            <bean id="person.son.age" class=
                "org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
        </property>
    </bean>

    <!-- 简化配置
    <bean id="son2" class="org.crazyit.app.service.Son">
        <property name="age">
            <util:property-path path="person.son.age"/>
        </property>
    </bean> -->

    <!-- 将基本数据类型的属性值定义成Bean实例 -->
    <bean id="theAge" class=
        "org.springframework.beans.factory.config.PropertyPathFactoryBean">
        <!-- 确定目标Bean,表明theAge Bean来自哪个Bean的getter方法的返回值 -->
        <property name="targetBeanName" value="person"/>
        <!-- 使用复合属性来指定getter方法。son.age代表getSon().getAge() -->
        <property name="propertyPath" value="son.age"/>
    </bean>

    <!-- 简化配置
    <util:property-path id="theAge" path="person.son.age"/> -->

    <!-- 将基本数据类型的属性值定义成Bean实例 -->
    <bean id="theAge2" class=
        "org.springframework.beans.factory.config.PropertyPathFactoryBean">
        <!-- 确定目标Bean,表明theAge2 Bean来自哪个Bean的属性。
            此处采用嵌套Bean定义目标Bean -->
        <property name="targetObject">
            <!-- 目标Bean不是容器中已经存在的Bean, 而是如下的嵌套Bean-->
            <bean class="org.crazyit.app.service.Person">
                <property name="age" value="30"/>
            </bean>
        </property>
        <!-- 指定theAge2 Bean来自目标bean的哪个getter方法,age代表getAge() -->
        <property name="propertyPath" value="age"/>
    </bean>
</beans>
package lee;

import org.springframework.context.*;
import org.springframework.context.support.*;

import org.crazyit.app.service.*;
/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class SpringTest
{
    public static void main(String[] args)
    {
        ApplicationContext ctx = new
            ClassPathXmlApplicationContext("beans.xml");
        System.out.println("系统获取的son1:"
            + ctx.getBean("son1"));
        System.out.println("系统获取son2:"
            + ctx.getBean("son2"));
        System.out.println("系统获取theAge的值:"
            + ctx.getBean("theAge"));
        System.out.println("系统获取theAge2的值:"
            + ctx.getBean("theAge2"));
    }
}
package org.crazyit.app.service;
/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class Person
{
    private int age;
    private Son son;

    // age的setter和getter方法
    public void setAge(int age)
    {
        this.age = age;
    }
    public int getAge()
    {
        return this.age;
    }

    // son的setter和getter方法
    public void setSon(Son son)
    {
        this.son = son;
    }
    public Son getSon()
    {
        return this.son;
    }

}
package org.crazyit.app.service;
/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class Son
{
    private int age;

    // age的setter和getter方法
    public void setAge(int age)
    {
        this.age = age;
    }
    public int getAge()
    {
        return this.age;
    }

    public String toString()
    {
        return "Son[age=" + age + "]";
    }
}
原文地址:https://www.cnblogs.com/tszr/p/12371936.html