看下面两个类和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。