SpringBoot以及集成组件注解⼤全详解(⼀)——
lombackJPA
⼀、常⽤注解
1、@SpringbootApplication
是⼀个复合注解,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration。
2、@Configuration
从Spring3.0开始,@Configuration⽤于定义配置类,可替换xml配置⽂件,被注解的类内部包含有⼀个
或多个被@Bean注解的⽅法,这些⽅法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进⾏扫描,并⽤于构建bean定义,初始化Spring容器。
配置类注意事项:
3、@RestController
是@Controller和@ResponseBody的合集,表⽰这是个控制器bean,并且是将函数的返回值直 接填⼊HTTP响应体中,是REST风格的控制器。
4、@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属性⼀旦指定,就只会按照名称进⾏装配。
5、@PathVariable
带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST ⽬标挺进发展过程中具有⾥程碑的意义,通
过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理⽅法的⼊参中:URL 中的 {xxx} 占位符可以通过
@PathVariable(“xxx“) 绑定到操作⽅法的⼊参中。
6、@JsonBackReference、@JsonManagedReference和@JsonIgnore
jquery框架定义1)@JsonBackReference和@JsonManagedReference这两个标注通常配对使⽤,通常⽤在⽗⼦关系中。@JsonBackReference标注的属性在序列化(serialization,即将对象转换为json数据)时,会被忽略(即结果中的json数据不包含该属性的内容)。
2)@JsonManagedReference标注的属性则会被序列化。在序列化时,@JsonBackReference的作⽤相当于@JsonIgnore,此时可以没有@JsonManagedReference。但在反序列化(deserialization,即json数据转换为对象)时,如果没有
@JsonManagedReference,则不会⾃动注⼊@JsonBackReference标注的属性(被忽略的⽗或⼦);如果有
@JsonManagedReference,则会⾃动注⼊⾃动注⼊@JsonBackReference标注的属性。
3)@JsonIgnore直接忽略某个属性,以断开⽆限递归,序列化或反序列化均忽略。当然如果标注在get、set⽅法中,则可以分开控制,序列化对应的是get⽅法,反序列化对应的是set⽅法。在⽗⼦关系中,当反序列化时,@JsonIgnore不会⾃动注⼊被忽略的属性值(⽗或⼦),这是它跟@JsonBackReference和@JsonManagedReference最⼤的区别。
7、@RequestMapping
提供路由信息,负责URL到Controller中的具体函数的映射。
8、@Import
在应⽤中,有时没有把某个类注⼊到IOC容器中,但在运⽤的时候需要获取该类对应的bean,此时就需要⽤到@Import注解。
9、ImportResource
ImportResource⽤来加载xml配置⽂件。
10、@Service、@Component、@Repository、@Controller
1. @Configuration配置类不可以是final类型;
2. @Configuration配置类不可以是匿名类;
3. 嵌套的configuration配置类必须是静态类。
@Service⽤于标注业务层组件,
@Controller⽤于标注控制层组件,
@Repository⽤于标注数据访问组件,即DAO组件,
@Component泛指组件,当组件不好归类的时候,我们可以使⽤这个注解进⾏标注。
11、@Bean
⽤@Bean标注⽅法等价于XML中配置的bean。
12、@Value
给属性注⼊Spring boot application.properties配置的属性的值。
13、@Inject
等价于默认的@Autowired,只是没有required属性。
14、@RequestBody
1)常⽤来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,⽐如说:application/json或者是
application/xml等。⼀般情况下来说常⽤其来处理application/json类型。
2)通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。
3)在⼀些特殊情况@requestBody也可以⽤来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种⽅式不是很常⽤,在处理这类请求的时候,@requestBody会将处理结果放到⼀个MultiValueMap<String,String>中,这种情况⼀般在特殊情况下才会使⽤,例如jQuery easyUI的datagrid请求数据的时候需要使⽤到这种⽅式、⼩型项⽬只创建⼀个POJO类的话也可以使⽤这种接受⽅式
15、@RequestParam
⽤于将指定的请求参数赋值给⽅法中的形参。
16、@ModelAttribute
将参数绑定到Model对象
17、@Primary
⾃动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为⾸选者,否则将抛出异常 。
18、@Qualifier
Qualifier的意思是合格者,通过这个标⽰,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义@Service注解的名称之⼀。
19、@PostConstruct、@PreConstruct
1)@PostConstruct
被@PostConstruct修饰的⽅法会在服务器加载Servlet的时候运⾏,并且只会被服务器调⽤⼀次,类似于Serclet的inti()⽅法。被
@PostConstruct修饰的⽅法会在构造函数之后,init()⽅法之前运⾏。
2)@PreConstruct
被@PreConstruct修饰的⽅法会在服务器卸载Servlet的时候运⾏,并且只会被服务器调⽤⼀次,类似于Servlet的destroy()⽅法。被@PreConstruct修饰的⽅法会在destroy()⽅法之后运⾏,在Servlet被彻底卸载之前。
⼆、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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论