java在抽象类中注入属性架构设计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java在抽象类中注入属性架构设计相关的知识,希望对你有一定的参考价值。

我们都知道java在抽象类中是不能注入属性的,但是有时候在抽象类中需要调另一个实例bean,如果都在子类中注入,那么当有很多子类时改造会比较大,有什么好的办法就是不需要改动子类来实现?
我想到一种方法是在抽象类和子类之间加一层,用于属性注入,但是这样的话感觉就设计之初就不用搞出抽象类了,所以被我排除了,请教还有没有其他优美的方式?

题主是在用spring做注入?

抽象类是可以用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,
可能是你这个框架 的缺陷。

参考技术B 可以考虑提出来放到工具类中,不一定要放到抽象层。

以上是关于java在抽象类中注入属性架构设计的主要内容,如果未能解决你的问题,请参考以下文章

一篇打通架构设计,Java设计模式9,模板方法模式

手撸golang 架构设计原则 依赖倒置原则

连载06:软件体系设计新方向:数学抽象设计模式系统架构与方案设计(简化版)(袁晓河著)

Java单体应用 - 架构模式 - 03.设计模式-02.抽象工厂模式

软件架构设计-软件架构风格分层架构

依赖倒置如何升华架构设计