springBoot bean的多种加载方式

这篇具有很好参考价值的文章主要介绍了springBoot bean的多种加载方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、通过xml

2、通过注解@Component及其衍生注解@Controller、@Service、@Repository定义bean

    例子:

        @Component

       public void Car{

       }

3、使用@Configuration定义成一个配置类

     @Configuration

      public void Car{

       }

4、实现FactoryBean

       例子:        

public class Car {
}
public class CarFactoryBean implements FactoryBean<Car> {
    @Override
    public Car getObject() throws Exception {
        Car car = new Car();
        //创建这个bean前,在这边可以自定义处理一些业务逻辑
        return car;
    }

    @Override
    public Class<?> getObjectType() {
        return Car.class;
    }

    @Override
    public boolean isSingleton() {
        return FactoryBean.super.isSingleton();
    }
}
@Configuration
public class SpConfig {

    @Bean
    public CarFactoryBean car(){
        return new CarFactoryBean();
    }
}

5、加载配置类并加载配置文件

例子:

public class Car {
}

app.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 id="car" class="com.melax.ailatest.bean.Car"></bean>
</beans>
@Configuration
@ImportResource("app.xml")
public class SpConfig2 {

}

6、使用@Import注解方式导入,被导入的bean无需使用注解申明为bean

public class Car {
}
@Import({Car.class})
public class SpConfig3 {

}

7、导入实现了ImportSelector接口的类,实现了对导入源的编程时处理

示例:

public class Car {
}
public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        //各种条件判断
        boolean b = importingClassMetadata.hasAnnotation("org.springframework.context.annotation.Import");
        System.out.println("flag:"+b);
        if (b){
            return new String[]{"com.melax.ailatest.bean.car"};
        }else {
            return new String[0];
        }

    }
}
@Import({MyImportSelector.class})
public class SpConfig4 {

}

8、导入实现了ImportBeanDefinitionRegistrar接口的类,通过BeanDefinition注册器注册实名bean,实现对容器中bean的裁定,例如对现有bean的覆盖,进而达成不修改源代码的情况下更换实现的效果

public class Car {
}
public class Dog {
}
public class MyImportBeanDefinition implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Dog.class).getBeanDefinition();
        //实现对car bean的覆盖,当前car的对象是dog
        registry.registerBeanDefinition("car",beanDefinition);
    }
}
@Import({MyImportBeanDefinition.class})
public class SpConfig5 {

    @Bean
    public Car car(){
        return new Car();
    }
}

9、导入实现了BeanDefinitionRegistryPostProcessor接口的类,通过BeanDefinition的注册器注册实名bean实现对容器中bean的最终定义文章来源地址https://www.toymoban.com/news/detail-739785.html

public class Car {
}
public class Car2 {

    private String name;

    @Override
    public String toString() {
        return "Car2{" +
                "name='" + name + '\'' +
                '}';
    }
}
public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        //各种条件判断
        boolean b = importingClassMetadata.hasAnnotation("org.springframework.context.annotation.Import");
        System.out.println("flag:"+b);
        if (b){
            return new String[]{"com.melax.ailatest.bean.car"};
        }else {
            return new String[0];
        }

    }
}
@Import({MyPostProcessor.class})
public class SpConfig6 {

    @Bean
    public Car car(){
        return new Car();
    }
}

