【Spring学习07】依赖配置:内部对象

本文介绍了内部对象的概念,并通过示例展示了如何在Spring框架中使用内部bean进行依赖注入,包括setter注入和构造注入的方式。

本文博客地址:http://blog.youkuaiyun.com/soonfly/article/details/68928511(转载请注明出处)

内部对象就是对象的里面还有对象。。。。。好象是废话。
比如订单Order中,包含一个消费者Customer。那么Customer就是Order对象的内部对象。(有人叫内部类,我觉得不妥。内部类是指一个类的定义放在另一个类的内部,而这里是一个对象使用了另一个对象作为成员属性

Customer类:

public class Customer {
private String name;
    private String address;
    private int age;

    //getter and setter methods

    @Override
    public String toString() {
        return "Person [address=" + address + ", age=" + age + ", name=" + name + "]";
    }
}

Order类:

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

    public Order(){
        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元");
    }
}

然后在beans.xml定义bean对象

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

    <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" />

如果用构造注入则是:

<bean id="order" class="twm.spring.start.Order">
    <constructor-arg name="customer">
        <bean class="twm.spring.start.Customer">
            <property name="name" value="陈先生"></property>
            <property name="address" value="深圳南山区"></property>
        </bean>
    </constructor-arg>
    <constructor-arg name="orderno" value="201799777799"></constructor-arg>
    <constructor-arg name="notifyservice" ref="notify2"></constructor-arg>
</bean>
<bean id="notifyfactory" class="twm.spring.start.NotifyFactory" />
<bean id="notify2" factory-bean="notifyfactory" factory-method="getNotifyService" />

setter注入和构造注入中,在<property>元素或者<constructor-arg>元素内定义<bean>元素,就是所谓的内部类。
比如当“陈先生”这个用户只用在order2这个bean中使用,就没必要在外面定义“陈先生”这个bean,再通过order2内部的ref引用了。
直接定义在order的<property>元素或者<constructor-arg>元素内定义“陈先生”bean更直观。

内部bean的定义无需id或name;容器会忽略这些属性,也会忽略scope标记。内部通常是匿名的,伴随着外部类(的创建)而创建 。

本文博客地址:http://blog.youkuaiyun.com/soonfly/article/details/68928511(转载请注明出处)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值