GVKun编程网logo

SpringBeanAutowiringSupport不会在jUnit测试中注入bean(spring单元测试无法注入bean)

30

如果您对SpringBeanAutowiringSupport不会在jUnit测试中注入bean和spring单元测试无法注入bean感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Spring

如果您对SpringBeanAutowiringSupport不会在jUnit测试中注入beanspring单元测试无法注入bean感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解SpringBeanAutowiringSupport不会在jUnit测试中注入bean的各种细节,并对spring单元测试无法注入bean进行深入的分析,此外还有关于@Autowired注释无法在JUnit类中注入bean、Error creating bean with name ''org.springframework.aop.support.DefaultBeanFactoryPointcutAdvi...、Error creating bean with name ‘org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0‘、java – Jax-ws,spring和SpringBeanAutowiringSupport的实用技巧。

本文目录一览:

SpringBeanAutowiringSupport不会在jUnit测试中注入bean(spring单元测试无法注入bean)

SpringBeanAutowiringSupport不会在jUnit测试中注入bean(spring单元测试无法注入bean)

我使用SpringBeanAutowiringSupport在某些对象中进行bean注入。问题是,在jUnit测试中无法注入bean。为了进行测试,使用了SpringJUnit4ClassRunner。

public class DossierReportItemXlsImporterImpl implements DossierRerportItemXlsImporer {    private final Logger logger = Logger.getLogger(getClass());    // are not autowired.    @Autowired    private DossierReportService dossierReportService;    @Autowired    private DossierReportItemService dossierReportItemService;    @Autowired    private NandoCodeService nandoCodeService;    public DossierReportItemXlsImporterImpl(){        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);    }    //...}public class DossierRerportItemXlsImporerTest extends AuditorServiceTest{    // injected OK    @Autowired    private DossierReportService dossierReportService;    @Autowired    private DossierReportItemService dossierReportItemService;    @Test    public void testXlsImport(){        DossierRerportItemXlsImporer importer = new DossierReportItemXlsImporterImpl();        importer.processImport(createDossierReport(), loadFile());        // ...    }  // ...}

有谁知道,为什么使用注入SpringBeanAutowiringSupport在jUnit测试中不起作用?

答案1

小编典典

感谢M. Denium的帮助,他的解决方案得以奏效。

public class DossierReportItemXlsImporterImpl implements DossierRerportItemXlsImporer {    private final Logger logger = Logger.getLogger(getClass());    @Autowired    private DossierReportService dossierReportService;    @Autowired    private DossierReportItemService dossierReportItemService;    @Autowired    private NandoCodeService nandoCodeService;    public DossierReportItemXlsImporterImpl(final ApplicationContext contex){        contex.getAutowireCapableBeanFactory().autowireBean(this);    }    //...} public class DossierRerportItemXlsImporerTest extends AuditorServiceTest{        @Autowired        private ApplicationContext context;        @Autowired        private DossierReportService dossierReportService;        @Autowired        private DossierReportItemService dossierReportItemService;        @Test        public void testXlsImport(){            DossierRerportItemXlsImporer importer = new DossierReportItemXlsImporterImpl(context);            importer.processImport(createDossierReport(), loadFile());            // ...        }      // ...    }

@Autowired注释无法在JUnit类中注入bean

@Autowired注释无法在JUnit类中注入bean

我的测试课:

public class myTest extends TestCase{@AutowiredBeanClass beanObjectpublic void beanTest(){Classdata data = beanObject.getMethod();}}

我在行上得到一个空指针异常:

Classdata data = beanObject.getMethod();

beanObject.getMethod();精确的给出空指针异常

如何使Junit类中的beanObject字段自动装配成为可能,以便可以使用“ BeanClass”类中的方法?


从评论中复制:

用简单的术语来说.. beanClass是具有某些方法的接口..我用@Service("beanObject")
注释标记了该beanClass。.banClass
是由具有方法实现的beanClassImpl类实现的。.我需要在我的testClass中使用这些实现来获取要比较的数据..为此,我正在@Autowired我的testClass..mi中执行
beanClass beanObject。

答案1

小编典典

您可能需要用以下注释装饰测试:

@ContextConfiguration(locations = {/* your xml locations here */})@RunWith(SpringJUnit4ClassRunner.class)

或者,如果您使用JUnit 3.x,则应从 AbstractJUnit38SpringContextTests

参考:
TestContext支持类

更新: 问题似乎是找不到上下文文件(请参阅注释中的讨论)。

用简单的术语来说.. beanClass是具有某些方法的接口..我已经用@Service(“
beanObject”)注解标记了该beanClass。.banClass是由具有方法实现的beanClassImpl类实现的。.我需要使用那些方法我的testClass中的实现以获取要比较的数据..为此,我正在testClass中执行@Autowired
beanClass beanObject。

更多更新:

不要注释接口,不要注释实现类。注释界面@Service无效!

Error creating bean with name ''org.springframework.aop.support.DefaultBeanFactoryPointcutAdvi...

Error creating bean with name ''org.springframework.aop.support.DefaultBeanFactoryPointcutAdvi...

 

