【问题标题】:Class not eligible for getting processed by all BeanPostProcessors类没有资格被所有 BeanPostProcessor 处理
【发布时间】:2012-09-03 17:43:21
【问题描述】:

在 Maven 中设置 Spring + Spring Data JPA + QueryDSL + JPA 2.0 + Hibernate 的配置时遇到了很多麻烦。我已经解决了很多问题,但是这个让我很头疼=/。

我收到以下异常:

Bean 'dataSource' of type [class org.springframework.jdbc.datasource.DriverManagerDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

我查看了谷歌,大多数时候这个问题是由于缺少注释“@Transactional”引起的。我试图注释我的方法,但它没有解决任何问题。我完全不知道它来自哪里=(。

这是我的测试代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="/applicationContext.xml")
public class BaseTest {

    public BaseTest() {
    }

    @Before
    public void setUp() throws IOException {
        Dataset.loadDatabase();
    }

    @Test
    public void load(){}
}

DataSet 类只是在数据库中进行一些保存以查看它是否正常工作。

我的 ApplicationContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/data/jpa
       http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

        <context:annotation-config/>
        <jpa:repositories base-package="com.ae.repository" />
        <context:component-scan base-package="com.ae.service" />

        <!-- Data Source -->
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
            <property name="url"><value>jdbc:mysql://localhost:3306/academia</value></property>
            <property name="username"><value>root</value></property>
            <property name="password"><value>root</value></property>
        </bean>

        <!-- JPA EntityManagerFactory -->  
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
            <property name="dataSource" ref="dataSource"/>  
            <property name="jpaProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
                    <prop key="hibernate.id.new_generator_mappings">true</prop>
                </props>
            </property>
        </bean>  

        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
            <property name="entityManagerFactory" ref="entityManagerFactory"/>  
        </bean> 
        <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
        <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>   
        <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>  
</beans>

我不确定我的依赖项是否设置正确:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>

        <!-- hibernate + jpa -->
        <dependency>  
            <groupId>org.hibernate</groupId>  
            <artifactId>hibernate-entitymanager</artifactId>  
            <version>4.1.6.Final</version>
        </dependency>  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-log4j12</artifactId>  
            <version>1.6.6</version>  
        </dependency> 
        <dependency>  
            <groupId>org.apache.derby</groupId>  
            <artifactId>derby</artifactId>  
            <version>10.3.2.1</version>  
            <scope>test</scope>  
        </dependency>

        <!-- Spring JPA -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.sql</groupId>
            <artifactId>jdbc-stdext</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>jta</artifactId>
            <version>1.1</version>
        </dependency>

        <!-- MySQL Connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>

        <!-- Query DSL -->
        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>2.7.2</version>
            <scope>provided</scope>
        </dependency>    

        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>2.7.2</version>
        </dependency>

        <!-- Spring Framework -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>

        <!-- Apache commons lang -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <!-- Apache commons IO -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <!-- Other -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.1.2.RELEASE</version>
            <scope>test</scope>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
    </dependencies>

感谢您的阅读;)

【问题讨论】:

  • 您认为这是一个异常吗?还是您的意思是作为日志消息?
  • 如果您收到“Bean 不符合被所有 BeanPostProcessors 处理的条件”,另请参阅 stackoverflow.com/questions/1201726/…

标签: spring hibernate unit-testing jpa-2.0


【解决方案1】:

此警告没有任何意义,您不必担心,因为您不需要对DataSource 应用任何后处理器。

从技术上讲,这意味着某些 bean 后处理器(我猜是事务性的)取决于您的 DataSource,因此必须在初始化该后处理器之前完全初始化 DataSource,以便后处理器无法拦截 DataSource 的初始化。

如果您收到关于您想要应用后处理器的 bean 的此类警告,您需要担心。

【讨论】:

  • 感谢您的回答axtavt!阅读日志的其余部分,我看到在尝试加载数据集后,由于某种原因,它没有使用数据集中提供的信息,而是尝试查找持久性单元文件(META-INF 下的persistence.xml)。如果没有 persistence.xml 测试失败,说明没有找到持久性单元。如果我在 persistence.xml 中重复数据集 bean 中给出的信息,它工作正常,我的数据库就成功创建了。但现在我有另一个问题:
  • "创建名为 'albumServiceImpl' 的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.ae.repository.AlbumRepository com .ae.service.impl.AlbumServiceImpl.albumRepository;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名称为“albumRepository”的 bean 时出错:FactoryBean 在创建对象时抛出异常;嵌套异常是 java.lang.IllegalArgumentException:不是托管类型:com.ae.entity.Album 类。
  • 谷歌说当你有一个抽象类或接口作为一个实体时会发生这种情况,但我的情况不是这样。顺便说一句,我在我的 bean EntityManagerFactory 中遇到了同样的其他错误(不符合所有 BeanPostProcessors 的处理条件),我将忽略它。我将创建另一个关于“非托管类型”问题的问题,也许它与“不符合所有 BeanPostProcessors 处理的条件”问题无关。谢谢;)
  • 嗯,这很奇怪......如果我在我的 persistence.xml 中明确声明 com.ae.Album 类,它就可以工作。我将在 xml 文件中声明我的所有实体,而不仅仅是注释,我想它会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多