springBoot容器功能

news2024/9/22 13:27:51

一、添加组件

1、@Configuration

        1.1基本使用

        新建一个MyConfig类 , 演示@Configuration + @Bean的作用 , 即相当于spring中的beanx.xml, @Bean 就是bean标签

        此方法,默认是单实例, 即获取多少次都是同一个对象 

        自定义名字, 可以@Bean("value")

@Configuration  //@Configuration 作用相当于spring中的beans.xml,表示当前类是一个配置类
public class MyConfig {
    @Bean     //@Bean 作用相当于xml中的bean,表示当前方法创建一个对象,并且放入spring容器
    public Pet pet() {  
    //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中
//实例
        return new Pet();
    }

    @Bean
    public User user() {
        return new User();
    }
}
// 声明Spring Boot应用的主类,springBoot从这里启动
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        // 启动Spring Boot应用
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        String[] names = run.getBeanDefinitionNames();
        for(String name: names) {
            System.out.println(name);
        }
    }
}

          

1.2 Full模式与Lite模式

      • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
      • 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式

/**
 * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
 * 2、配置类本身也是组件
 * 3、proxyBeanMethods:代理bean的方法
 *      Full(proxyBeanMethods = true)【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
 *      Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
 *      组件依赖必须使用Full模式默认。其他默认是否Lite模式
 **/

//@Configuration 作用相当于spring中的beans.xml,表示当前类是一个配置类
@Configuration(proxyBeanMethods =true)  //proxyBeanMethods 默认值为true
public class MyConfig {
    @Bean     //@Bean 作用相当于xml中的bean,表示当前方法创建一个对象,并且放入spring容器
    public Pet pet() {
        return new Pet("tomcat");
    }

    @Bean
    public User user01() {
        User user = new User(1,"詹姆思");
        user.setUserPet(pet());
        return new User();
    }
}
// 声明Spring Boot应用的主类,springBoot从这里启动
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        // 启动Spring Boot应用, 返回IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

//      proxyBeanMethods = true
        MyConfig myConfig = run.getBean(MyConfig.class);

        User user3 = myConfig.user01();
        User user4 = myConfig.user01();
        System.out.println(user3.hashCode());
        System.out.println(user4.hashCode());
        System.out.println("user3 等于 user4 吗"+(user3 == user4));
    }
}

 2、@Bean、@Component、@Controller、@Service、@Repository

这几个标签还是跟springMVC中,一样使用。如果返回的是jason 数据, 使用 @RestController

3、@import

 * 4、@Import({User.class, DBHelper.class})
 *      给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
 *
 *
 *
 */

@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
}

意思是加载类到ioc容器(可以理解为该类在被需要使用的项目中,才被加载 )

4、@Conditional条件装配

        解释:@Conditional意思是在满足该注释的条件下,才被装配。 以下是常见条件

示例:一定要注意先声明user01, 后边在声明@ConditionalOnBean(name="user01") !!

这里有顺序的问题。  (麻蛋的,视频中讲的是错误的,坑了我一个钟)

@Configuration  //proxyBeanMethods 默认值为true
//@ImportResource("classpath:beans.xml")  //引入其他的配置类
public class MyConfig {
    @Bean("user01")
    public User user01() {
        return new User();
    }
    @ConditionalOnBean(name = "user01")  //在满足 user01被装配到ioc容器的 情况下,pet才被创建
    @Bean
    public Pet pet01() {
        return new Pet();
    }
}

5、 @ImportResource

在需要引入spring学习中使用的beans.xml时,使用这个注解。

(一般主要还是用@Configuration+@Bean的形式)

6、 @ConfigurationProperties 

属性配置绑定  , 如果是配置spring的类, ,那么使用@EnableConfigurationProperties+@ConfigurationProperties 

