Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的事务xml到java配置转换正确吗?_Java_Spring_Spring Java Config - Fatal编程技术网

我的事务xml到java配置转换正确吗?

我的事务xml到java配置转换正确吗?,java,spring,spring-java-config,Java,Spring,Spring Java Config,下面是xml中与事务管理相关的部分 <!-- Transaction Manager --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> <property name="d

下面是xml中与事务管理相关的部分

<!-- Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvice"/>    

<aop:config proxy-target-class="true">

    <aop:pointcut id="transactionalMethods"
        expression="@annotation(org.springframework.transaction.annotation.Transactional)" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionalMethods" />

</aop:config>

这似乎是可行的,但在阅读配置时,我不禁想知道是否应该使用
mode=ASPECTJ
,但当我尝试时,上下文出现了一个异常,即无法注入“具体类”,因为有些东西取决于类而不是接口

我不确定我们为什么要添加那个切入点,或者我们是否要利用它,如果我必须将它重写为切入点,我实际上不确定我应该怎么做

我是否需要添加更多内容以获得对等?这已经一样了吗?如果我需要添加更多,我应该写什么

更新

尝试时

@Configuration
@EnableAspectJAutoProxy( proxyTargetClass = true )
@EnableTransactionManagement( mode = AdviceMode.ASPECTJ )
aspectj本身通过我们的xml配置工作(方面在我们的xml配置中工作)

我会犯这样的错误

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myapp.CatalogItemViewDao com.myapp.ProviderTestHistoryDao.catalogItemViewDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.CatalogItemViewDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 40 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.CatalogItemViewDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)

不,您不需要设置mode=ASPECTJ,除非您希望在自调用调用上应用事务,这意味着从同一类中的另一个方法调用。默认情况下,其他模式代理仅支持通过代理接口从外部传入的调用

在代理模式(默认)下,只有外部方法调用 通过代理进入被拦截。这意味着 自调用,实际上是目标对象中调用 目标对象的另一种方法,不会导致实际的 即使调用的方法标记为 @事务性的。此外,代理必须完全初始化以提供 预期的行为,因此您不应在应用程序中依赖此功能 初始化代码

如果您设置mode=aspectj,它将使用SpringAspectJ,对受影响的类和方法进行字节码修改。但这将要求类路径中存在spring-aspect.jar和CGLIB-jar

以及

如果您只是使用@Transactional注释,则不需要定义任何aop切入点。您只需要定义事务管理器

如果使用ASPECTJ(与spring-aspects-4.x.y.RELEASE.jar一起使用),则不需要切入点定义。
看看前面提到的jar中的
aop.xml
,注释TransactionSpect是在这里定义的。

是的,但我想弄清楚我们定义切入点是否有原因。。。文档中不完全清楚什么会中断自调用。。。我将假设它意味着一个外部方法,没有
@Transactional
调用一个具有
@Transactional
的内部方法,我们在某个地方这样做不会完全让我吃惊。。。这就是为什么我要努力达到平等。。。(还要注意的是,cglib不是spring平台提供的一个dep…正常的aspectj工作需要它,我们有这个工作)。更新了问题和更多信息。嗯。。。更新了问题,包括更多关于我的尝试以及我认为相关的DEP
<context:spring-configured/>
<aop:aspectj-autoproxy/>
[INFO] +- org.springframework.data:spring-data-jpa:jar:1.9.4.RELEASE:compile
[INFO] |  +- org.springframework:spring-orm:jar:4.2.7.RELEASE:compile
[INFO] |  +- org.springframework:spring-context:jar:4.2.7.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-expression:jar:4.2.7.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:4.2.7.RELEASE:compile
[INFO] |  |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  +- org.springframework:spring-beans:jar:4.2.7.RELEASE:compile
[INFO] |  +- org.springframework:spring-core:jar:4.2.7.RELEASE:compile
[INFO] |  \- org.aspectj:aspectjrt:jar:1.8.9:compile
[INFO] +- org.springframework:spring-aspects:jar:4.2.7.RELEASE:compile
[INFO] +- org.aspectj:aspectjweaver:jar:1.8.9:compile
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myapp.CatalogItemViewDao com.myapp.ProviderTestHistoryDao.catalogItemViewDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.CatalogItemViewDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 40 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myapp.CatalogItemViewDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)