springBoot加载

@Configuration

表明该类是一个配置类常常配合@Bean使用,让容器管理对象

@Configuration(proxyBeanMethods = true)

proxyBeanMethods = true表示@Configuration注解的类走不走代理,如果走代理会从单例池拿对象,拿到的对象是同一个,不走代理不会从单例池拿对象

@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
}
}

@Bean

将指定类交给spring容器管理

@SpringBootApplication
public class TestSpringBootAnnoApplication { @Bean
public UserService userService(){
return new UserService();
} public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(TestSpringBootAnnoApplication.class, args);
UserService userService = context.getBean(UserService.class);
System.out.println(userService);
} }

@Lazy

类的懒加载,调用时加载类并交给spring管理。

@Scope

指定交给spring容器管理的bean对象是单例或是多例的

@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)

@Scope("singleton")单例(默认) @Scope("prototype")多例

@SpringBootApplication
public class TestSpringBootAnnoApplication { @Bean
@Scope("prototype")
public UserService userService(){
return new UserService();
} public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(TestSpringBootAnnoApplication.class, args);
UserService userService = context.getBean(UserService.class);
UserService userService2 = context.getBean(UserService.class);
System.out.println(userService==userService2);
} }

spring.factories

springboot在启动时会先寻找resource/META-INFO文件夹下有没有spring.factories文件,如果有就会解析,注入相应的类

META-INFO

#Auto
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.testspringbootanno.service.UserService

@ComponentScan

定义spring容器扫描的路径,扫描的spring注解才会被解析

@Profile

指定注入到spring容器的Bean生效的范围

spring.profiles.active=dev
@SpringBootApplication
public class TestSpringBootAnnoApplication { @Bean
@Scope("prototype")
@Profile("dev")
public UserService userService(){
return new UserService();
} public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(TestSpringBootAnnoApplication.class, args);
UserService userService = context.getBean(UserService.class);
UserService userService2 = context.getBean(UserService.class);
System.out.println(userService==userService2);
} }

@ConditionalOnBean

满足spring容器有某个springBean对象条件时把该对象交给spring管理。

@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
} @Bean
@ConditionalOnBean(name = "oderService")
public UserService userService(){
return new UserService();
}
}
@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
} @Bean
@ConditionalOnBean(OrderService.class)
public UserService userService(){
return new UserService();
}
}

@ConditionalOnMissingBean

满足spring容器没有某个springBean对象条件时把该对象交给spring管理。

@Configuration
public class Appconfig { //@Bean
public OrderService oderService(){
return new OrderService();
} @Bean
@ConditionalOnMissingBean(OrderService.class)
public UserService userService(){
return new UserService();
}
}

@ConditionalOnSingleCandidate

是否符合指定的类型只有一个

@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
}
@Bean
public OrderService oderService1(){
return new OrderService();
} @Bean
@ConditionalOnSingleCandidate(OrderService.class)
public UserService userService(){
return new UserService();
}
}

@ConditionalOnClass

存在某个class生效

@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
}
@Bean
@ConditionalOnClass(name = "com.example.testspringbootanno.service.OrderService")
public UserService userService(){
return new UserService();
}
}

@ConditionalOnMissingClass

不存在某个class生效

@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
}
@Bean
@ConditionalOnMissingClass("com.example.testspringbootanno.service.OrderService")
public UserService userService(){
return new UserService();
}
}

@ConditionalOnExpression

根据表达式结果判断是否生效

@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
}
@Bean
@ConditionalOnExpression("${test.condition}==true")
public UserService userService(){
return new UserService();
}
}

@ConditionalOnJava

指定的java版本生效

@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
}
@Bean
@ConditionalOnJava(JavaVersion.ELEVEN)
public UserService userService(){
return new UserService();
}
}

@ConditionalOnWebApplication

Web环境生效

@ConditionalOnNotWebApplication

不是Web环境生效

@ConditionalOnProperty

判断配置文件中某个key是否存在

test.condition=true
@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
}
@Bean
@ConditionalOnProperty(name = "test.condition")
//@ConditionalOnProperty(name = "test1.condition",matchIfMissing = true) 确实了照样匹配
public UserService userService(){
return new UserService();
}
}

@ConditionalOnResource

某个资源存在时生效、

@Configuration
public class Appconfig { @Bean
public OrderService oderService(){
return new OrderService();
}
@Bean
@ConditionalOnResource(resources = "http://www.baidu.com")
public UserService userService(){
return new UserService();
}
}

@ConditionalOnWarDeployment

应用是war包时生效

@ConditionalOnCloudPlatform

应用在某个云平台时生效

读取配置文件

方法一:

@Component
@ConfigurationProperties(prefix = "user")
public class Aconfig {
private String username;
private String password;
}

方法二:

@ConfigurationProperties(prefix = "user")
public class Aconfig {
private String username;
private String password;
}
@Configuration
@EnableConfigurationProperties(Aconfig.class)
public class Appconfig { }

还可以扫描,用于properties文件过多统一管理

@Configuration
@ConfigurationPropertiesScan("com.zhuoyue.properties")
public class Appconfig { }

配置文件加载顺序

