SpringBoot注解
@Configuration 作用等价于@Component(默认命名策略:类名首字母小写)
自定义 配置类 相当于xml 配置类 也是一个Bean组件
配置类列面使用@Bean标注在方法上门ioc容器 注入bean 实例 bean实例 bean实例是不是的单例(yes)
@Bean(value=”“,initMethod ="" ,destruyMethon= “” )
value 属性指定beanname initMethod 竖向之地昂初始化方法名 destruyMethon 属性指定销毁方法名
3.属性proxyBeanMethods
3.1 Full模式:默认是true
用来监测当前IOC容器中是否有此实例,若有则不会再创建,直接返回此单实例;
当前配置类的实例信息:com.igeek.springboot.config.MyConfig1$$EnhancerBySpringCGLIB$$7c35a8af@aa21042 代理对象
3.2 Lite模式:指定为false
每一次调用都会创建新的实例;
当前配置类的实例信息:com.igeek.springboot.config.MyConfig1@45673f68
3.3 使用场景
配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断配置
类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式(默认)
@Bean
将当前的方法的返回值 注册到ioc容器中
默认命名策略 将方法名错位beanName使用
@Description 底层注解 @import 导入组件/ @importResource 导入Spring xml 配置文件
@import 导入组件
在配置类@Configuration 上门在添加注解 @import
将导入的组件类型的实例 注册到ioc 容器中 默认使用实例的权利恶魔作为beanname 例如:com.igeek .boot.entity.peroson
@importResource 导入Spring xml 配置文件
在配置类@comfiguration上面 在添加注解@ImportResourse
将xml配置文件导入,让其Bean结点生效使用准备阶段id属性值作为beanname
@Conditional 条件装配
满足指定的条件,则进行组件注入
@ConditionalOnXXX 一旦有指定的位置,就会生效如下配置
@ConditionalOnMissingXXX 一旦没有指定的配置的 ,就会生效如下配置类
例如
@ConditionalOnClass
@ConditionalOnWebApplication
@ConditionalOnBean
@ConditionalOnMissingBean
@ConditionalOnMissingClass
若 没有在ioc容器中 匹配到car类型的实例 则生效配置类MyConfig3
@ConditionalOnMissingBean(Car.class)
若在ioc容器中 匹配到car类型的实例 则将c1的bean实例注册到ioc中
@ConditionalOnBean(Car.class)
若 没有在ioc容器中 匹配到car类型的实例 则将c1的bean实例注册到ioc中
@ConditionalOnMissingBean(Car.class)
若 没有在ioc容器中 匹配到car类型(类名)的实例 则将c1的bean实例注册到ioc中
@ConditionalOnMissingClass("com.igeek.boot.entity.Car")
开启配置绑定 开启address配置绑定的功能 把这个Address实例注册到ioc容器中
@EnableConfigurationProperties(Address.class)
lombok中的常用注解: 作用简化实体类的开发
1.@Data 提供了set和get方法
2.@NoArgsConstructor 无参构造方法
3.@AllArgsConstructor 有参构造方法
4.@ToString toString方法
5.@Slf4j 日志对象 进行日志的输出
如何加载properties文件中的内容:
1.spring:
@PropertySource("classpath:db.properties")+@Value("${db.username}")
2.springBoot:
在application.properties文件中,完成配置绑定
@ConfigurationProperties(prefix = "addr") 通过prefix属性指定要操作的前缀
@Component
class Address{}
3.springBoot 底层常用的方式:
//开启配置绑定 开启address配置绑定的功能 把这个Address实例注册到ioc容器中
@EnableConfigurationProperties(Address.class)
public class MyConfig4 { }
//在application.properties文件中,完成配置绑定
@ConfigurationProperties(prefix = "addr") 通过prefix属性指定要操作的前缀
class Address{}
在application.properties文件中 通过prefix属性指定要操作的前缀
@ConfigurationProperties(prefix = "addr")
注解:@SpringBootApplication 复合注解 作用:标记主启动类
复合注解 取代了以下三个注解:
1.@SpringBootConfiguration 声明当前是配置类 作用等价于@Configuration (又等价于@Componment)
2.@EnableAutoConfiguration 开启自动配置
2.1 @AutoConfigurationPackage
2.2 @Import(AutoConfigurationImportSelector.class)
3.@ComponentScan 配置扫描包
just run 得到IOC容器(ConcurrentHashMap<String,BeanDefinition> key:唯一标识 value:bean的定义)
ConfigurableApplicationContext context = SpringApplication.run(HelloSpringBootApplication.class, args);
得到IOC容器中 所有的bean定义信息(<bean id="" class=""> 类型,作用域,init初始化方法,destory销毁方法)
String[] beanDefinitionNames = context.getBeanDefinitionNames();
springBoot中的底层注解的作用
@@Configuration
直接在类上加上@Configuration注解,告诉SpringBoot,本类是是个配置类,再在方法上添加@Bean注解将它交给容器来注册
默认的就是单例的,这和spring一样,如果想要它成为多例需要设置一下@Configuration注解里面的proxyBeanMethods属性
Full模式
是指proxyBeanMethods = true,开启代理bean的方法,此时调用配置类中每一个给而容器注册组件方法,都会从容器中找组件,保持单例模式。保证了每个@Bean方法无论被调用多少次,返回的组件都是单例的。
Lite模式
是指proxyBeanMethods = false,关闭代理bean的方法。容器中不会保存代理对象,每一次调用配置类里面的方法,·都会产生一个新的对象。这可以解决组件依赖的问题。保证了每个@Bean方法调用多少次返回的组件都是新创建的。
@Import 导入组件
@Import(组件名.class);
多的:@Import({组件名.class,组件名.class});
@Conditional
条件装配注解:满足Conditional指定的条件,就进行组件注入,不然不进行组件注入。
@ConfigurationProperties
进行配置绑定的
两种方法:
方法一:@Component+@ConfigurationProperties组合使用
@ConfigurationProperties(prfix="xxx")
在核心配置文件applicantion.properties中配置前缀为xxx的值
方法二:@EnableConfigurationProperties+@ConfigurationProperties组合使用
@EnableConfigurationPropertise:开启组件属性配置功能,并把这个组件自动注册到容器中。
需要注意的是: @ConfigurationProperties不会像Spring容器注入相关处理类,只是起到相关标记作用,
相关处理逻辑还是由@EnableConfigurationPropertise导入处理类来完成。仅仅被标记EnableConfigurationPropertise注解的类,
默认情况下也不会注册为Bean。
SpringBoot优点
1.创建独立Spring应用
2.内嵌web服务器
3.自动starter依赖,简化构建配置
4.自动配置Spring以及第三方功能
5.无代码生成、无需编写XML
6.SpringBoot是整合Spring技术栈的一站式框架
7.SpringBoot是简化Spring技术栈的快速开发脚手架
8.提供生产级别的监控、健康检查及外部化配置