目录
1.ClassPathXmlApplicationContext 是可刷新的
步骤1:在ClassPathXmlApplicationContext的refresh()方法之前不修改spring.xml文件
步骤2:在ClassPathXmlApplicationContext的refresh()方法之修改spring.xml文件
2.AnnotationConfigApplicationContext是不可以刷新的
2.1下AnnotationConfigApplicationContext的使用
3.AnnotationConfigWebApplicationContext(集成了config的作用,也能读取配置文件的内容)
1.ClassPathXmlApplicationContext 是可刷新的
spring容器的refresh()方法:刷新重启spring容器,然后去重新读取配置文件spring.xml的内容
步骤1:在ClassPathXmlApplicationContext的refresh()方法之前不修改spring.xml文件
如下:
SpringTestApplicationTests类
package com.wd; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.support.ClassPathXmlApplicationContext; @SpringBootTest class SpringTestApplicationTests { @Test void contextLoads() { } public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml"); Object user = applicationContext.getBean("user"); System.out.printf(user.toString()); applicationContext.refresh(); Object user1 = applicationContext.getBean("user"); System.out.printf(user1.toString()); } }
spring.xml配置文件
1.1先从ClassPathXmlApplicationContext 中获取user,是能获取到的,
1.2debug模式到ClassPathXmlApplicationContext的 refresh()刷新方法(此处先不剖析Spring源码的refresh()方法),然后再从容器中获取user,仍然是可以获取到的。
步骤2:在ClassPathXmlApplicationContext的refresh()方法之修改spring.xml文件
2.1先从ClassPathXmlApplicationContext 中获取user,是能获取到的,
2.2debug模式到ClassPathXmlApplicationContext的 refresh()刷新方法之前,先去修改spring.xml文件(将user注释掉 )
结果依然可以获取到user,为什么?
原因:因为我改的是.java文件,我应该是改的是target里面编译的.class文件,于是我就重新跑一边,去修改执行在执行reflesh()方法之前去修改编译后的文件
再去容器中获取bean的时候就报错了,容器中没有该bean对象。
结论:
ClassPathXmlApplicationContext.refresh()方法能够去刷新容器,修改配置文件后,容器重新去读取配置文件的内容,然后再将最新的配置文件的内容加载到容器中。2.AnnotationConfigApplicationContext是不可以刷新的
结论:AnnotationConfigApplicationContext是不支持reflesh()方法:
2.1下AnnotationConfigApplicationContext的使用学习借鉴地址:
spring注解开发AnnotationConfigApplicationContext的使用
配置类Config:
package com.wd.config; import com.wd.model.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Config { @Bean(name = "user") public User user(){ User user = new User(); return user; } }
SpringTestApplicationTests类:
package com.wd; import com.wd.config.Config; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @SpringBootTest class SpringTestApplicationTests { @Test void contextLoads() { } public static void main(String[] args) { // ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml"); AnnotationConfigApplicationContext annotation = new AnnotationConfigApplicationContext(Config.class); Object user = annotation.getBean("user"); System.out.printf(user.toString()); annotation.refresh();// 刷新容器,然后去重新读取配置文件spring.xml的内容 Object user1 = annotation.getBean("user"); System.out.printf(user1.toString()); } }
Config类里面定义的user是能够获取到的
3.AnnotationConfigWebApplicationContext(集成了config的作用,也能读取配置文件的内容)AnnotationConfigWebApplicationContext 可以像AnnotationConfigApplicationContext读取配置类的方式,也可以像ClassPathXmlApplicationContext读取配置文件的方式
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)