bean之间的关系:继承、依赖
继承
这里说的继承和java的继承是不一样的,不是父类子类。但思想很相似,是父bean和子bean
1、父bean是一个实例时。它本身是一个完整的bean
2、父bean是模板,抽象bean,不能被实例化,只是来被继承。
当遇到一个类要实例化出很多相似的bean对象时,如下,看起来是不是很不简洁
1 <bean id="address1" class="com.guigu.spring.autowire.Address" 2 p:city="BeiJing" p:street="yihuan"></bean> 3 <bean id="address2" class="com.guigu.spring.autowire.Address" 4 p:city="BeiJing" p:street="erhuan"></bean>
方法① 两个bean除了p:street不一样,其他都一样。可以把一个作为父bean,其它的继承这个bean
1 <bean id="address1" class="com.guigu.spring.autowire.Address" 2 p:city="BeiJing" p:street="yihuan"></bean> 3 <bean id="address2" p:street="erhuan" parent="address1"></bean> 4 // address2等价于: 5 // <bean id="address2"" class="com.guigu.spring.autowire.Address" 6 // p:city="BeiJing" p:street="erhuan"></bean>
这里,第二个就继承了第一个bean,用parent属性,只写自己独有的属性或要覆盖的属性即可。
方法②把相同属性提取出来,做一个抽象bean,专门用来继承
1 <bean id="address1" class="com.guigu.spring.autowire.Address" 2 p:city="BeiJing" p:street="yihuan" abstract="true"></bean> 3 <bean id="address2" p:street="erhuan" parent="address1"></bean>
这样,address2也继承了address1。address1设置了abstract="true",就不能实例化,否则抛异常。
也可以写成这样:
1 <bean id="address1" p:city="BeiJing" p:street="yihuan" abstract="true"></bean> 2 <bean id="address2" class="com.guigu.spring.autowire.Address" p:street="erhuan" parent="address1"></bean>
和上面的不同就是把class属性拿出去了。当很多不是同一个类的bean要继承父bean时,就要这样,在子bean写自己所在的class。
这样写还有一点是,这个父bean一定不能实例化,因为它没有class属性,实例化会跑异常。那就一定要写abstract属性,让spring不实例化它。
依赖---depends-on
用Person类的例子
1 public class Person { 2 private String name; 3 private Car car; 4 5 public String getName() { 6 return name; 7 } 8 public void setName(String name) { 9 this.name = name; 10 } 11 public Car getCar() { 12 return car; 13 } 14 public void setCar(Car car) { 15 this.car = car; 16 } 17 @Override 18 public String toString() { 19 return "Person [name=" + name + ", car=" + car + "]"; 20 } 21 }
有一个属性Car没有配置,那实例化后,它就是null。
1 <bean id="person" class="com.guigu.spring.autowire.Person" 2 p:name="Evan"></bean>
有时,我们需要让某个属性必须存在,就像必填项一样。 用depends-on 依赖
1 <bean id="person" class="com.guigu.spring.autowire.Person" 2 p:name="Evan" depends-on="car"></bean>
这样表示,实例化person一定要依赖car,没有配置car会抛异常
1 <bean id="car" class="com.guigu.spring.autowire.Car" p:brand="Audi" p:price="200000"></bean> 2 <bean id="person" class="com.guigu.spring.autowire.Person" 3 p:name="Evan" depends-on="car"></bean>
这样,依赖的car存在,就可以正常实例化了
优秀不够,你是否无可替代
软件测试交流QQ群:721256703,期待你的加入!!
欢迎关注我的微信公众号:软件测试君

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库