8.ApplicationContext常见实现

news/2024/7/7 19:25:36 标签: java, spring

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>
java">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格式的配置文件夹创建

java">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());


    }

基于相对路径也可以:

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

 内部原理:

java"> 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配置类来创建

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());
    }
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());
    }


    @Configuration
    static class Config {
        @Bean
        public Bean1 bean1() {
            return new Bean1();
        }
        @Bean
        public 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环境。

java"> private static void testAnnotationConfigServletWebServerApplicationContext() {
        AnnotationConfigServletWebServerApplicationContext context =
                new AnnotationConfigServletWebServerApplicationContext(WebConfig.class);
        for (String s : context.getBeanDefinitionNames()) {
            System.out.println(s);
        }

    }
java">@Configuration
    static class WebConfig{
        //servlet服务器
        @Bean
        public ServletWebServerFactory servletWebServerFactory() {
            return new TomcatServletWebServerFactory();
        }

        @Bean
        public DispatcherServlet dispatcherServlet() {
            return new DispatcherServlet();
        }

        //将dispatcherServlet给一个路径注册到servlet服务器
        @Bean
        public DispatcherServletRegistrationBean registrationBean(DispatcherServlet dispatcherServlet) {
            return new DispatcherServletRegistrationBean(dispatcherServlet, "/");
        }

        //控制器
        @Bean("/hello")
        public Controller controller1() {
            return (request ,response) -> {
              response.getWriter().print("hello");
              return null;
            };
        }

    }

 


http://www.niftyadmin.cn/n/5534956.html

相关文章

主流 Canvas 库对比:Fabric.js、Konva.js 和 Pixi.js

在前端开发中&#xff0c;HTML5 Canvas 是一个强大的工具&#xff0c;可以用来创建图形、动画和各种视觉效果。为了简化和增强 Canvas 的使用&#xff0c;社区中出现了许多库。本文将对比三种主流的 Canvas 库&#xff1a;Fabric.js、Konva.js 和 Pixi.js&#xff0c;分析它们的…

Firefox 编译指南2024 Windows10篇- 编译Firefox(三)

1.引言 在成功获取了Firefox源码之后&#xff0c;下一步就是将这些源码编译成一个可执行的浏览器。编译是开发流程中的关键环节&#xff0c;通过编译&#xff0c;我们可以将源代码转换为可执行的程序&#xff0c;测试其功能&#xff0c;并进行必要的优化和调试。 对于像Firef…

05 docker 镜像

目录 1. 镜像 2. 联合文件系统 3. docker镜像加载原理 4. 镜像分层 镜像分层的优势 5. 容器层 1. 镜像 镜像是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好行程一个可交付的运行环境&#xf…

【数据结构】(C语言):队列

队列&#xff1a; 线性的集合。先进先出&#xff08;FIFO&#xff0c;first in first out&#xff09;。两个指针&#xff1a;头指针&#xff08;指向第一个进入且第一个出去的元素&#xff09;&#xff0c;尾指针&#xff08;指向最后一个进入且最后一个出去的元素&#xff0…

基于深度学习的动画渲染

基于深度学习的动画渲染是一项利用深度学习技术来提高动画制作效率和质量的前沿研究领域。该技术旨在通过深度学习模型加速动画渲染过程&#xff0c;优化图像质量&#xff0c;并实现复杂效果的自动化生成。以下是关于这一领域的系统介绍&#xff1a; 1. 任务和目标 动画渲染的…

webpack 之 splitChunks分包策略

webpack 之 splitChunks分包策略 一、为什么需要拆包二、拆包方式三、splitChunks介绍四、splitChunks 拆包策略五、总结 一、为什么需要拆包 随着应用程序规模的增长&#xff0c;JavaScript 文件的大小也越来越大。一个大的 JavaScript 文件会导致页面加载时间过长&#xff0…

Java 开发环境配置

配置Java开发环境涉及几个关键步骤&#xff0c;包括安装Java Development Kit (JDK)、配置环境变量和选择集成开发环境&#xff08;IDE&#xff09;。以下是详细的步骤和示例说明&#xff1a; ### 1. 安装 Java Development Kit (JDK) Java JDK 是开发Java应用程序的基本工具…

Vue 循环内部获取图片高度

在vue循环里面获取图片宽度或者高度,有时候会用到,则可以 <div classconmon v-for"(item, index) in items"><router-link :to"{path: /art/details,query:{artid:item.app_id,item_id:item.image_id}}"><img :src"item.src" al…