到了这里,关于springBoot bean的多种加载方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入解析Spring Boot集成MyBatis的多种方式

    🎉欢迎来到架构设计专栏~深入解析Spring Boot集成MyBatis的多种方式 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如

    2024年02月04日
    浏览(35)
  • spring boot项目同时传递参数和文件的多种方式

    在开发接口中,遇到了需要同时接收参数和文件的情况,可以有多种方式实现文件+参数的接收,这里基于spring boot 3 + vue 3 + axios,做一个简单的代码演示。 参数较少时,比较方便,直接参数接受即可 1.1 后端接口 1.2 前端请求 fileAndSimpleParam 为封装的api请求方法,可查看下文的

    2024年02月13日
    浏览(38)
  • 【SpringBoot系列】Spring Boot Bean Factory的生命周期 Spring Boot学习大纲,可以留言自己想了解的技术点

    继续完成既定的任务,走起 可以概括为以下步骤: 资源加载:Spring Boot 应用程序启动时,会扫描指定的路径,加载配置文件和类文件等资源。 配置加载:Spring Boot 会根据配置文件(比如 application.properties)中的配置,创建一个 Environment 对象,用于保存应用程序的配置信息。

    2024年02月05日
    浏览(50)
  • Spring boot项目java bean和xml互转

    工作中需要给下游第三方收费系统做数据挡板,由于下游系统使用的是 soap webservice ,里面涉及各种xml跟bean的互转,在此介绍一下使用的方法。 基于springboot搭建webservice的过程将会在下篇博客介绍 这里介绍两种方法. 使用 jackson 进行互转, Spring boot 项目自带的 json 和 bean 的互

    2024年01月19日
    浏览(37)
  • 【Java Spring】SpringBoot Bean详解

    上一节我们介绍了五大类注解,这一节介绍方法注解@Bean,@Bean作用的对象是方法, 该注解需要搭配五大类注解同时进行使用 ,因为类方法的数量远远大于类的数量,如果使用@Bean注解标记方法的类没有被标记,那么Spring Boot项目在启动时需要遍历所有的类的所有方法,开销无

    2024年04月27日
    浏览(30)
  • SpringBoot面试题8:运行 Spring Boot 有哪几种方式?Spring Boot 需要独立的容器运行吗?

    该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 运行Spring Boot应用有多种方式,具体取决于你的需求和环境。以下是几种常见的运行Spring Boot应用的方式: 使用IDE运行:可以在常用的Java开发环境(如

    2024年02月06日
    浏览(36)
  • Java企业级开发学习笔记(4.4)Spring Boot加载自定义配置文件

    创建 Spring Boot 项目 单击【创建】按钮 在 resources 里创建 myconfig.properties 文件 设置文件编码 设置学生的四个属性值 在 cn.kox.boot 包里创建config子包,在子包里创建 StudentConfig 打开自带的测试类 ConfigDemo01ApplicationTests 注入学生配置实体,创建 testStudentConfig() 测试方法,在里面输

    2024年02月08日
    浏览(37)
  • Spring中Bean加载流程

    BeanDefinition 1.1什么是BeanDefinition? 1.2 BeanDifinition中重要的属性 1.3 BeanDefinition的解析 BeanFactory 2.1 什么是BeanFactory? 2.2 BeanFactory工作流程: Bean生命周期 3.1 什么是Bean生命周期? Bean生命周期是Spring中一个Bean创建过程和销毁过程中所经历的步骤,其中Bean创建过程是重点。 3.2 核

    2024年02月09日
    浏览(28)
  • SpringBoot如何让业务Bean优先于其他Bean加载

    本博客原文地址:https://ntopic.cn/p/2023090901/ 源代码先行: Gitee本文介绍的完整仓库:https://gitee.com/obullxl/ntopic-boot GitHub本文介绍的完整仓库:https://github.com/obullxl/ntopic-boot 今天走读一个应用程序代码,发现一个有趣的现象:有多个不同的业务Bean中均依赖了一个参数工具类Para

    2024年02月09日
    浏览(50)
  • 面试篇-揭开Spring Bean加载的神秘面纱

      启动spring容器(创建beanfactory)-加载配置(注解、xml)-实例化bean(执行构造方法)-注入依赖-初始化bean(设置属性值)-使用-销毁 解析和读取 XML 配置文件或注解配置类,获取 Bean 定义信息。 根据 Bean 定义信息实例化 Bean 对象。根据不同的作用域(如 singleton、prototype 等),S

    2023年04月17日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包