春天的抽象="真实"是什么意思?

Aru*_*run 45 java spring exception java-ee

抽象类无法在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. 
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 96

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>
Run Code Online (Sandbox Code Playgroud)

和课程:

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
}
Run Code Online (Sandbox Code Playgroud)

请注意,FooDao并且BarDao没有任何父类(抽象或非抽象)基类.父抽象bean定义仅用于对公共属性进行分组,因此可以避免在XML中重复.

另一方面,引入Dao既包含FooDaoBarDao继承的抽象类也是一个好主意:

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
}
Run Code Online (Sandbox Code Playgroud)

但是daobean 仍然没有定义类.当几个具体bean具有相同的依赖关系时,将抽象bean视为减少XML重复的一种方法.

  • 需要注意的是,Spring 并不实例化抽象 bean (3认同)