抽象类无法在java中实例化。但春天用abstract="true"
说了一些像豆子一样的东西。如果抽象类的状态仅由其子类实例初始化(我猜我是对的),那么如果我需要在抽象类中定义的方法中使用该属性那么...是否有可能它?我有一组代码如下:
class abstract A {
private Something somethingObj;
// getters and setters are present.
public void logSomething() {
try{
//some code which throws exception
}
catch(Exception e){
somethingObj.logIt(e);// I have some logic inlogIt method.
}
}
}
答案 0 :(得分:94)
Spring中的抽象bean与抽象类有些不同。实际上,Spring中的abstract bean甚至不必映射到任何类。以此为例:
<bean id="dao" abstract="true">
<property name="dataSource" ref="dataSource"/>
<property name="someHelper" ref="someHelper"/>
</bean>
<bean id="fooDao" class="FooDao" parent="dao">
<property name="fooHelper" ref="fooHelper"/>
</bean>
<bean id="barDao" class="BarDao" parent="dao">
<property name="barHelper" ref="barHelper"/>
</bean>
课程:
public class FooDao {
private DataSource dataSource;
private SomeHelper someHelper;
private FooHelper fooHelper;
//setters
}
public class BarDao {
private DataSource dataSource;
private SomeHelper someHelper;
private BarHelper barHelper;
//setters
}
请注意,FooDao
和BarDao
没有任何父类(抽象或非抽象)基类。父抽象bean定义仅用于对公共属性进行分组,因此您可以避免在XML中重复。
另一方面,引入Dao
和FooDao
继承的抽象BarDao
类是个好主意:
public abstract Dao {
protected DataSource dataSource;
protected SomeHelper someHelper;
//setters
}
public class FooDao extends Dao {
private FooHelper fooHelper;
//setters
}
public class BarDao extends Dao {
private BarHelper barHelper;
//setters
}
但仍然dao
bean不必定义类。当几个具体bean具有相同的依赖关系时,将抽象bean视为减少XML重复的一种方法。
答案 1 :(得分:0)
实际上,抽象父bean不是定义类属性所必需的,您可能只需要一个公共属性来进行共享。
根据此tutorial
父bean无法自行实例化,因为它是 不完整,也明确标记为抽象。当一个 这样的定义是抽象的,它只能用作纯模板 bean定义,用作child的父定义 定义