如何在spring中自动装配通用bean?
我有一个dao工具如下:
@Transactional
public class GenericDaoImpl<T> implements IGenericDao<T>
{
private Class<T> entityClass;
@Autowired
private SessionFactory sessionFactory;
public GenericDaoImpl(Class<T> clazz) {
this.entityClass = clazz;
}
...
}
现在我想像这样自动装载DaoImpl:
@Autowired
GenericDaoImpl<XXXEntity> xxxEntityDao;
我在spring xml中配置:
<bean id="xxxEntityDao" class="XXX.GenericDaoImpl">
<constructor-arg name="clazz">
<value>xxx.dao.model.xxxEntity</value>
</constructor-arg>
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
但是我没有工作,我该如何配置呢?关于通用Dao工具的一个好习惯?
答案 0 :(得分:1)
使用您的界面而不是实现
不要在持久层中使用@Transactional,因为它更有可能属于您的服务层。
正如所说的那样,扩展通用dao并自动装配可能更有意义。一个例子是:
public interface UserDao extends GenericDao<User> {
User getUsersByNameAndSurname(String name, String surname);
... // More business related methods
}
public class UserDaoImpl implements UserDao {
User getUsersByNameAndSurname(String name, String surname);
{
... // Implementations of methods beyond the capabilities of a generic dao
}
...
}
@Autowired
private UserDao userDao; // Now use directly the dao you need
但如果你真的想以这种方式使用它,你必须声明一个限定符:
@Autowired
@Qualifier("MyBean")
private ClassWithGeneric<MyBean> autowirable;
答案 1 :(得分:0)
还有另一种方式。
我将GenericDaoImpl<T>
更改为没有Generic的公共类,但在函数中使用泛型
level,entityClass
可以在spring xml中配置。