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