春天& AOP:正确获得切入点配置

时间:2014-04-01 07:19:50

标签: spring session transactions aop

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

1 个答案:

答案 0 :(得分:0)

为什么不使用Spring AOP Transactional Management?使用注释,就像使用@Transactional注释您的服务方法一样简单。