首页IT科技springbean的生命周期面试回答(Spring IOC官方文档学习笔记(七)之Bean Definition继承)

springbean的生命周期面试回答(Spring IOC官方文档学习笔记(七)之Bean Definition继承)

时间2025-06-20 15:57:58分类IT科技浏览5708
导读:1.Bean Definition继承...

1.Bean Definition继承

(1) Spring中的bean存在层级关系             ,我们可以定义子bean来继承或覆盖父bean中的某些属性                   ,从而节省编码      ,在此处Spring运用到了模板设计模式             ,如下所示

//自定义了2个bean                    ,ExampleA和ExampleB      ,注意      ,它们之间不存在继承关系                    ,我们这里的继承注意是Bean Definition继承             ,也就是一个bean的一些属性值可能跟另一个bean的某些属性值相同      ,然后通过Bean Definition继承来减少编码                   ,复用一下属性值             ,仅此而已 public class ExampleA { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "ExampleA{" + "name=" + name + \ + ", age=" + age + }; } } public class ExampleB { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "ExampleB{" + "name=" + name + \ + ", age=" + age + }; } } <!-- xml配置文件 --> <beans ...> <bean id="exampleA" class="cn.example.spring.boke.ExampleA"> <property name="name" value="exampleA"></property> <property name="age" value="20"></property> </bean> <!-- 在子bean标签中定义parent属性指向父bean,来继承父bean中的属性值 --> <bean id="exampleB" class="cn.example.spring.boke.ExampleB" parent="exampleA"> <property name="name" value="exampleB"></property> </bean> </beans> //打印这两个bean                   ,可以看到子bean exampleB中的age属性值继承了父bean exampleA的age属性值                   ,两个值都是一样的,为20             ,此外exampleB还覆盖了父bean中的name属性值                   ,为exampleB      ,而非exampleA ExampleA{name=exampleA, age=20} ExampleB{name=exampleB, age=20}

子bean可以继承并添加父bean中的scope, constructor argument values, property values以及method overrides from the parent             ,同时子bean也可以覆盖掉父bean中的scope, initialization method, destroy method或者是static factory method settings为自己指定的值                    ,其余的一些属性如:depends on, autowire mode, dependency check, singleton以及lazy init全部都取决于子bean而与父bean无关

(2) 模板父bean

<beans ...> <!-- 如果一个父bean没有指定class属性      ,同时设置它的abstract为true      ,那么它就是一个模板bean                    ,来供其他的bean进行继承             ,如同java里的抽象类 --> <!-- 此时这个bean只能作为一个模板使用      ,其他的使用方式如使用getBean方法来获取这个bean                   ,都将返回错误             ,因为它没有class属性,不完整                   ,同时容器在初始化时也会忽略这个bean --> <bean id="template" abstract="true"> <property name="name" value="exampleA"></property> <property name="age" value="20"></property> </bean> <!-- exampleB会继承父bean template中name和age的属性值 --> <bean id="exampleB" class="cn.example.spring.boke.ExampleB" parent="template"></bean> </beans>

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
cocos creator typescript(cocos入门3:脚本编程)