当前位置: 首页 > news >正文

8.ApplicationContext常见实现

ClassPathXmlApplicationContext

基于classpath下xml格式的配置文件来创建

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean class="com.xkj.org.ApplicationContextA.Bean1" id="bean1"></bean><bean class="com.xkj.org.ApplicationContextA.Bean2" id="bean2"><property name="bean1" ref="bean1"></property></bean>
</beans>
package com.xkj.org;import org.springframework.context.support.ClassPathXmlApplicationContext;public class ApplicationContextA {public static void main(String[] args) {testClassPathXmlApplicationContext();}private static void testClassPathXmlApplicationContext() {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");String[] beanDefinitionNames = context.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println(beanDefinitionName);}Bean2 bean2 = context.getBean(Bean2.class);System.out.println(bean2.getBean1());}static class Bean1 {}static class Bean2 {private Bean1 bean1;public Bean1 getBean1() {return bean1;}public void setBean1(Bean1 bean1) {this.bean1 = bean1;}}
}

FileSystemXmlApplicationContext

基于磁盘路径下xml格式的配置文件夹创建

private static void testFileSystemXmlApplicationContext() {FileSystemXmlApplicationContext context =new FileSystemXmlApplicationContext("D:\\projects\\reggie_take_out\\src\\main\\resources\\bean1.xml");String[] beanDefinitionNames = context.getBeanDefinitionNames();for (String beanDefinitionName: beanDefinitionNames) {System.out.println(beanDefinitionName);}Bean2 bean2 = context.getBean(Bean2.class);System.out.println(bean2.getBean1());}

基于相对路径也可以:

 FileSystemXmlApplicationContext context =new FileSystemXmlApplicationContext("src\\main\\resources\\bean1.xml");

 内部原理:

 DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();System.out.println("读取之前...");String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println(beanDefinitionName);}System.out.println("读取之后...");XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);reader.loadBeanDefinitions(new ClassPathResource("bean1.xml"));for(String name: beanFactory.getBeanDefinitionNames()) {System.out.println(name);}

AnnotationConfigApplicationContext

基于java配置类来创建

private static void testAnnotationConfigApplicationContext() {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);for (String s : context.getBeanDefinitionNames()) {System.out.println(s);}Bean2 bean2 = context.getBean(Bean2.class);System.out.println(bean2.getBean1());}
private static void testAnnotationConfigApplicationContext() {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);for (String s : context.getBeanDefinitionNames()) {System.out.println(s);}Bean2 bean2 = context.getBean(Bean2.class);System.out.println(bean2.getBean1());}@Configurationstatic class Config {@Beanpublic Bean1 bean1() {return new Bean1();}@Beanpublic Bean2 bean2(Bean1 bean1) {Bean2 bean2 = new Bean2();bean2.setBean1(bean1);return bean2;}}static class Bean1 {}static class Bean2 {private Bean1 bean1;public Bean1 getBean1() {return bean1;}public void setBean1(Bean1 bean1) {this.bean1 = bean1;}}

AnnotationConfigServletWebServerApplicationContext

基于java配置类来创建,用于web环境。

 private static void testAnnotationConfigServletWebServerApplicationContext() {AnnotationConfigServletWebServerApplicationContext context =new AnnotationConfigServletWebServerApplicationContext(WebConfig.class);for (String s : context.getBeanDefinitionNames()) {System.out.println(s);}}
@Configurationstatic class WebConfig{//servlet服务器@Beanpublic ServletWebServerFactory servletWebServerFactory() {return new TomcatServletWebServerFactory();}@Beanpublic DispatcherServlet dispatcherServlet() {return new DispatcherServlet();}//将dispatcherServlet给一个路径注册到servlet服务器@Beanpublic DispatcherServletRegistrationBean registrationBean(DispatcherServlet dispatcherServlet) {return new DispatcherServletRegistrationBean(dispatcherServlet, "/");}//控制器@Bean("/hello")public Controller controller1() {return (request ,response) -> {response.getWriter().print("hello");return null;};}}

 

相关文章:

  • 【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验15 网络故障导致的路由环路问题
  • CPU通过网络将IP camera的RTSP流(H.264编码或是H.265编码)拉回, 交给GPU解码并显示的处理流程
  • 浅聊权限系统设计模型
  • vite+vue3+nginx配置统一公共前缀
  • 尚硅谷k8s 2
  • 航空数据管控系统-②项目分析与设计:任务1:需求分析-项目场景引入
  • HarmonyOS APP应用开发项目- MCA助手(Day02持续更新中~)
  • React@16.x(48)路由v5.x(13)源码(5)- 实现 Switch
  • 手动访问mongo和ES插入和查询
  • Flutter——最详细(Drawer)使用教程
  • MySQL InnoDB Cluster 高可用集群部署
  • ​浅谈 Linux 中的 core dump 分析方法
  • 【软件测试】Postman接口测试基本操作
  • AI一键音频转文字工具 速度超快,支持实时转换,无需联网,本地整合包下载
  • 2024年中国网络安全市场全景图 (2024.7)
  • [笔记] php常见简单功能及函数
  • 【翻译】babel对TC39装饰器草案的实现
  • 2019年如何成为全栈工程师?
  • Android系统模拟器绘制实现概述
  • Computed property XXX was assigned to but it has no setter
  • Github访问慢解决办法
  • IP路由与转发
  • Java编程基础24——递归练习
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • js中forEach回调同异步问题
  • REST架构的思考
  • uni-app项目数字滚动
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 手写双向链表LinkedList的几个常用功能
  • 写代码的正确姿势
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #Lua:Lua调用C++生成的DLL库
  • #pragam once 和 #ifndef 预编译头
  • (33)STM32——485实验笔记
  • (MATLAB)第五章-矩阵运算
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (七)c52学习之旅-中断
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)fock函数详解
  • (转载)Google Chrome调试JS
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ****三次握手和四次挥手
  • .apk文件,IIS不支持下载解决
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NetCore部署微服务(二)
  • .NET关于 跳过SSL中遇到的问题
  • /3GB和/USERVA开关
  • @Autowired和@Resource的区别
  • @ConditionalOnProperty注解使用说明