我有一个自己初始化的bean,我想让这个方法变成事务性的。
class Foo {
@Transcational
void method() {
}
}
class BeanConfig {
// programatically initilized
AutowareCapableBeanFactory beanFactory;
void doSomething() {
Foo foo = new Foo();
beanFactory.autowireBean(foo);
foo.method();
}
}
使用这种方法,@autowired
可以在foo.class
中工作,但是@transactional
仍然不能工作,但是如果我使用spring托管bean,事务可以工作,回滚和数据库锁定都可以工作。
问题是spring使用动态代理实现@Transactional,但是您自己调用Foo的contructor,因此这里不涉及代理
您可以使用Spring的TransactionTemplate来解决这个问题
Foo foo = new Foo();
beanFactory.autowireBean(foo);
context.getBean(TransactionTemplate.class).execute(() -> {
foo.method();
});
注意:这个问题可能与Vaadin有关,也可能与Vaadin无关,这取决于是否有“更好的”解决方案来“重置”bean。 背景场景 我正在构建一个用于输入一些值的向导,当这些值完成时,将发送到一个表(使用Vaadin和加载项“Wizards for Vaadin”)。 该加载项没有提供一种方法来重置向导(即返回到步骤1)而不强制调用当前steps(重写)onAdvance()和onBack()方法,这
我坚持从普通Java到Spring的简单重构。应用程序有一个“容器”对象,该对象在运行时实例化其部分。让我用代码解释一下: 基本上,在加载容器期间,要求一些外部系统向他提供关于每个的数量和配置的信息,然后它根据给定的规范创建bean。 问题是:通常当我们在Spring这样做的时候 我们的对象已完全配置,并已注入所有依赖项。但是在我的例子中,我必须实例化一些对象,在我执行load()方法后,这些对象
是否可以在Spring Boot中集成Spring托管Hibernate拦截器(http://docs.jboss.org/Hibernate/orm/4.3/manual/en-us/html/ch14.html)? 我正在使用Spring Data JPA和Spring Data REST并需要一个Hibernate拦截器来处理实体上特定字段的更新。 对于标准的JPA事件,不可能获得旧值,因此
问题内容: 我通过定义一个托管属性将一个托管bean注入另一个托管bean遇到了一些麻烦。我正在谷歌搜索和stackoverflow 3天,但没有结果… 我正在使用Eclipse 4.2进行开发并将其部署到集成的Tomcat 7中 那么,谁能告诉我,为什么我的财产为空? pom.xml web.xml 我已经在applicationContext中设置了可扫描@Autowired注释的bean。(
问题内容: 我坚持了从纯Java到Spring的简单重构。应用程序具有一个“容器”对象,该对象在运行时实例化其部分。让我用代码解释一下: 基本上,在装入容器时,它要求某个外部系统向他提供有关每个RuntimeBean的数量和配置的信息,然后根据给定的规范创建bean。 问题是:通常在春季时 我们的对象已完全配置,并注入了所有依赖项。但就我而言,我必须实例化一些对象,这些对象在执行load()方法后