spring 中设置作用域为 prototype 和实现 ApplicationContextAware 接口会冲突吗

2018-01-23 19:27:40 +08:00
 choice4

跟着视频看的 实现 ApplicationContextAware 接口后通过方法 的参数获取 Bean 还有一个 JUnit 的测试类应该是 ClassPathXmlApplicationContext 对象 getBean

@Before
public void before() {
    if (StringUtils.isEmpty(springXmlpath)) {
        springXmlpath = "classpath*:spring-*.xml";
    }
    try {
        context = new ClassPathXmlApplicationContext(springXmlpath.split("[,\\s]+"));
        context.start();
    } catch (BeansException e) {
        e.printStackTrace();
    }
}

@After
public void after() {
    context.destroy();
}

@SuppressWarnings("unchecked")
protected <T extends Object> T getBean(String beanId) {
    try {
        return (T)context.getBean(beanId);
    } catch (BeansException e) {
        e.printStackTrace();
        return null;
    }
}

这个类是 UnitTestbase JUnit4 测试类继承了它 在 @Test 的方法下是 super.getBean("xml 中 Bean 的 id")

然后就抛异常是空指针 但是如果作用域是单例就没事 单元测试方法可以运行 实现 ApplicationContextAware 接口后实现的方法也可以运行 但是如果作用域改为 prototype 就会异常两个方法里面的方法体都不会执行 如果把单元测试方法体代码注释掉则不会抛出异常 但是实现接口的方法也不会执行

如果需要代码我再补

1630 次点击
所在节点    Java
1 条回复
choice4
2018-01-24 19:58:24 +08:00
dd 有没大哥说一下呀 一天了还是没想通。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425345

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX