abstract =“true”是什么意思在春天? [英] What is meant by abstract="true" in spring?

查看:189
本文介绍了abstract =“true”是什么意思在春天?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

抽象类不能在java中实例化。但是春天说的是像 abstract =true这样的bean创建。如果抽象类的状态仅由其子类实例初始化(我猜我是对的),那么如果我需要在抽象类中定义的方法中使用该属性,那么...有可能它?我有一组代码如下:

  class abstract A {
private Something somethingObj;
// getter和setter存在。

public void logSomething(){
try {
//一些引发异常的代码
}
catch(异常e){
somethingObj.logIt(e); //我有一些逻辑inlogIt方法。
}
}
}


解决方案

Spring中的抽象bean与抽象类有些不同。实际上,Spring中的抽象bean甚至不必映射到任何类。以此为例:

 < bean id =daoabstract =true> 
< property name =dataSourceref =dataSource/>
< property name =someHelperref =someHelper/>
< / bean>

< bean id =fooDaoclass =FooDaoparent =dao>
< property name =fooHelperref =fooHelper/>
< / bean>
< bean id =barDaoclass =BarDaoparent =dao>
< property name =barHelperref =barHelper/>
< / bean>

和课程:

  public class FooDao {
private DataSource dataSource;
private SomeHelper someHelper;
私人FooHelper fooHelper;

// setters
}

public class BarDao {
private DataSource dataSource;
private SomeHelper someHelper;
私人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中的重复的一种方式。


Abstract classes cannot be instantiated in java. But spring says something like bean creation with abstract="true". If a state of an abstract class is initialised only by its child class instance(i guess i am right), then if i need to use that attribute inside the method which is defined in the abstract class then... is there a possibility for it? I have a set of code as follows:

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

解决方案

Abstract beans in Spring are somewhat different from abstract classes. In fact, abstract bean in Spring doesn't even have to be mapped to any class. Take this as an example:

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

And classes:

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
}

Note that FooDao and BarDao do not have any parent (abstract or not) base class in common. Parent abstract bean definition is used only to group common properties, so you avoid repetition in XML.

On the other hand introducing abstract Dao class that both FooDao and BarDao inherit from would be a good idea:

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
}

But still dao bean doesn't have to define a class. Treat abstract beans as a way to reduce duplication in XML when several concrete beans have same dependencies.

这篇关于abstract =“true”是什么意思在春天?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