【发布时间】:2014-04-01 07:19:50
【问题描述】:
看下面两个类和AOP配置,我不确定这是否正确?我在 PartnerService 上配置了一个切入点,但只使用 PartnerDao 中的会话。这会安全地开始我可以在 PartnerDao 中使用的新会话(和事务)吗?
这是我的课
PartnerService.java:
public class PartnerService {
private PartnerDao dao;
public void setDao(PartnerDao dao) {
this.dao = dao;
}
PartnerDao getDao() {
return dao;
}
public List<Partner> getPartners() {
return getDao().getPartners();
}
public void createPartner(Partner partner) {
getDao().createPartner(partner);
}
}
PartnerDao.java
public class PartnerDao {
private HibernateTemplate template;
public void setSessionFactory(SessionFactory sessionFactory) {
this.template = new HibernateTemplate(sessionFactory);
}
HibernateTemplate getTemplate() {
return template;
}
public List<Partner> getPartners() {
return getTemplate().execute(new HibernateCallback<List<Partner>>() {
@Override
public List<Partner> doInHibernate(Session s) throws HibernateException {
Criteria c = s.createCriteria(Partner.class);
return c.list();
}
});
}
public void createPartner(Partner partner) {
getTemplate().save(partner);
}
}
现在,我想使用 AOP 来管理事务。我在 applicationContext.xml 中有以下 AOP 配置:
<aop:config>
<aop:pointcut id="serviceMethods" expression="within(com.company.pas.service.*)"/>
<aop:advisor advice-ref="companyTransactionAdvise" pointcut-ref="serviceMethods"/>
</aop:config>
如果您查看我的 AOP 配置,我正在为 PartnerService(位于 com.company.pas.service)配置一个切入点。但是,我只处理 PartnerDao 中的会话。我实例化这些类的方式是我有一个 ServiceFactory,它返回一个带有自动装配的 PartnerDao 实例的 PartnerService。
【问题讨论】:
标签: spring session transactions aop