美文网首页spring
Springboot框架的常用注解和作用

Springboot框架的常用注解和作用

作者: 奋斗的韭菜汪 | 来源:发表于2020-12-24 23:26 被阅读0次

    @SpringBootApplication,替代@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
    @ImportAutoConfiguration,导入配置类,一般做测试的时候用,正常优先使用@EnableAutoConfiguration
    @SpringBootConfiguration,替代@Configuration
    @ImportResource,将资源导入容器中
    @PropertySource,导入properties文件
    @PropertySources,@PropertySource的集合
    @Role,bean角色定义ROLE_APPLICATION(默认值)、ROLE_SUPPORT(辅助角色)、ROLE_INFRASTRUCTURE(后台角色,用户无感)
    @Scope,指定bean的作用域,默认singleton,其他包括prototype、request、session、globalSession
    @Lazy,使bean懒加载,取消bean预初始化。用法:bean注册的地方加上@Lazy和用的地方加上@Lazy
    @Primary,自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出 异常
    @Profile,指定bean在哪个环境被激活
    @DependsOn,依赖的bean注册完成,才注册当前类,依赖bean不存在会报错。用于控制bean加载的顺序
    @PostConstruct,bean的属性都注入完之后,执行注解标注的方法进行初始化工作
    @Autowired, 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用
    @Lookup,根据方法返回的类型,去容器中捞出对应的bean。适合单例作用域引用非单例的情况。
    @Qualifier,申明bean名字,且可以按bean名字加载bean
    @Required,检查bean的属性setXXX()方法,要求属性在配置阶段必须已配置
    @Value,值注入,@Value("${xxx}")注入配置文件中的值;@Value("#{xxx}")支持spel,可注入bean、常量等
    @SpringBootConfiguration,包装@Configuration
    @Description,添加bean的文字描述
    @EnableAspectJAutoProxy,启动AspectJ自动代理
    @EnableLoadTimeWeaving,启用类加载器动态增强功能,使用Instrumentation实现
    @AutoConfigurationPackage,包含该注解的package会被AutoConfigurationPackages注册
    @AutoConfigureBefore,在指定配置类初始化前加载
    @AutoConfigureAfter,在指定配置类初始化后加载
    @AutoConfigureOrder,指定配置类初始化顺序,越小初始化越早

    组件注册
    @ComponentScans,@ComponentScan集合
    @ComponentScan,扫描启动类目录下的所有符合条件的Bean,并注入容器
    @Component,泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
    @Controller,用于标注控制层组件
    @Repository,用于标注数据访问组件,即DAO组件
    @Service,用于标注业务层组件
    @Configuration,表名类里的包含@Bean注解标注的方法
    @Bean,用在@Configuration和@Component注解下的类里面的方法上。@Configuration类里面,@Bean注解的方法被类中其他方法调用时,会注入bean而不会执行方法本身;@Component类里面,@Bean注解的方法被类中其他方法调用时,会执行方法本身,不会注入bean;被注解的方法如果是静态(static),bean的注册时间可能比所在类的注册时间早。
    @EnableAutoConfiguration,开启自动注册配置文件,例如会去META-INF/spring.factories找需要自动转载的类
    @Import,将class导入容器中

    选择器
    @Conditional,当指定的条件都满足时,组件才被注册
    @ConditionalOnBean,指定bean在上下文中时,才注册当前bean。用在方法上,则默认依赖类为方法的返回类型
    @ConditionalOnClass,指定类在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
    @ConditionalOnCloudPlatform,在指定云平台才注册配置
    @ConditionalOnExpression,指定spel为true时注册配置
    @ConditionalOnJava,在指定java版本时注册配置
    @ConditionalOnJndi
    @ConditionalOnMissingBean,指定bean不在上下文中时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
    @ConditionalOnMissingClass,指定类不在classpath上时,才初始化当前bean。用在方法上,则默认依赖类为方法的返回类型
    @ConditionalOnNotWebApplication,不是在web环境才注册配置
    @ConditionalOnProperty,配置文件中的值与指定值是否相等,相等才注册配置
    @ConditionalOnResource,指定resources都在classpath上才注册配置
    @ConditionalOnSingleCandidate,上下文中只有一个候选者bean时才注册配置
    @ConditionalOnWebApplication,是在web环境才注册配置

    缓存
    @EnableCaching,开启缓存配置,支持子类代理或者AspectJ增强
    @CacheConfig,在一个类下,提供公共缓存配置
    @Cacheable,放着方法和类上,缓存方法或类下所有方法的返回值
    @CachePut,每次先执行方法,再将结果放入缓存
    @CacheEvict,删除缓存
    @Caching,可以配置@Cacheable、@CachePut、@CacheEvict

    定时器
    @EnableScheduling,开启定时任务功能
    @Scheduled,按指定执行周期执行方法
    @Schedules,包含多个@Scheduled,可同时运行多个周期配置
    @EnableAsync,开启方法异步执行的能力,通过@Async或者自定义注解找到需要异步执行的方法。通过实现AsyncConfigurer接口的getAsyncExecutor()和getAsyncUncaughtExceptionHandler()方法自定义Executor和异常处理。
    @Async,标记方法为异步线程中执行

    注入配置文件properties
    @EnableConfigurationProperties,启动@ConfigurationProperties功能
    @ConfigurationProperties,将properties文件里的内容,自动注入bean对应的属性中
    @DeprecatedConfigurationProperty,用在配置文件的getter()方法上,标记字段已经过期,并提示替换的字段。一般给spring-boot-configuration-processor使用。
    @NestedConfigurationProperty,标记在配置文件的字段上,提示spring-boot-configuration-processor,配置包含嵌套的配置。
    spring-configuration-metadata.json 提供配置的元信息,在写properties配置时,会有语法提示。在项目中引入spring-boot-configuration-processor项目,会扫描@ConfigurationProperties注解,自动生成spring-configuration-metadata.json

    @Autowired 和 @Resource
    1)@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
    2)@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用
    3)@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,
    如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
    @PathVariable
    带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义,通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。
    @ModelAttribute
    将参数绑定到Model对象
    lomback注解
    1、@Getter
    实体类生成相应的get()方法
    2、@Setter
    实体类生成相应的set()方法
    3、@Data
    1)该注解使用在类上,该注解是最常用的注解,它结合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本质上使用@Data注解,类默认@ToString和@EqualsAndHashCode以及每个字段都有@Setter和@getter。该注解也会生成一个公共构造函数,可以将任何@NonNull和final字段作为参数。
    2)虽然@Data注解非常有用,但是它没有与其他注解相同的控制粒度。@Data提供了一个可以生成静态工厂的单一参数,将staticConstructor参数设置为所需要的名称,Lombok自动生成的构造函数设置为私有,并提供公开的给定名称的静态工厂方法。
    4、@NonNull
    该注解使用在属性上,该注解用于属的非空检查,当放在setter方法的字段上,将生成一个空检查,如果为空,则抛出NullPointerException。 该注解会默认是生成一个无参构造。
    5、@ToString
    该注解使用在类上,该注解默认生成任何非讲台字段以名称-值的形式输出。
    1)如果需要可以通过注释参数includeFieldNames来控制输出中是否包含的属性名称。
    2)可以通过exclude参数中包含字段名称,可以从生成的方法中排除特定字段。
    3)可以通过callSuper参数控制父类的输出。
    6、@EqualsAndHashCode
    该注解使用在类上,该注解在类级别注释会同时生成equals()和hashCode()。 存在继承关系需要设置callSuper参数为true。
    7、@AllArgsConstructor
    该注解使用在类上,该注解提供一个全参数的构造方法,默认不提供无参构造。
    8、@NoArgsConstructor
    该注解使用在类上,该注解提供一个无参构造 。
    9、@RequiredArgsConstructor
    该注解使用在类上,将类中所有带有 @NonNull 注解的或者带有 final 修饰的成员变量生成对应的构造方法。
    10、@Value
    这个注解作用在实体类 上,会生成含所有参数的构造方法,get ()方法,此外还提供了equals()、hashCode()、toString ()方法。
    注意:没有setter ()
    11、@Cleanup
    该注解使用在属性前,该注解是用来保证分配的资源被释放。在本地变量上使用该注解,任何后续代码都将封装在try/finally中,确保当前作用于中的资源被释放。默认@Cleanup清理的方法为close,可以使用value指定不同的方法名称。
    **JPA注解 **
    1、@Entity
    @Entity用于实体类,指出该Java 类为实体类,将映射到指定的数据库表。如声明一个实体类 User,它将映射到数据库中的 user 表上。
    2、@Table
    1)当实体类与其映射的数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。
    2)@Table 标注的常用选项是 name,用于指明数据库的表名 @Table标注还有一个两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,通常为数据库名。
    3、@Id
    @Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。 @Id标注也可置于属性的getter()方法之前。
    4、@GeneratedValue
    @GeneratedValue 用于标注主键的生成策略,通过 strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer 对应 identity,MySQL 对应 auto increment。 在 javax.persistence.GenerationType 中定义了以下几种可供选择的策略:
    IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
    AUTO: JPA自动选择合适的策略,是默认选项;
    SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,MySql 不支持这种方式
    TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
    5、@Basic
    @Basic 表示一个简单的属性到数据库表的字段的映射,默认存在。
    @Basic fetch: 表示该属性的读取策略,有 EAGER 和 LAZY 两种,分别表示主支抓取和延迟加载,默认为 EAGER.
    optional:表示该属性是否允许为null, 默认为true
    6、@Column
    当实体的属性与其映射的数据库表的列不同名时需要使用@Column 标注说明,该属性通常置于实体的属性声明语句之前,还可与 @Id 标注一起使用。
    @Column 标注的常用属性是 name,用于设置映射数据库表的列名。此外,该标注还包含其它多个属性,如:unique 、nullable、length 等。
    @Column 标注的 columnDefinition 属性: 表示该字段在数据库中的实际类型.通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP.此外,String的默认映射类型为VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或TEXT 字段类型.
    @Column标注也可置于属性的getter方法之前
    7、@Transient
    表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic
    8、@Temporal
    在核心的 Java API 中并没有定义 Date 类型的精度(temporal precision). 而在数据库中,表示 Date 类型的数据有 DATE, TIME, 和 TIMESTAMP 三种精度(即单纯的日期,时间,或者两者 兼备),在进行属性映射时可使用@Temporal注解来调整精度。
    9、@TableGenerator
    将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得 这种方法生成主键的策略可以适用于任何数据库,不必担心不同数据库不兼容造成的问题。
    属性:
    1)name 属性表示该主键生成策略的名称,它被引用在@GeneratedValue中设置的generator 值中
    2)table 属性表示表生成策略所持久化的表名
    3)pkColumnName 属性的值表示在持久化表中,该主键生成策略所对应键值的名称
    4)valueColumnName 属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加
    5)pkColumnValue 属性的值表示在持久化表中,该生成策略所对应的主键
    6)allocationSize 表示每次主键值增加的大小, 默认值为 50

    相关文章

      网友评论

        本文标题:Springboot框架的常用注解和作用

        本文链接:https://www.haomeiwen.com/subject/mbwvnktx.html