我有以下问题:
假设我有一个抽象类,可以说:
public abstract class AbstractHbmDao implements SomeInterface {
@Autowired
protected SessionFactory sessionFactory;
//getters & setters
//interface stuff
}
然后SomeInterface
的几个实现 - > A_Interface
,B_Interface
等等。如果我为每个实现使用相同的SessionFactory
,这是可以的。
问题是我想对不同的实现组使用不同的SessionFactory
,我不想用@Qualifier
指定。由于我需要更改代码,因此定义这些组的灵活性会降低。如果无法使用SessionFactory
注释指定,也可以将@Qualifier
放在抽象类中。
有没有办法在xml bean定义中执行此操作?我尝试通过声明两个SessionFactory
bean并为每个bean引用相应的类,但这仍然会返回NoUniqueBeanDefinitionException
。
答案 0 :(得分:1)
现场注入本身就很脆弱,应尽可能优先使用构造函数注入。这是一个干净的解决方案:在基类上创建一个抽象(protected
)构造函数,它将bean作为参数,并在子类构造函数上使用@Qualifier
。
答案 1 :(得分:0)
使用Field注入的另一种方法是不对基类中的字段进行自动装配,而是创建一个抽象方法来获取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; }
}