Springboot 相关注解大全
1.Spring注解
1.@Autowired
标注在方法,Spring容器创建当前对象,就会调用方法,完成赋值;方法使用的参数,自定义类型的值从ioc容器中获取自动装配;
Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值;
1)、@Autowired:自动注入:
A、默认优先按照类型去容器中找对应的组件:applicationContext.getBean(Person.class);找到就赋值
B、如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找 如:applicationContext.getBean("person")
C、@Qualifier("person"):使用@Qualifier指定组件的进行装配,不是属性名
D、自动装配默认一定要将属性赋值好,没有就会报错;可以使用@Autowired(required=false);
E、@Primary:让Spring进行自动装配的时候,默认使用首选的bean;也可以继续使用@Qualifier指定需要装配的bean的名字
PersonService{
@Autowired
PersonDao personDao;
}
2)、Spring还支持使用@Resource(JSR250)和@Inject(JSR330)[java规范的注解]
@Resource:可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的;没有能支持@Primary功能;没有支持@Autowired(reqiured=false);
@Inject:需要导入javax.inject的包,和Autowired的功能一样。没有required=false的功能;
@Autowired:Spring定义的; @Resource、@Inject都是java规范
AutowiredAnnotationBeanPostProcessor:解析完成自动装配功能;
3)、 @Autowired:可以使用在构造器,参数,方法,属性上;都是从容器中获取参数组件的值
A、[标注在方法位置]:@Bean+方法参数;参数从容器中获取;默认不写@Autowired效果是一样的;都能自动装配
B、[标在构造器上]:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是可以自动从容器中获取
C、放在参数位置:
4)、自定义组件想要使用Spring容器底层的一些组件(ApplicationContext,BeanFactory,xxx);
自定义组件实现xxxAware;在创建对象的时候,会调用接口规定的方法注入相关组件;Aware;
把Spring底层一些组件注入到自定义的Bean中;
xxxAware:功能使用xxxProcessor;
ApplicationContextAware==》ApplicationContextAwareProcessor;
2.@Component
默认加在ioc容器中的组件,容器启动会调用无参构造器创建对象,再进行初始化赋值等操作【构造器要用的组件,都是从容器中获取】
3.@PostConstruct
对象初始化并赋值完成后调用
4.@PreDestroy
对象从容器中移除之前调用
5.@BeanPostProcessor
bean初始化前后执行的工作
6.@Value 给属性进行赋值
@Value("A") @Value("${从配置文件中取值}") @Vlaue("#{SpEL表达式}")
7.@ComponentScan
@ComponentScan value:指定要扫描的包
excludeFilters = Filter[] :指定扫描的时候按照什么规则排除那些组件
includeFilters = Filter[] :指定扫描的时候只需要包含哪些组件【需要设置useDefaultFilters=false】
FilterType.ANNOTATION:按照注解
FilterType.ASSIGNABLE_TYPE:按照给定的类型;
FilterType.ASPECTJ:使用ASPECTJ表达式
FilterType.REGEX:使用正则指定
FilterType.CUSTOM:使用自定义规则
8.@Bean("id值")
给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id @Bean("person")
Bean注解的方法创建对象时的参数会从容器中获取。
9.@Import导入组件,id默认是组件的全类名
@Import({Color.class,Red.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
10.@Conditional({Human.class})
类中组件统一设置。满足当前条件,这个类中配置的所有bean注册才能生效;
给容器中注册组件;
1)、包扫描+组注注解:@Component @Controller @Service @Repository
2)、@Bean用于:导入的第三方包里面的组件
3)、@Import[快速给容器中导入一个组件]
1)、@Import(要导入到容器中的组件);容器中就会自动注册这个组件,id默认是全类名
2)、ImportSelector:返回需要导入的组件的全类名数组;
3)、ImportBeanDefinitionRegistrar:手动注册bean到容器中
4)、使用Spring提供的 FactoryBean(工厂Bean);
1)、默认获取到的是工厂bean调用getObject创建的对象
2)、要获取工厂Bean本身,我们需要给id前面加一个&&colorFactoryBean
11.@Scope("prototype")
@Lazy
@Bean("person")
public Person(){
return new Person();
}
@Scope 对象作用域
prototype:IOC容器启动并不会调用方法并放入容器中,而是每次需要时进行创建
singleton:单例、IOC容器启动后调用创建对象的方法,以后每次需要对象从容器中获取
ConfigurableBeanFactory#SCOPE_PROTOTYPE 多例
ConfigurableBeanFactory#SCOPE_SINGLETON 单例
org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST request 每次同一个request调用一次
org.springframework.web.context.WebApplicationContext#SCOPE_SESSION sesssion 每次同一个session调用一次
@Lazy :懒加载
若为单实例,则在容器启动后即创建对象
若为懒加载方式,则容器启动后不创建对象,需要时获取Bean创建对象并初始化
12.@Profile
Profile:Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能
开发环境、测试环境、生产环境;
数据源:(/A)(/B)(/C);
@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件
1)、加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境
2)、写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效
3)、没有标注环境标识的bean在,任何环境下都是加载的;
启用Profile起作用的方法有两种方式:
1.启动时添加参数 -Dspring.profile.actice="指定的参数"
2.在代码中指定
- //1、创建一个applicationContext
- AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
- //2、设置需要激活的环境
- applicationContext.getEnvironment().setActiveProfiles("指定的参数");
- //3、注册主配置类
- applicationContext.register(MyConfigOfProfile.class);
- //4、启动刷新容器
- applicationContext.refresh();
- class MyConfigOfProfile implements EmbeddedValueResolverAware{
- @Override
- }
13.@PropertySource
使用@PropertySource读取外部配置文件中的k/v保存到运行的环境变量中;加载完外部的配置文件以后使用${}取出配置文件的值
@PropertySource(value={"classpath:/db.properties"})
12.bean赋值,注入其他组件,@Autowired,生命周期注解功能,@Async,xxx BeanPostProcessor;
13.AOP 【动态代理】 @EnableAspectJAutoProxy
指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式;
1、导入aop模块;Spring AOP:(spring-aspects)
2、定义一个业务逻辑类(MathCalculator);在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出现异常,xxx)
3、定义一个日志切面类(LogAspects):切面类里面的方法需要动态感知MathCalculator.div运行到哪里然后执行;
通知方法:
前置通知(@Before):logStart:在目标方法(div)运行之前运行
后置通知(@After):logEnd:在目标方法(div)运行结束之后运行(无论方法正常结束还是异常结束)
返回通知(@AfterReturning):logReturn:在目标方法(div)正常返回之后运行
异常通知(@AfterThrowing):logException:在目标方法(div)出现异常以后运行
环绕通知(@Around):动态代理,手动推进目标方法运行(joinPoint.procced())
4、给切面类的目标方法标注何时何地运行(通知注解);
5、将切面类和业务逻辑类(目标方法所在类)都加入到容器中;
6、必须告诉Spring哪个类是切面类(给切面类上加一个注解:@Aspect)
[7]、给配置类中加 @EnableAspectJAutoProxy 【开启基于注解的aop模式】
在Spring中很多的 @EnableXXX;
2.SpringMVC注解
@RequestMapping:@RequestMapping(“/path”)表示该控制器处理所有“/path”的UR L请求。该注解有六个参数:
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
value:指定请求的实际地址,指定的地址可以是URI Template 模式
method:指定请求的method类型, GET、POST、PUT、DELETE等
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
3.Springboot注解
Springboot注解
@SpringBootApplication
@ComponentScan扫描Bean
@Configration XML配置
@EnableAutoConfiguration 自动配置
@Component可以配合CommandLineRunner使用,在程序启动时执行一些基本任务
@RestController
@Controller
@ResponseBody
@PathVairable获取参数
@JsonBackReference 解决嵌套外链问题
Spring Boot 自动配置原理
Spring Boot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件。将该配置文件载入到spring容器中
getSpringFactoriesInstances
SpringFactoriesLoader.loadFactoryNames
如在Spring.factories文件中有org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration 一个类,找到类后可以看到Redis的自动化配置方式
Spring是通过条件话注解进行自动化配置的
@ConditionalOnBean 当容器里有指定Bean的条件下
@ConditionalOnClass @ConditionalOnException基于SpELl表达式作为判断条件
@ConditionalOnJava 基于JVM版本作为判断条件
@ConditionalOnJndi 在JNDI存在的条件下查找指定的位置
@ConditionalOnMissingBean 在容器里没有指定Bean的情况下
@ConditionalOnMissingClass当类路径下没有指定的类的条件下
@ConditionalOnNotWebApplication 当前项目不是web项目的条件下
@ConditionalOnProperty 指定的属性是否有指定的值
@ConditaionalOnResource 类路径是否有指定的值
@ConditaionalOnSingleCandidate:当指定Bean在容器中只有一个,或者虽然有多个但是指定首选的Bean。
@ConditaionalOnWebApplication:当前项目是web项目的条件下
Springboot 相关注解大全的更多相关文章
- springBoot注解大全JPA注解springMVC相关注解全局异常处理
https://www.cnblogs.com/tanwei81/p/6814022.html 一.注解(annotations)列表 @SpringBootApplication:包含了@Compo ...
- springBoot系列-->springBoot注解大全
一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...
- SpringBoot注解大全(转)
原文链接:[springBoot系列]--springBoot注解大全 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Co ...
- SpringBoot注解大全 转
2019年3月17日22:30:10 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@Enab ...
- SpringBoot注解大全*(转发:http://www.cnblogs.com/ldy-blogs/p/8550406.html)
一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...
- SpringBoot相关的注解
一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...
- SpringBoot第三节(thymeleaf的配置与SpringBoot注解大全)
Springboot默认是不支持JSP的,默认使用thymeleaf模板引擎.所以这里介绍一下Springboot使用Thymeleaf的实例以及遇到的问题. 1.配置与使用 1.1:在applica ...
- SpringBoot进阶教程(六十四)注解大全
在Spring1.x时代,还没出现注解,需要大量xml配置文件并在内部编写大量bean标签.Java5推出新特性annotation,为spring的更新奠定了基础.从Spring 2.X开始spri ...
- SpringBoot:springBoot注解大全
springboot源码下载 https://github.com/spring-projects/spring-boot/releases 一.注解(annotations)列表 @SpringBo ...
随机推荐
- 管理Cookie和Session
管理Cookie和Session 前言 这几天中,一直再跟漏洞打交道,而在这些漏洞中,出现的最多的就是 Cookie 和 Session 了.这篇文章就简单的介绍一些 Cookie 中最常用的四个属性 ...
- MVC系统学习7—Action的选择过程
在Mvc源码的ControllerActionInvoker的InvokeAction方法里面有一个FindAction方法,FindAction方法在ControllerDescriptor里面定义 ...
- [luoguP1896] [SCOI2005]互不侵犯King(状压DP)
传送门 先预处理出来一行中放置国王的所有情况和每种情况所用的国王个数. f[i][j][k]表示前i行放j个国王且最后一行的状态为k的方案数 状压DP即可 #include <cstdio> ...
- noip模拟赛 无题
分析:这道题和以前做过的模拟赛题很像:传送门. 对于前30%的数据可以直接暴力求,k=1的数据利用线段树求区间最大值,没有修改操作可以用主席树.100%的数据主席树是肯定用不了的,观察到K非常小,可以 ...
- bzoj 3224 NOI2004郁闷的出纳员
NOI2004郁闷的出纳员 2013年12月26日6,1818 输入描述 Input Description 第一行有两个非负整数n和min.n表示下面有多少条命令,min表示工资下界. 接下来的n行 ...
- 【HDOJ6146】Pokémon GO(DP,计数)
题意:一个2*n的矩阵,从任意一格出发,不重复且不遗漏地走遍所有格子,问方案数 mo 10^9+7 n<=10000 思路:因为OEIS搜出来的两个数列都是错误的,所以考虑DP 设B[i]为2* ...
- 【ZJOI2017 Round1练习&BZOJ5350】D5T1 masodik(DP,斜率优化)
题意:你要从(0,0)点走到(n,m), 每次只能往 x 轴或者 y 轴正方向移动一个单位距离.从(i,j)移动到(i,j+1)的代价为 ri,从(i,j)移动到(i+1,j)的代价为 cj. 求最小 ...
- Session&Cookie 的介绍和使用
Session介绍与使用 1.Session基本介绍 Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序 ...
- Ubuntu 16.04安装unrar解压RAR文件
除了7zip:http://www.cnblogs.com/EasonJim/p/7124306.html之外,还可以安装unrar进行解压RAR文件. 安装 sudo apt-get install ...
- 总结 React 组件的三种写法 及最佳实践
React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普 ...