2017-09-15 63 views
1

目前,我正在NetBeans IDE中开发一个使用Spring框架和Maven的应用程序。 当我被使能测试编译,我得到以下错误信息:想不通为什么org.springframework.beans.factory.BeanCreationException

java.lang.IllegalStateException: Failed to load ApplicationContext 
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) 
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) 
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) 
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) 
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:217) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:276) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:278) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:236) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180) 
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [testingContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Must start with Java agent to use InstrumentationLoadTimeWeaver. See Spring documentation. 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1045) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:824) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) 
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:125) 
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60) 
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109) 
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261) 
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) 
... 31 more 
Caused by: java.lang.IllegalStateException: Must start with Java agent to use InstrumentationLoadTimeWeaver. See Spring documentation. 
at org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver.addTransformer(InstrumentationLoadTimeWeaver.java:88) 
at org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.addTransformer(SpringPersistenceUnitInfo.java:82) 
at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:348) 
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343) 
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
... 46 more 

我想不通为什么这个错误发生,以及如何解决它。

我testingContext.xml是遵循

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    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.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 

<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="classpath:jdbc.properties" /> 

<bean id="DataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.url}" 
     p:username="${jdbc.username}" 
     p:password="${jdbc.password}" 
     /> 

<bean id="loadTimeWeaver" class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 

<bean id="jpaVendorAdapter" 
    class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter" 
    p:showSql="true" 
    p:databasePlatform="org.eclipse.persistence.platform.database.MySQLPlatform" /> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    p:dataSource-ref="DataSource" 
    p:jpaVendorAdapter-ref="jpaVendorAdapter" 
    p:persistenceXmlLocation="test-persistence.xml" 
/> 

<!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) --> 
<bean id="transactionManager" 
    class="org.springframework.orm.jpa.JpaTransactionManager" 
    p:dataSource-ref="DataSource" 
    p:entityManagerFactory-ref="entityManagerFactory"/> 

<!-- checks for annotated configured beans --> 
<context:annotation-config/> 

<!-- Scan for Repository/Service annotations --> 
<context:component-scan base-package="com.insure.riskmanage.dao" /> 

<!-- enable the configuration of transactional behavior based on annotations --> 
<tx:annotation-driven /> 

在我的节目,我已经EntityManager的定义已经:

package com.insure.riskmanage.dao; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import org.springframework.transaction.annotation.Propagation; 
import org.springframework.transaction.annotation.Transactional; 

public class GenericFile<T, ID> { 
final protected Logger logger = LoggerFactory.getLogger(this.getClass()); 

@PersistenceContext(unitName = "insurePU") 
protected EntityManager em; 

final private Class<T> type; 

public GenericFile(Class<T> type1) { 
    this.type = type1; 
} 

@Transactional(readOnly = true, propagation = Propagation.REQUIRED) 
public void create(T obj) { 
    em.persist(obj); 
} 

@Transactional(readOnly = true, propagation = Propagation.SUPPORTS) 
public T read(ID id) { 
    return (T) em.find(type, id); 
} 

@Transactional(readOnly = true, propagation = Propagation.REQUIRED) 
public T update(T obj) { 
    obj = em.merge(obj); 
    return obj; 
} 

@Transactional(readOnly = true, propagation = Propagation.REQUIRED) 
public void delete(T obj) { 
    // associate object with persistence context 
    obj = em.merge(obj); 
    em.remove(obj);    
} 
} 

我应该看看还有什么成?有没有人有任何想法?

+1

错误说:* java.lang.IllegalStateException:必须以Java代理程序启动才能使用InstrumentationLoadTimeWeaver。请参阅Spring文档。*。所以,打开文档(https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/)。然后按下Ctrl-F在文档中搜索,搜索“InstrumentationLoadTimeWeaver”,然后执行:有关如何使用InstrumentationLoadTimeWeaver启动Java的说明。 –

回答

2

一个嵌套的例外规定:

java.lang.IllegalStateException:必须使用Java代理开始使用InstrumentationLoadTimeWeaver。参见Spring文档。

从Javadoc的InstrumentationLoadTimeWeaver来看,您需要使用Spring附带的特殊代理启动JVM。

-javaagent:path/to/org.springframework.instrument.jar 
+0

我不想告诉你,我不知道该怎么做。我使用的是NetBeans IDE 8.2,并没有触及任何启动的JVM。 –

0
<bean id="loadTimeWeaver" class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 

是这里的问题。在正常的@Autowiring场景中,通常不需要此bean,请尝试将其删除一次

+0

感谢您的信息。我尝试删除loadTimeWeaver,但我收到一条消息: 警告:在上下文初始化期间遇到异常 - 取消刷新尝试 org.springframework.beans.factory.BeanCreationException:在类路径资源[testingContext中定义的名称'entityManagerFactory'中创建bean时出错。 xml]:调用init方法失败;嵌套异常是java.lang.IllegalStateException:如果没有指定LoadTimeWeaver,则不能应用类变换器。 –

0

谢谢大家对我的问题作出回复。 最后我发现了我得到这个错误的原因。 它在我的pom.xml文件中。有一个标签具有附加字符。 相反的,有一个额外的字符>类似如下:

<artifactId>>maven-surefire-plugin</artifactId> 

不知何故,没有检测,但只是忽略pom.xml文件的其余部分,我想。

相关问题