Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RegisterShotDownhook之后的Spring重新启动应用程序上下文_Java_Spring_Javabeans_Applicationcontext - Fatal编程技术网

Java RegisterShotDownhook之后的Spring重新启动应用程序上下文

Java RegisterShotDownhook之后的Spring重新启动应用程序上下文,java,spring,javabeans,applicationcontext,Java,Spring,Javabeans,Applicationcontext,我正在努力学习Spring,所以我是这方面的新手。我在这个测试课上有点迷失,因为我试图用一种方法测试多个主题;我想关闭应用程序上下文,然后重新启动。是否可能?除此之外;我正在尝试修改changeBeanScope行为。我将使用xml配置的测试类更改为使用java配置类。因此,现在我不能使用作用域名称参数。有更好的方法吗?下面是一个测试类 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = LearnSpr

我正在努力学习Spring,所以我是这方面的新手。我在这个测试课上有点迷失,因为我试图用一种方法测试多个主题;我想关闭应用程序上下文,然后重新启动。是否可能?除此之外;我正在尝试修改changeBeanScope行为。我将使用xml配置的测试类更改为使用java配置类。因此,现在我不能使用作用域名称参数。有更好的方法吗?下面是一个测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = LearnSpringConfig.class)
public class BeanScopeTest  {
final String testMessageOne = "Message One";
final String testMessageTwo = "Message Two";
static String beanMessage;

@Autowired
private ApplicationContext  applicationContext;

@Autowired
SingletonBean bean;

@Autowired
SingletonBean beanSingleton;


@Test
public void testBean(){

    bean.setMessage(testMessageOne);
    beanMessage = bean.getMessage();
    assertEquals(testMessageOne,beanMessage);



    beanMessage = beanSingleton.getMessage();
    SingletonBean.singletonBeanLogger.info("Bean Two:"+beanMessage);        
    assertEquals(testMessageOne,beanMessage); //Test SingletonBean

    ((ConfigurableApplicationContext) applicationContext).registerShutdownHook();//Test Bean Lifecyle

    SingletonBean beanThree = new SingletonBean();
    BeanActs.changeBeanScope("scopeBean", "prototype");
    beanThree.setMessage(testMessageTwo);
    SingletonBean.singletonBeanLogger.info("Bean Three:"+beanThree.getMessage());

    SingletonBean beanFour = new SingletonBean();
    beanMessage = beanFour.getMessage();
    SingletonBean.singletonBeanLogger.info("Bean Four:"+beanMessage);       
    assertEquals(null,beanMessage); 
}
我试图用changeBeanScope更改bean类的作用域

    public static void changeBeanScope(String beanID,String scope){
         ApplicationContext context = new ClassPathXmlApplicationContext("file:src/main/resources/Beans.xml");
         BeanDefinitionRegistry registry =  (BeanDefinitionRegistry)context.getAutowireCapableBeanFactory();
         BeanDefinition def = registry.getBeanDefinition(beanID);
         def.setScope(scope);
         registry.registerBeanDefinition(beanID, def);
}
还有我的配置类

@Configuration
@ComponentScan(basePackages = {"learn.spring.LearningSpring"})
public class LearnSpringConfig {

@Bean
public SingletonBean bean(){
    return new SingletonBean();
}   
}