nev*_*ver 5 java spring transactions
我有一个关于Spring 3.2.3 @Transactional注释的问题.我的服务类看起来像这样:
@Service @Transactional
class InventoryDisclosureBO {
@Autowired InventoryDisclosureDAO inventoryDisclosureDAO;
private static final Logger log = LoggerFactory.getLogger( InventoryDisclosureBO.class);
public void processDisclosureData(InventoryDisclosureStatus data){
  validate(data);
  persist(data);
}
@Transactional(propagation = REQUIRES_NEW)
void persist(InventoryDisclosureStatus data) {
  inventoryDisclosureDAO.setAllInvalid( data.getUnit());
  inventoryDisclosureDAO.insert( data );
}
void validate(InventoryDisclosureStatus data) {
 ...
}
}
如果我调用persist()方法,那么一切都很完美.但是如果我在课堂级别注释掉@Transactional - 事务没有开始.有人能告诉我为什么Spring只能在甲醇水平上忽略@Transactional吗?
您无法从processDisclosureData()调用persist(),因为它属于同一个类,它将绕过Spring为InventoryDisclosureBO创建的事务代理.您应该从其他bean调用它以使@Transactional注释工作.当Spring向其他bean注入InventoryDisclosureBO bean的引用时,它实际上会引入对包含事务逻辑的InventoryDisclosureBOProxy的引用,例如
    class Bean2 {
      @Autowire
      private InventoryDisclosureBO idbo;   <-- Spring will inject a proxy here
      public void persist(InventoryDisclosureStatus data) {
           idbo.persist(data);     <-- now it will work via proxy
      }
...
| 归档时间: | 
 | 
| 查看次数: | 3289 次 | 
| 最近记录: |