相关疑难解决方法(0)

从另一个方法调用的@Transactional方法不会获得事务

在Spring中,@Transactional如果没有注释的方法,则注释的方法 将获得新事务,但我注意到,如果从非事务性方法调用事务方法,则事务方法不会获取任何事务.这是代码.

@Component
public class FooDao {
    private EntityManager entityManager;

    @PersistenceContext
    protected void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Transactional
    public Object save(Object bean) {
        return this.entityManager.merge(bean);
    }

    public Object saveWrap(Object bean) {
        return save(bean);
    }
}

@Component
public class FooService {
    private FooDao fooDao;

    public void save(Object bean) {
        this.fooDao.saveWrap(bean); // doesn't work.
        this.fooDao.save(bean); // works
    }
}
Run Code Online (Sandbox Code Playgroud)

saveWrap()是一种常规方法,它调用save()哪些是事务性的,但saveWrap()不会保留任何更改.

我正在使用Spring 3和Hibernate 3.我在这里做错了什么?谢谢.

java spring hibernate jpa

22
推荐指数
3
解决办法
1万
查看次数

从对象本身获取AOP代理

有可能在Spring中获取给定对象的代理吗?我需要调用子类的函数.但是,显然,当我直接打电话时,方面不适用.这是一个例子:

public class Parent {

    public doSomething() {
        Parent proxyOfMe = Spring.getProxyOfMe(this); // (please)
        Method method = this.class.getMethod("sayHello");
        method.invoke(proxyOfMe);
    }
}

public class Child extends Parent {

    @Secured("president")
    public void sayHello() {
        System.out.println("Hello Mr. President");
    }
}
Run Code Online (Sandbox Code Playgroud)

我找到了实现这一目标的方法.它有效,但我认为不是很优雅:

public class Parent implements BeanNameAware {

    @Autowired private ApplicationContext applicationContext;
    private String beanName; // Getter

    public doSomething() {
        Parent proxyOfMe = applicationContext.getBean(beanName, Parent.class);
        Method method = this.class.getMethod("sayHello");
        method.invoke(proxyOfMe);
    }
}
Run Code Online (Sandbox Code Playgroud)

aop spring spring-aop

21
推荐指数
3
解决办法
2万
查看次数

标签 统计

spring ×2

aop ×1

hibernate ×1

java ×1

jpa ×1

spring-aop ×1