JVM环境变量(Envionment variables)>电脑环境变量>application.properties>application.yml

SpringBoot加载相关注解的更多相关文章

  1. Springboot 加载配置文件源码分析

    Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE. 本篇文章的相关源码位置:https://github.com/wbo112/blogde ...

  2. struts2是如何加载相关的package元素节点信息的

    这不是一篇纯技术文章,而是一篇分享我个人在前后端分离路上收获的点点滴滴的文章,以此来为准备尝试前后端分离或者想了解前后端分离的童鞋做一个大体的讲解. 上一家公司是家小公司,做了一年的全栈开发,对前端的 ...

  3. [翻译][MVC 5 + EF 6] 7:加载相关数据

    原文:Reading Related Data with the Entity Framework in an ASP.NET MVC Application 1.延迟(Lazy)加载.预先(Eage ...

  4. Entity Framework加载相关实体——延迟加载Lazy Loading、贪婪加载Eager Loading、显示加载Explicit Loading

    Entity Framework提供了三种加载相关实体的方法:Lazy Loading,Eager Loading和Explicit Loading.首先我们先来看一下MSDN对三种加载实体方法的定义 ...

  5. Volley 图片加载相关源码解析

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47721631: 本文出自:[张鸿洋的博客] 一 概述 最近在完善图片加载方面的 ...

  6. [翻译 EF Core in Action 2.4] 加载相关数据

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  7. SpringBoot加载子模块配置文件的方法

    这两天开始学习SpringBoot框架,按照官方的文档,很轻易地就把单模块的项目启动了,但在使用maven搭建多模块的时候遇到了子模块配置文件没有加载的问题 项目架构是这样的 zero |-ws |- ...

  8. SpringBoot加载配置文件(@PropertySource@importSource@Value)

    情景描述 最近新搭建了一个项目,从Spring迁到了Springboot,为了兼容Spring加载配置文件的风格,所以还想把PropertyPlaceholderConfigurer放在.xml文件里 ...

  9. springboot加载application.yml文件null

    话不多说,直接上代码 本人项目为maven项目 以下是项目结构 pom.xml文件 <?xml version="1.0" encoding="UTF-8" ...

  10. springboot加载bean过程探索

    springboot一般通过以下main方法来启动项目 @SpringBootApplication public class DemoApplication { public static void ...

随机推荐

  1. go 处理json

    在云原生的相关技术中, 调用 kafka 和 es等中间件,返回的结果大多是 json 格式,因此我们需要频繁的对 json 进行操作. 在go这种强类型的语言中,不同于 python 和 nodej ...

  2. vbox批量管理工具 VirtualBox硬件级虚拟机大众网络版v2019/v2020/v2021 免费版下载地址

    浪潮vbox批量管理器-基础网络版 大众版 免费版 免激活码 免注册码 V2021下载地址:    https://d1.crsky.com/software2/20210107/VBoxMgr_v2 ...

  3. 使用ADB拷贝Android设备的文件夹

    在当前目录下执行,拷贝到当前目录.   拷贝照片 adb pull sdcard/DCIM   删除照片 adb shell rm -rvf sdcard/DCIM   拷贝图片 adb pull s ...

  4. Salesforce 发送Email时遇到的问题(Case当中的Filed不出现Email选项:ケースのフィールドにメールタブが表示されない)。

    普段はケースの発生源はメールと選択する場合.ディフォルトで「フィールド」の中に「メール」というタブが出てきますが. (平时当我们选择[Case]的[来源]为[Email]时,默认就会在field中出现 ...

  5. Qt学习笔记(一) 关于QWidget类的paintEvent方法

    今天要讨论的也算是QT的核心之一了,那就是如何对widget进行重绘,这里就是可以看到,继承了QWidget的子类,自己重新写一个paintEvent函数就可以了. 这个paintEvent就相当于是 ...

  6. 第12周 预习、实验与作业:Java并发编程

    以前你编写的Java程序同时能做几件事情?有几个执行流程?main方法执行完,整个程序一定会退出吗? 最多只能做一件事 函数按着顺序执行,函数内按着语句执行.可以有多个可以有一个. 不一定.因为Mai ...

  7. 把linux云服务器上的文件放到本地电脑windows上-----secureCRT

    1.本地电脑需要安装SecureCRT 2.在secureCRT上登录云端服务器,右键点击云端服务器上方的ip地址,选择"connect SFTP session" 3.在SFTP ...

  8. 微信小程序监听view到顶部的高度

    view style='width:100%;height:80rpx;' id='navigation'></view> wx.createSelectorQuery().sele ...

  9. windows下rabbitmq启动报错--distribution port 25672 in use by another node: rabbit@DESKTOP-LLPGVVE

    最近公司有需求需要用到rabbitmq,因为之前习惯用的都是activemq,所以要临时学习一下,捣鼓这个rabbitmq.想着先在本地捣鼓测试一下,然后按照这个博主分享的安装方式进行安装. http ...

  10. kubeadm安装单master单node节点k8s集群

    操作系统:centos7.6 podSubnet(pod 网段) 10.244.0.0/16 serviceSubnet(service 网段): 10.10.0.0/16 集群角色 IP 主机名 安 ...