首页 > 编程知识 正文

contextconfiguration报错,contextconfiguration注解报错

时间:2023-05-06 15:45:18 阅读:247895 作者:1541

        这个问题很奇怪的是:在跑测试单元的时候通过@ContextConfiguration(classes=xxx.class),然后再通过@Autowired注解后,是可以成功获得对象的。但是当我在dubbo项目中也想通过这样的方式直接获得对象,但是发现不可行,一开始以为可能和下面这篇博文写的有关(Spring整理系列(16)——通过单元测试理解spring容器以及dubbo+zookeeper单元测试异常处理),即既然测试单元的spring容器与主项目的容器是隔离的,那么现在注入失败可能会有两个原因:

        1、没有加载spring容器,2、这个bean没有加载到spring容器中。

           如果是这个bean没有加载到spring容器中则它的修改步骤如下:

        (1)、在applicationContext中添加对应的命名空间,在schemaLocation中需要指定schema:

        “<beans …… 

          xmlns:context="http://www.springframework.org/schema/beans"

          xsi:schemationLocation="……

          http://www.springframework.org/schema/context

          http://www.springframework.org/schema/context/spring-context-3.0.xsd"

           />”

    (2)、在applicationContext中添加<context:component-scan base-package="类路径">

        使得spring可以自动去扫描base-package下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean

        在上述步骤都做了的情况下,那就是获取对象的方式不对,于是去官方文档关于看了@ContextConfiguration这个注解,发现它是用于"定义类级元数据,用于确定如何为集成测试加载和配置ApplicationContext"。。。

        最终在主程序中通过SpringContainer.getContext().getBean(XXX.class)的方式成功获取对象,至于之前用了@Autowired为什么不能注解成功,这个看了一些出现类似问题的文章,发现这篇文章和我的情况是相似的(Spring使用@Resource、@Autowired注入时出现空指针问题的原因)即:

Spring默认都是单例的,new出来的对象,Spring依然不会对它进行装配,只有通过Spring创建的对象才会获得自动装配的功能。

我的代码类似于:

@ComponentScan("package of xxx class ")public xxx class{ private A a; @PostConstruct public void start(){ this.a = new A(); } @Bean public A a(){ return this.a; }}public class A{}//这个是在A.java方法里面

不知道对我这个错误的理解对不对,改天问问大神。而具体要如何“使用new方法创建的对象可以引用spring管理的bean”这个目前用了网上的方法还没有尝试出来。

最终结论是:还是要多读书的,不能再乱来,坑自己。

Linux下的Anaconda的配置无法在Samsung设备上的AndroidStudio3.4.1中运行项目

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。