  昨晚在 使用 spring aop, 然后 Tomcat 启动的时候, 报了这么个错:

 

  

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0'': Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableBeanFactory.getSingletonMutex()Ljava/lang/Object;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.aop.framework.autoproxy.BeanFactoryAdvisorRetrievalHelper.findAdvisorBeans(BeanFactoryAdvisorRetrievalHelper.java:92)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors(AbstractAdvisorAutoProxyCreator.java:101)
    at org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.shouldSkip(AspectJAwareAdvisorAutoProxyCreator.java:103)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:249)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:984)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:955)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:466)
    ... 55 more
Caused by: java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableBeanFactory.getSingletonMutex()Ljava/lang/Object;
    at org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor.resetAdviceMonitor(AbstractBeanFactoryPointcutAdvisor.java:81)
    at org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor.setBeanFactory(AbstractBeanFactoryPointcutAdvisor.java:76)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1593)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1561)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    ... 67 more
- Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''dataSourceRead'' defined in file [E:\code-test\jdd-admin\target\jdd_admin-1.0-SNAPSHOT\WEB-INF\classes\spring\applicationContext-mysql.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0'': Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableBeanFactory.getSingletonMutex()Ljava/lang/Object;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:472)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5118)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5634)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1863)
    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.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)
    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.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
    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 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:361)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0'': Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableBeanFactory.getSingletonMutex()Ljava/lang/Object;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.aop.framework.autoproxy.BeanFactoryAdvisorRetrievalHelper.findAdvisorBeans(BeanFactoryAdvisorRetrievalHelper.java:92)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findCandidateAdvisors(AbstractAdvisorAutoProxyCreator.java:101)
    at org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.shouldSkip(AspectJAwareAdvisorAutoProxyCreator.java:103)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:249)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:984)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:955)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:466)
    ... 55 more
Caused by: java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableBeanFactory.getSingletonMutex()Ljava/lang/Object;
    at org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor.resetAdviceMonitor(AbstractBeanFactoryPointcutAdvisor.java:81)
    at org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor.setBeanFactory(AbstractBeanFactoryPointcutAdvisor.java:76)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1593)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1561)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    ... 67 more
五月 04, 2018 10:16:38 下午 org.apache.catalina.core.StandardContext startInternal

 

 

  我的 aop 切面代码也很简单,精简后如下:

  

 1 public class DataSourceExchange implements MethodBeforeAdvice, AfterReturningAdvice {
 2 
 3     private static Logger logger = LoggerFactory.getLogger(DataSourceExchange.class);
 4 
 5     @Override
 6     public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
 7         logger.info(method.getName()+" clear datasouceType");
 8         DataSourceContext.clearDbType();
 9     }
10 
11     @Override
12     public void before(Method method, Object[] objects, Object o) throws Throwable {
13         logger.info(method.getName()+" switch datasouceType");
14     }
15 
16 }

 

  后来在网上查了下, 好像是 spring beans 的版本不对,我看了下我用的是 4.1.6.RELEASE, 后来我改成了 4.3.2.RELEASE, 启动就 OK 了。

Error creating bean with name ‘org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0‘

Error creating bean with name ‘org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0‘

解决方案:

请在 pom.xml 添加 依赖包
 

        <dependency>
            <groupId>org.aspectj</groupId >
            <artifactId>aspectjweaver</artifactId >
            <version>1.6.11</version >
        </dependency>

 

java – Jax-ws,spring和SpringBeanAutowiringSupport

java – Jax-ws,spring和SpringBeanAutowiringSupport

虽然在我的@Webservice类中
我扩展了 SpringBeanAutowiringSupport,自动装配根本不适用于Spring 2.5,
tomcat6中.

什么都没注入.

我在main方法中测试了那些bean自动装配,使用classpathcontext,一切都注入正常.
但不适用于jax-ws端点.

你有想法吗?

解决方法

我猜你正在使用这个配置元素:

<context:annotation-config />

但要启用对@Endpoint注释的支持,必须添加以下元素:

<context:component-scan base-package="" />

今天关于SpringBeanAutowiringSupport不会在jUnit测试中注入beanspring单元测试无法注入bean的分享就到这里,希望大家有所收获,若想了解更多关于@Autowired注释无法在JUnit类中注入bean、Error creating bean with name ''org.springframework.aop.support.DefaultBeanFactoryPointcutAdvi...、Error creating bean with name ‘org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0‘、java – Jax-ws,spring和SpringBeanAutowiringSupport等相关知识,可以在本站进行查询。

本文标签: