Springboot框架的常⽤注解和作⽤
@SpringBootApplication,替代@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
@ImportAutoConfiguration,导⼊配置类,⼀般做测试的时候⽤,正常优先使⽤@EnableAutoConfiguration
@SpringBootConfiguration,替代@Configuration
@ImportResource,将资源导⼊容器中
@PropertySource,导⼊properties⽂件
@PropertySources,@PropertySource的集合
@Role,bean⾓⾊定义ROLE_APPLICATION(默认值)、ROLE_SUPPORT(辅助⾓⾊)、ROLE_INFRASTRUCTURE(后台⾓⾊,⽤户⽆感)
@Role 通常不会太直接使⽤,它主要是⼀个标识,标识当前 Bean 的⾓⾊,内建有三种:
ROLE_APPLICATION
ROLE_SUPPORT
ROLE_INFRASTRUCTURE
通常第⼀种就是表⽰应⽤程序或业务 Bean,第三种表⽰框架内部的⾓⾊,第⼆种⽐较罕见,它们主要是⽤于逻辑区分,没有决定性的含义
@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()⽅法
springboot框架的作用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。 在 jav
ax.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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论