java在抽象类中注入属性架构设计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java在抽象类中注入属性架构设计相关的知识,希望对你有一定的参考价值。
我们都知道java在抽象类中是不能注入属性的,但是有时候在抽象类中需要调另一个实例bean,如果都在子类中注入,那么当有很多子类时改造会比较大,有什么好的办法就是不需要改动子类来实现?
我想到一种方法是在抽象类和子类之间加一层,用于属性注入,但是这样的话感觉就设计之初就不用搞出抽象类了,所以被我排除了,请教还有没有其他优美的方式?
抽象类是可以用spring注入属性的。我的代码中有个这样的例子:
<bean id="BaseEventAction" class="com.sinosig.evaluation.fcff.web.event.BasicEventAction"
abstract="true" parent="BaseAction">
<property name="rowFactory" ref="FcffCacheAdapter" />
<property name="caculate" ref="CaculateService" />
<property name="diffusion" ref="DeffusionService" />
</bean>
<bean id="MethodChangedAction"
class="com.sinosig.evaluation.fcff.web.event.MethodChagedAction"
scope="prototype" parent="BaseEventAction" />
public abstract class BasicEventAction extends BaseAction implements
EventAction
……
public class MethodChagedAction extends BasicEventAction
……
spring框架中的 abstract="true" 是告诉spring框架不要去实例化这个类而已。但是在spring的配置中,仍然会有相关的注入属性的配置。子类的配置会继承父类的配置,然后spring框架再根据子类的最终配置去实例化和注入。 参考技术A 首先纠正你一个错误。
抽象内是可以有它自己的属性的。
所以你完全可以将一些共通的属性写在抽象内里面。追问
这个学过java的人都知道。答非所问。
追答那 麻烦 把问题 说的清楚些
在spring 中:
Spring中注入抽象bean
一般情况下是很简单的,是在标签中写入abstract=true就可以的
有可能会出现这样的情况:
定义个抽象类 A
我们在A里面注入了两个属性 B和C
其中B和C也在标签定义
此时我们需要有一个具体的实现类AA继承自A抽象类
同时我们在AA中新添加了一个属性D,同时这个D也需要Sping注入进来。
无奈了,我的题目中明确写着 [这种方法被我排除了,请教还有没有其他优美的方式?] 答题的前提是仔细看题,你说的方法我相信谁都知道,万一一个抽象类有100个实现类,这种做法不是要在每个子类中都注入么?因为抽象类在编译之后已经不再存在,所以按照最常规的java思想,每个子类当然是要注入的,只是代码在结构上有没有其他的优美方式能够不这么干。这个问题没你想的那么简单。
追答不用 SSH 很久了,抱歉。
追问。。。这是java core + Spring,不是完全的ssh。。。
追答在做VB个C,
可能是你这个框架 的缺陷。
以上是关于java在抽象类中注入属性架构设计的主要内容,如果未能解决你的问题,请参考以下文章
连载06:软件体系设计新方向:数学抽象设计模式系统架构与方案设计(简化版)(袁晓河著)