1、@Configuration、@Bean、@Import()、@ImportResource()、@Conditional

  • 分析源码的时候总会见到标题中的这几个注解,因此:弄一篇博客来说明一下吧,方便分析源码

  • 我的项目结构如下

  • 源码说明如下


package cn.zixieqing.testannotation; import ch.qos.logback.core.db.DBHelper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.*; /**
* @ClassName Test
* @Author ZiXieQing
* @Date 2021/11/28
* Version 1.0
**/ /*
* 1、@Configuration 和 @Bean搭配
* @Configuration 表明被注解的类是一个配置类 也就是代指:以前的application.xml文件
* 这个注解可以跟一个属性 proxyBeanMethods = false / true
* 为true时 表示:full模式 即:把用了这个注解的东西丢到IOC容器中去 并且:是一个单例的 底层默认是这个
* 为false时 表示:lite模式 即:和full相反 丢到IOC容器中的东西不是单例的,也就是:每次都不一样嘛
* 开发中这两种模式的最佳搭配:
* 1、当前的这个配置类中的其他组件之间没有依赖关系时,就用lite模式 这样springboot启动会快得多
* 2、当前的这个配置类中的其他组件之间有依赖关系时,就用full模式,如:如:紫邪情组件 要依赖 money组件
*
* @Bean 指的是:把用了这个注解的东西 丢到spring的IOC容器中去 和以前的application.xml中的<bean>标签是一样的
*
* 2、@Import() 导入组件 底层是一个接口 ()里面的参数是一个Class[] -----> Class<?>[] value()
* 指的是:把某一个组件导入到spring的IOC容器中去,导入之后我们就可以直接从容器中拿了
*
* 3、@ImportResource() 指的是:导入资源文件( 配置文件 ) 简单来说:就是以前玩spring中编写的application.xml文件
* 用了这个注解之后,就可以不采用这种注解的方式,而是用以前的xml配置文件的形式编写配置
*
* 4、@ConditionalOnBean() 专业名词:条件装配 指的是:有xxxx某个对象时 才装配到IOC容器中去
* ()里面一般使用 对象值 和 对象名字 Class<?>[] value() / String[] name()
* Conditional标记方式还有其他的
*
* */ @Configuration(proxyBeanMethods = true) // 表明这是一个配置
@Import(DBHelper.class) // 这样就把这个DBHelper组件给导入到我们当前的IOC容器中来了,我们需要的时候就可以直接拿了
@ImportResource("classpath:application.xml")
@ConditionalOnBean(name = "zixieqing.class")
public class Test { @Bean // 把test1丢到IOC容器中去
public void test1() { System.out.println("就简单的输出一个话吧"); }
}

2、附1:@Conditional中的另外注解说明

  • 注:ctrl + H 快捷键的意思为:显示当前类的层次结构

3、附2:配置绑定

  • 如何使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用?这个其实在前面见过一种,就是使用@ConfigurationProperties注解,这里把几种方式都补充完整吧

3.1、使用@ConfigurationProperties


/**
* 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
* 所以使用了@Component注解,表明当前类是一个组件
* 简单粗暴理解:把当前类丢到Ioc容器中去
*/
@Component
@ConfigurationProperties(prefix = "car") // 这个car就是properties中配置的car对象的键值对,如:car.brand=BYD
// 这样car需要的属性会和properties中的自动对应
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 +
'}';
}
}

3.2、@EnableConfigurationProperties

  • 这种方式:适合导入第三方配置,假如:第三方的配置没有用自动装配的相关注解,即:没有丢到Ioc容器中去,那么我们我想要在某个地方用的时候就无法引用进来,因此:可以使用这个注解
  • 这个注解有两个作用:注 这个注解必须放在配置类中,即:使用@Configuration
  • 1、开启属性配置绑定功能( 如:例子中的绑定Car类的属性 )
  • 2、把组件自动注册到容器中( 如:例子中的Car,用了这个注解就可以把Car丢到Ioc容器中去 )

@EnableConfigurationProperties(Car.class)
public class MyConfig {
}

4、附4、@Configuration、@Bean、@Component、@Controller、@Service、@Repository几个注解的关系