/**
 * 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
 */
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {

    private String brand;
    private Integer price;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                '}';
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1369422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

令人绝望的固化和突破-2024-

这是继续写给自己求生之路的记录。 所有成熟稳定的行业都是相对固化的,上升通道及其严苛。 博客 我刚写博客的2015-2017这3年,其实还能带动一些学生,然后部分学生心中有火,眼里有光,也有信心自己做好,还有…

利用“与非”运算实现布尔代数中的与,或,非三种运算

什么是“与非”运算? 要想明白“与非”运算,首先要明白“与”运算和“非”运算。 “与”运算在离散数学中叫做合取式,也就是A和B相同时为1的时候结果才为1,其余情况都为0 下面是“与”运算的真值表 “非”运算在离散数学中叫做否…

2023年阿里云云栖大会:前沿技术发布与未来展望

在2023年的阿里云云栖大会上,我见证了云计算和人工智能领域的又一历史性时刻。这次大会不仅是对未来科技趋势的一次深入探索,更是阿里云技术实力和创新能力的集中展示。 首先,千亿级参数规模的大模型通义千问2.0的发布,无疑将人工…

实战演练 | Navicat 中编辑器设置的配置

Navicat 是一款功能强大的数据库管理工具,为开发人员和数据库管理员提供稳健的环境。其中,一个重要功能是 SQL 编辑器,用户可以在 SQL 编辑器中编写和执行 SQL 查询。Navicat 的编辑器设置可让用户自定义编辑器环境,以满足特定的团…

软件测试|MySQL逻辑运算符使用详解

简介 在MySQL中,逻辑运算符用于处理布尔类型的数据,进行逻辑判断和组合条件。逻辑运算符主要包括AND、OR、NOT三种,它们可以帮助我们在查询和条件语句中进行复杂的逻辑操作。本文将详细介绍MySQL中逻辑运算符的使用方法和示例。 AND运算符 …

GPT Prompts Hub:2024年最新ChatGPT提示词项目,革新对话结构!

🌟 GPT Prompts Hub 🌟 欢迎来到 “GPT Prompts Hub” 存储库!探索并分享高质量的 ChatGPT 提示词。培养创新性内容,提升对话体验,激发创造力。我们极力鼓励贡献独特的提示词。 在 “GPT Prompts Hub” 项目中&#…

解决不同请求需要的同一实体类参数不同(分组校验validation)

问题概述 新增目录是自动生成id&#xff0c;不需要id参数&#xff1b;更新目录需要id&#xff0c;不能为空 pom.xml中已有spring-boot-starter-validation依赖 <!--validation(完成属性限制&#xff0c;参数校验)--><dependency><groupId>org.springframew…

【C语言题解】 | 101. 对称二叉树

101. 对称二叉树 101. 对称二叉树代码 101. 对称二叉树 这个题目要求判断该二叉树是否为对称二叉树&#xff0c;此题与上一题&#xff0c;即 100. 相同的树 这个题有异曲同工之妙&#xff0c;故此题可借鉴上题。 我们先传入需要判断二叉树的根节点&#xff0c;通过isSameTree()…

赠送葡萄酒:为别人选择合适的葡萄酒

葡萄酒可以在许多不同的场合成为很好的礼物&#xff0c;因为它可以用来庆祝许多不同的事情。当被邀请去别人家时&#xff0c;你可以带酒去吃饭。葡萄酒可以用来纪念婚礼、出生、毕业和各种纪念日&#xff0c;来自云仓酒庄品牌雷盛红酒分享这是一个非常合适的专业礼物。但是你怎…

1876_电感的特性小结

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1876_电感的特性小结 主要是…

[开源]万界星空开源MES系统,支持低代码大屏设计

一、开源系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、商业开源低代码MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统、精美的数据大屏。 二、开源协议&#xff1a; 使…

中央处理器CPU(1)----指令周期和微程序

前言&#xff1a;由于期末复习计算机组成效率太慢所以抽时间写一下文章总结一下思路&#xff0c;理解不是很深&#xff0c;欢迎各位不吝赐教。 由于时间不是很充分&#xff0c;所以有些考点由于我们不考试&#xff0c;一笔带过了。 我这是期末复习总结&#xff0c;不是考研知识…

【PostgreSQL】在DBeaver中实现序列、函数、视图、触发器设计

【PostgreSQL】在DBeaver中实现序列、函数、触发器、视图设计 基本配置一、序列1.1、序列使用1.1.1、设置字段为主键&#xff0c;数据类型默认整型1.1.2、自定义序列&#xff0c;数据类型自定义 1.2、序列延申1.2.1、理论1.2.2、测试1.2.3、小结 二、函数2.1、SQL直接创建2.1.1…

Java接口的解析

在 Java 中&#xff0c;接口&#xff08;Interface&#xff09;是一种抽象类型&#xff0c;用于定义一组相关方法的契约。接口只包含方法的签名&#xff0c;而没有方法的实现。实现接口的类必须提供接口中定义的方法的具体实现。 以下是对 Java 接口的解析&#xff1a; 这只是…

Idea启动运行“错误:java: 无效的源发行版: 13”,如何解决?

以上是以JDK1.8的项目作为举例&#xff0c;如果您用的是其他版本请选择对应的language level idea中项目的language level的含义 language level指的是编译项目代码所用的jdk版本。那么&#xff0c;从这个定义出发会有两个小问题。 ❶ 如果project sdk是jdk8&#xff0c;那么la…

信息时代的品牌危机与应对之道:迅腾文化的价值“从心所欲不逾矩”

在瞬息万变的信息时代&#xff0c;企业品牌面临着时代的危机与挑战。在这个时代&#xff0c;自诩能穿透未来迷雾的先知已然无法满足企业的需求&#xff0c;而居安思危、行死而生的“惶者”才是企业所需要的。迅腾文化正是这样的存在&#xff0c;积极倾听企业&#xff0c;融汇未…

开启Android学习之旅-5-Activity全屏

Android 两种方式设置全屏&#xff1a; 1. 第一行代码中的方法 通过 getWindow().getDecorView()方法拿到当前Activity的DecorView,再调用 setSystemUiVisibility() 方法来改变系统UI的显示&#xff0c;这里传入了 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 和 View.SYSTEM_UI_…

在Ubuntu中检查内存的五个命令,总有一种适合你

序言 作为Ubuntu用户,尤其是管理员,我们需要检查系统使用了多少内存资源,以及有多少是可用的。我们还知道,大多数管理任务最好从Linux命令行完成,而不是从图形用户界面完成。例如,服务器通常在shell上工作,没有图形用户界面。由于控制服务器上的内存资源是最重要的,因…

小H靶场笔记:DC-8

DC-8 January 9, 2024 3:26 PM Tags&#xff1a;Drupal&#xff1b;exim提权 Owner&#xff1a;只惠摸鱼 信息收集 apr-scan 和 nmap 扫描C端存活主机&#xff0c;探测靶机ip&#xff1a;192.168.199.138&#xff0c;开放了80和22端口。 扫描开放端口的服务、版本、系统、存…

忆阻器芯片STELLAR权重更新算法(清华大学吴华强课题组)

参考文献&#xff08;清华大学吴华强课题组&#xff09; Zhang, Wenbin, et al. “Edge learning using a fully integrated neuro-inspired memristor chip.” Science 381.6663 (2023): 1205-1211. STELLAR更新算法原理 在权值更新阶段&#xff0c;只需根据输入、输出和误差…