1

我有以下问题:

假设我有一个抽象类让我们说:

public abstract class AbstractHbmDao implements SomeInterface {
    @Autowired
    protected SessionFactory sessionFactory;
    //getters & setters

    //interface stuff
}

SomeInterface然后是-> A_Interface,等的几个实现。如果我对每个实现都B_Interface使用相同的,这没关系。SessionFactory

问题是我想对SessionFactory不同的一组实现使用 distinct 并且我不想用@Qualifier. 由于我需要更改代码,因此定义这些组的灵活性会降低。也可以通过将 放在SessionFactory抽象类中,如果无法用@Qualifier注释指定。

有没有办法在 xml bean 定义中做到这一点?我尝试声明两个SessionFactorybean,然后为每个 ref 相应的类,但这仍然会返回NoUniqueBeanDefinitionException.

4

2 回答 2

1

字段注入本身就很脆弱,应尽可能首选构造函数注入。这是干净的解决方案:protected在您的基类上创建一个抽象()构造函数,将您的 bean 作为参数,并@Qualifier在子类构造函数上使用。

于 2014-10-19T18:53:17.067 回答
0

使用字段注入的另一种方法是不在基类中自动装配字段,而是创建一个抽象方法来获取 SessionFactory 并在子类中自动装配字段。

public abstract class AbstractHbmDao implements SomeInterface {
    protected abstract SessionFactory getSessionFactory();
}

在子类中实现这个方法:

public MyDao extends AbstractHbmDao {
    @Autowired
    @Qualifier("my-qualifier")  // add qualifier as needed now
    private SessionFactory sessionFactory;

    protected SessionFactory getSessionFactory() { return sessionFactory; }
}
于 2017-03-10T09:04:37.500 回答