14 - springboot的@Configuration、@Bean、@Import()、@ImportResource()、@Conditional说明的更多相关文章

  1. Spring学习(14)--- 基于Java类的配置Bean 之 @ImportResource & @Value 注解

    学习如何使用@ImportResource 和 @Value 注解进行资源文件读取 例子: 先创建一个MyDriverManager类(模拟读取数据库配置信息) package com.beanann ...

  2. spring-boot-2.0.3源码篇 - @Configuration、Condition与@Conditional

    前言 开心一刻 一名劫匪慌忙中窜上了一辆车的后座,上车后发现主驾和副驾的一男一女疑惑地回头看着他,他立即拔出枪威胁到:“赶快开车,甩掉后面的警车,否则老子一枪崩了你!”,于是副驾上的男人转过脸对那女的 ...

  3. Spring学习(13)--- 基于Java类的配置Bean 之 @Configuration & @Bean注解

    基于Java配置选项,可以编写大多数的Spring不用配置XML,但有几个基于Java的注释的帮助下解释.从Spring3.0开始支持使用java代码来代替XML来配置Spring,基于Java配置S ...

  4. 2、组件注册-@Configuration&@Bean给容器中注册组件

    2.组件注册-@Configuration&@Bean给容器中注册组件 2.1 创建maven项目 spring-annotation pom.xml文件添加 spring-context 依 ...

  5. spring注解开发:Configuration&Bean

    1.使用xml创建bean的方式 1.首先新建一个maven工程,添加如下依赖 <dependency> <groupId>org.springframework</gr ...

  6. Unable to load configuration. - bean - jar: ....struts2-core-2.1.8.1.jar!/struts-default.xml:47:178

    摘录的异常代码: 2013-12-14 22:42:07 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error严重: Dis ...

  7. 自学Zabbix10.1 Configuration export/import 配置导入导出

    自学Zabbix10.1 Configuration export/import 配置导入导出 通过导入/导出zabbix配置文件,我们可以将自己写好的模板等配置在网络上分享,我们也可以导入网络上分享 ...

  8. 品Spring:SpringBoot轻松取胜bean定义注册的“第一阶段”

    上一篇文章强调了bean定义注册占Spring应用的半壁江山.而且详细介绍了两个重量级的注册bean定义的类. 今天就以SpringBoot为例,来看看整个SpringBoot应用的bean定义是如何 ...

  9. springBoot 动态注入bean(bean的注入时机)

    springBoot 动态注入bean(bean的注入时机) 参考博客:https://blog.csdn.net/xcy1193068639/article/details/81517456

随机推荐

  1. Go并发编程--Mutex/RWMutex

    目录 一.前言 二. Mutex 2.1 案例 三. 实现原理 3.1 锁的实现模式 3.2 Go Mutex 实现原理 3.2.1 加锁 3.2.2 解锁 四. 源码分析 4.1 Mutex基本结构 ...

  2. JAVA笔记11__File类/File类作业/字节输出流、输入流/字符输出流、输入流/文件复制/转换流

    /** * File类:文件的创建.删除.重命名.得到路径.创建时间等,是唯一与文件本身有关的操作类 */ public class Main { public static void main(St ...

  3. Java项目中集成钉钉机器人推送消息提醒

    前言: 项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯). 操作: 主要分为两部分进行处理: ...

  4. python中的itertools模块简单使用

    itertools 高效循环下创建循环器的标准库 Infinite itertools,无限迭代器 itertools.count(start=0, step=10) 默认返回一个从0开始,依次+10 ...

  5. WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)

    系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...

  6. Jenkins 邮件发送

    1.jenkins新建任务 2.配置svn 3.maven项目构建配置pom.xml 使用maven命令 clean test 构建前清除: 4.系统管理 => 插件管理 =>可选安装邮件 ...

  7. Oracle SQL注入 总结

    0x00 Oracle基础 Oracle 基本使用 什么是Oracle数据库? Oracle公司目前是世界上最大的软件提供商之一,与它并列的还有 Microsoft与 Adode.并且随着 Oracl ...

  8. (一)初识MySQL

    JavaEE:企业级Java开发  Web 前端(页面:展示,数据) 后台(连接点,连接数据库JDBC,链接前端(控制,控制视图跳转和给前端传递数据)) 数据库(存数据,Txt,Excel,word) ...

  9. <互联网时代>观感

    <互联网时代>这部纪录片描绘了互联网从上世纪70年代到现在的整个发展过程,讲述了互联网带给我们生活的方方面面的变化,互联网技术在短短二,三十年的商业化浪潮中,以前所未有的速度谱写着改变世界 ...

  10. Asp.net core自定义依赖注入容器,替换自带容器

    依赖注入 在asp.net core程序中,众所周知,依赖注入基本上贯穿了整个项目,以通用的结构来讲解,控制器层(Controller层)依赖业务层(Service层),业务层依赖于仓储层(Repos ...