wake-up-neo.net

Was ist im Frühling mit abstract = "true" gemeint?

Abstrakte Klassen können in Java nicht instanziiert werden. Aber der Frühling sagt so etwas wie Bohnenkreation mit abstract="true" aus. Wenn ein Zustand einer abstrakten Klasse nur durch die Instanz der untergeordneten Klasse initialisiert wird (ich denke, ich habe Recht), dann, wenn ich dieses Attribut innerhalb der Methode verwenden muss, die in der abstrakten Klasse definiert ist, dann ... gibt es eine Möglichkeit für es? Ich habe einen Code wie folgt:

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. 
        } 
    }
}
43
Arun

Abstrakte Bohnen im Frühling unterscheiden sich etwas von abstrakten Klassen. In der Tat muss die abstrakte Bohne im Frühling nicht einmal einer Klasse zugeordnet werden. Nehmen Sie dies als Beispiel:

<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>

Und Klassen:

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
}

Beachten Sie, dass FooDao und BarDao keine übergeordnete Basisklasse (abstrakt oder nicht) gemeinsam haben. Die Definition der übergeordneten abstrakten Bean wird nur verwendet, um allgemeine Eigenschaften zu gruppieren , sodass Sie Wiederholungen in XML vermeiden.

Auf der anderen Seite wäre es eine gute Idee, eine abstrakte Dao-Klasse einzuführen, von der sowohl FooDao als auch BarDao erben.

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
}

Dennoch muss dao bean keine Klasse definieren. Mit abstrakten Beans können Sie die Duplizierung in XML reduzieren, wenn mehrere konkrete Beans die gleichen Abhängigkeiten haben.

92

Tatsächlich ist eine abstrakte übergeordnete Bean nicht erforderlich, um Klassenattribute zu definieren. Möglicherweise benötigen Sie nur eine gemeinsame Eigenschaft für die gemeinsame Nutzung.

Nach diesem Tutorial

Die übergeordnete Bean kann nicht alleine instanziiert werden, da sie .__ ist. unvollständig und auch ausdrücklich als abstrakt gekennzeichnet. Wenn ein Die Definition ist so abstrakt, sie kann nur als reine Vorlage verwendet werden Bean-Definition, die als übergeordnete Definition für ein Kind dient Definitionen.

0
Hamedz