【Spring学习08】依赖配置:复合属性

本文博客地址:http://www.jb51.cc/article/p-hhahdidx-bps.html(转载请注明出处)

接着上篇《【Spring学习07】依赖配置:内部对象 》的例子来。其实order的实例化还可以用复合属性来表示:

<bean id="order" class="twm.spring.start.Order">
    <property name="customer.name" value="陈先生" />
    <property name="customer.address" value="深圳南山区" />

    <property name="orderno" value="201799777799"></property>
    <property name="notifyservice" ref="notify2"></property>
</bean>
<bean id="notifyfactory" class="twm.spring.start.NotifyFactory" />
<bean id="notify2" factory-bean="notifyfactory" factory-method="getNotifyService" />

customer.namecustomer.address就叫复合属性
用复合属性,必须保证在order构造函数执行后,customer不能为null,否则抛异常org.springframework.beans.NullValueInNestedPathException

因此这里要注意的,就是order的无参构造函数中是new了一个对象的(开始我也没有注意,而是报了错后才想起要加上
Order类:

public class Order {
    /*comstomer和notifyservice都是Order的内部对象*/
    private Customer customer;
    private String orderno;
    private NotifyService notifyservice;

    public Order(){
        //new了一个对象的
        this.customer=new Customer();
    }
    public Order(Customer customer,String orderno,NotifyService notifyservice) {
        super();
        this.customer = customer;
        this.orderno = orderno;
        this.notifyservice = notifyservice;
    }

    //getter and setter methods......

    /*订单支付完成后,系统通知老板*/
    public void PaySuccess(){
        notifyservice.sendMessage("客户"+customer.getName()+"完成订单"+orderno+"付款,共人民币:97.5元");
    }
}

如果删掉this.customer=new Customer();这句,那么就会报错了:
Caused by: org.springframework.beans.NullValueInNestedPathException

本文博客地址:http://www.jb51.cc/article/p-hhahdidx-bps.html(转载请注明出处)

相关文章

适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题...
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结...
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容...