当前位置: 首页 > 面试题库 >

PersistenceAnnotationBeanPostProcessor根本没有用吗?

空浩淼
2023-03-14
问题内容

根据其JavaDoc,PersistenceAnnotationBeanPostProcessor似乎负责注入带有@PersistenceContext注释的EntityManager。似乎暗示没有在Spring应用程序上下文xml中声明此bean,@
PersistenceContext批注将不起作用。

但是,根据我的实验,这不是事实。

Persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL" />
</persistence>

Spring应用程序上下文XML

<context:component-scan base-package="com.test.dao" />

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceUnitName" value="default"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true"/>
            <property name="generateDdl" value="true"/>
            <property name="databasePlatform" value="org.hibernate.dialect.DerbyDialect"/>
        </bean>
    </property>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver"/>
    <property name="url" value="jdbc:derby://localhost:1527/c:\derbydb\mydb"/>
    <property name="username" value="APP"/>
    <property name="password" value="APP"/>
</bean>

<tx:annotation-driven/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<!-- 
    <bean id="persistenceAnnotation" class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
 -->

UserDaoImpl

@Repository("userDao")
public class UserDaoImpl implements UserDao {

    @PersistenceContext
    protected EntityManager entityManager;

    @Transactional
    public void save(User user) {
            entityManager.persist(user);
    }
}

无论我注释还是取消注释persistenceAnnotation bean,结果都是相同的。离开bean并没有什么伤害,但是这个bean有什么用?

我正在使用Spring 3.0.5。

有人可以提供一个场景,取出这个bean会导致失败吗?

我也不喜欢仅仅为了愚弄Spring而创建一个空的持久性单元。幸运的是,此问题已在Spring 3.1.0中解决。


问题答案:

PersistenceAnnotationBeanPostProcessor透明地激活<context:component-scan />元件。确切地说,<context:annotation-config />是激活bean
的元素,但是该元素又被透明地激活<context:component-scan />



 类似资料:
  • 我正在使用VS代码,我已经尝试了两个小时了。从技术上讲,我应该预装pip,因为我使用的是3.8.2,尽管当我尝试下载并安装它(从https://bootstrap.pypa.io/get-pip.py)时,没有任何东西,当我在cmd中键入pip help/pip - version并安装Pip时,也不会出现任何东西。它没有安装。有帮助吗?

  • 前言 写这篇文章的目的是经常看到开发人员说:把字符串转化为JSON对象,把JSON对象转化成字符串等类似的话题,所以把之前收藏的一篇老外的文章整理翻译了一下,供大家讨论,如有错误,请大家指出,多谢。 正文 本文的主题是基于ECMAScript262-3来写的,2011年的262-5新规范增加了JSON对象,和我们平时所说的JSON有关系,但是不是同一个东西,文章最后一节会讲到新增加的JSON对象。

  • 我遇到了与Flink EventTime处理水印类似的问题-9223372036854725808。然而,建议的解决方案(设置并行度和禁用检查点)没有任何效果。在本例中,我只是将1000个事件以1秒的间隔流式传输,然后将事件时间戳与ctx进行比较。timerService()。currentWatermark()

  • 我有一个依赖于另一个函数的函数,而不是测试依赖关系,我只想测试依赖函数的特定结果。然而,当我存根函数时,什么都不会发生,返回的结果就好像我从来没有存根函数一样。 示例代码:

  • 我在返回带有指定对象根名的对象列表时遇到了一些麻烦。我试过几种不同的方法。我确信我正在做一件像往常一样难以置信的愚蠢的事情,我很感激任何帮助。 这是我的东西

  • 问题内容: Ember.js REST适配器期望JSON返回为: 但是我的API返回的数据 没有根元素 : 是否可以自定义REST适配器,使其接受我的JSON数据?现在,它显示“ 断言失败:您的服务器返回了一个带有键0的哈希,但是您没有映射 ” 更新: 根据下面的Sherwin Yu的答案,这是我想出的,到目前为止似乎仍然有效:https : //gist.github.com/richardka