1、@Configuration

在以前我们给容器里面加组件的时候,通常都在配置文件里面写出这样的效果

<bean id="person" class="com.lili.entity.Person"><property name="name" value="张三"/>
</bean>

而现在有了这个注解,我们就可以在java代码上实现注册bean的功能了,

具体写法如下:

@Configuration// 表名此类是一个配置类
public class MyConfig {@Bean // 给容器里添加组件,方法名为组件的id,返回类型就是组件类型public Person getPerson(){return new Person("张三");}
}

补充:获取的组件默认是单实例的,配置类本身也是一个组件

2、@Import

@Import({Person.class})
@Configuration
public class MyConfig {@Beanpublic Person getPerson(){return new Person("张三");}
}

说明:@Import注解,里面参数是一个Class类型的数组,比如@Import({Person.class})会给容器中自动创建出这个类型的组件

测试:

ConfigurableApplicationContext run = SpringApplication.run(Springboot01Application.class, args);
String[] beanNamesForType = run.getBeanNamesForType(Person.class);
// 打印所有Person类型的bean
System.out.println(Arrays.toString(beanNamesForType));

输出

[com.lili.entity.Person, getPerson]

3、@Conditional

解释:条件装配,满足Conditional指定的条件,则进行组件注入

这里我就拿@ConditionalOnBean举例,

@Import({Person.class})
@Configuration
public class MyConfig {@Bean@ConditionalOnBean(name = "getDog")public Person getPerson(){return new Person("张三");}
}

如果容器里没有id为getDog的bean,也就不会创建id为getPerson的bean,反之会装配成功,我们测试一下

@SpringBootApplication
public class Springboot01Application {public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(Springboot01Application.class, args);System.out.println("getPerson " + run.containsBean("getPerson"));System.out.println("getDog " + run.containsBean("getDog"));}
}

运行

getPerson false
getDog false

显然和我们预想结果一样,条件不满足,装配未成功,接下来我们修改一下把getDog注入容器中

@Import({Person.class})
@Configuration
public class MyConfig {@Beanpublic Dog getDog(){return new Dog();}@Bean@ConditionalOnBean(name = "getDog")public Person getPerson(){return new Person("张三");}
}

结果:

getPerson true
getDog true

4、@ImportResource

解释:用于导入xml里面的bean

xml文件

<bean id="person" class="com.lili.entity.Person"><property name="name" value="张三"/>
</bean>

导入使用

@ImportResource("classpath:beans.xml")
@Configuration
public class MyConfig {@Beanpublic Dog getDog(){return new Dog();}
}

5 、@ConfigurationProperties

解释:配置绑定,读取properties文件中的内容,绑定到javabean里面,以便随时使用

使用:prefix表示前缀

@ConfigurationProperties(prefix = "person.lili")
public class Person {private String name;public String getName() {return name;}public Person(String name) {this.name = name;}public Person() {}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +'}';}
}

在properties文件中进行赋值:

person.lili.name=丽丽

编写controller:

@RestController
public class HelloController {@Autowiredprivate Person person;@RequestMapping("/getPerson")public Person getPerson(){return person;}
}

结果:

{
"name": "丽丽"
}

springboot的底层注解【详细】相关推荐

  1. Springboot中@SuppressWarnings注解详细解析

    目录 前言 1. 源码 2. 抑制警告的值 2. 代码示列 前言 @SuppressWarnings注解屏蔽一些错误警告,但不是代码错误,这个注解可以提高代码的安全性,防止为了解决这个错误警告而造成不 ...

  2. SpringBoot学习笔记整理详细

    写在前面:欢迎来到「发奋的小张」的博客.我是小张,一名普通的在校大学生.在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们 ...

  3. SpringBoot整合Mybatis超详细流程

    SpringBoot整合Mybatis超详细流程 文章目录 SpringBoot整合Mybatis超详细流程 前言 详细流程 0.引入Mybatis 1.创建数据 2.创建程序目录 3.理解后台访问流 ...

  4. Spring Boot 2.1.5(25)---SpringBoot基于WebFlux注解

    Spring Boot 2.1.5(25)---SpringBoot基于WebFlux注解 Spring 5通过引入一个名为Spring WebFlux的全新反应框架,采用了反应式编程范式. Spri ...

  5. springboot + 拦截器 + 注解 实现自定义权限验证

    springboot + 拦截器 + 注解 实现自定义权限验证 最近用到一种前端模板技术:jtwig,在权限控制上没有用springSecurity.因此用拦截器和注解结合实现了权限控制. 1.1 定 ...

  6. dubbo consumer 端口_基于Springboot+Dubbo+Nacos 注解方式实现微服务调用

    今天跟大家分享基于Springboot+Dubbo+Nacos 注解方式实现微服务调用的知识. 1 项目结构 |-- spring-boot-dubbo-demo (父级工程) |-- spring- ...

  7. Android底层隐私数据,Android Intent传递数据底层分析详细介绍_Android_脚本之家

    Android  Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...

  8. SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍

    SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍 本篇博文将介绍几种如何处理url中的参数的注解@PathVaribale/@Requ ...

  9. java参数值注入_在springboot中使用注解将值注入参数的操作

    后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息.可以把获取在shiro中的登陆者信息封装在一个类中,使用时获 ...

  10. android中intent放数据类型,Android Intent传递数据底层分析详细介绍

    Android  Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...

最新文章

  1. c matlab 混合编程 调试,64位MATLAB和C混合编程以及联合调试
  2. 在linux下面安装MySQL5.6管理帐号安装失败的解决方法
  3. 数据结构基础:算法的基础知识笔记
  4. pythonwhile循环怎么修改数据类型_python基础--数据类型循环
  5. 从逻辑回归到最大熵模型
  6. Java-时间复杂度和空间复杂度
  7. HOJ 1867 经理的烦恼 【 树状数组 】
  8. C# 正则匹配 电话号码 和 座机号
  9. 纯命令行linux环境,Ubuntu Server纯命令行环境安装 Dropbox
  10. 【排序算法】插入排序-常规方法
  11. 配置visual studio code进行asp.net core rc2的开发(转载jeffreywu)
  12. ubuntu10.04 MTK开发环境
  13. DRL实战 : N-Armed Bandits问题
  14. fiddler运行原理_fiddler工作原理
  15. 银河麒麟安装steam
  16. gateway中的局部过滤器_GateWay过滤器
  17. 给大家推荐一个卖旧衣服的,vx/zfb“麻袋到家旧衣服回收”可以下单啦,快递小哥免费上门取,0.5/kg,闲置衣服再也不用扔到垃圾桶了
  18. VS错误代码以及解决方案
  19. Java唐诗学习系统
  20. 魔兽世界8.0哪个服务器稳定,魔兽世界8.0国服开服了!为了不落后!这九件事急需了解掌握...

热门文章

  1. CSS和JS标签style属性对照表
  2. 让你的AIR程序自动检测更新,并自动下载、更新到新版本。
  3. 线程池的实现原理分析
  4. 浅谈Http协议、TCP协议
  5. 在单例Bean中依赖原型Bean问题解决
  6. 什么是安全查找Bean,什么是非安全查找Bean?如何安全地查找Bean?
  7. 【Hoxton.SR1版本】Spring Cloud Gateway之Filter详解
  8. Spring源码之BeanDefinitionRegistryPostProcessor内部执行流程
  9. go和python互调
  10. 轻松提高Win2003的运行速度