Springboot积累(1):Springboot常⽤注解
⽬录
1、springboot注解
@Service: 注解在类上,表⽰这是⼀个业务层bean
@Controller:注解在类上,表⽰这是⼀个控制层bean
@Repository: 注解在类上,表⽰这是⼀个数据访问层bean
@Component: 注解在类上,表⽰通⽤bean ,value不写默认就是类名⾸字母⼩写
@Autowired: 按类型注⼊。默认属性required= true;当不能确定 Spring 容器中⼀定拥有某个类的Bean 时, 可以在需要⾃动注⼊该类 Bean 的地⽅可以使⽤ @Autowired(required = false), 这等于告诉Spring:在不到匹配Bean时也不抛出
BeanCreationException 异常。@Autowired 和 @Qualifier 结合使⽤时,⾃动注⼊的策略就从 byType 转变byName 了。
@Autowired可以对成员变量、⽅法以及构造函数进⾏注释,⽽ @Qualifier 的标注对象是成员变量、⽅法⼊参、构造函数⼊参。正是由于注释对象的不同,所以 Spring 不将 @Autowired 和 @Qualifier 统⼀成⼀个注释类。
@Resource: 按名称装配
2、注解区别
@Resource 默认按照名称⽅式进⾏bean匹配,@Autowired默认按照类型⽅式进⾏bean匹配
@Resource(importjavax.annotation.Resource;)是J2EE的注解
@Autowired(importorg.springframework.beans.factory.annotation.Autowired;)是Spring的注解
@Configuration:注解在类上,表⽰这是⼀个IOC容器,相当于Spring的配置⽂件,java配置的⽅式。 IOC容器的配置类⼀般与@Bean 注解配合使⽤,⽤ @Configuration 注解类等价与 XML 中配置 beans,⽤@Bean 注解⽅法等价于 XML 中配置 bean。
@Bean: 注解在⽅法上,声明当前⽅法返回⼀个Bean
@Scope:注解在类上,描述spring容器如何创建Bean实例。
1. singleton: 表⽰在spring容器中的单例,通过spring容器获得该bean时总是返回唯⼀的实例
spring ioc注解2. prototype:表⽰每次获得bean都会⽣成⼀个新的对象
3. request:表⽰在⼀次http请求内有效(只适⽤于web应⽤)
4. session:表⽰在⼀个⽤户会话内有效(只适⽤于web应⽤)
5. globalSession:表⽰在全局会话内有效(只适⽤于web应⽤)
在多数情况,我们只会使⽤singleton和prototype两种scope,如果未指定scope属性,默认为singleton @Value:注解在变量上,从配置⽂件中读取。
例如:@Value(value = “#{message}”)
@ConfigurationProperties 赋值,将注解转换成对象。给对象赋值。车险项⽬:HttpClientSetting类
@Profile:注解在⽅法类上在不同情况下选择实例化不同的Bean特定环境下⽣效
@SpringBootApplication=@ComponentScan+@Configuration+@EnableAutoConfiguration:约定优于配置
@EnableAutoConfiguration 启⽤ Spring 应⽤程序上下⽂的⾃动配置,试图猜测和配置您可能需要的bean。⾃动配置类通常采⽤基于你的classpath 和已经定义的 beans 对象进⾏应⽤。被 @EnableAutoConfiguration 注解的类所在的包有特定的意义,并且作为默认配置使⽤。通常推荐将 @EnableAutoConfiguration 配置在 root 包下,这样所有的⼦包、类都可以被查到
@ComponentScan:注解在类上,扫描标注了@Controller等注解的类,注册为bean @ComponentScan 为 @Configuration注解的类配置组件扫描指令。@ComponentScan 注解会⾃动扫描指定包下的全部标有 @Component注解的类,并注册成bean,当然包括 @Component下的⼦注解@Service、@Repository、@Controller。
@RestController:⼀个结合了 @ResponseBody 和 @Controller 的注解
@Responsebody :注解表⽰该⽅法的返回的结果直接写⼊ HTTP 响应正⽂(ResponseBody)中,⼀般在异步获取数据时使⽤,通常是在使⽤ @RequestMapping 后,返回值通常解析为跳转路径,加上@Responsebody 后返回结果不会被解析为跳转路径,⽽
是直接写⼊HTTP 响应正⽂中。
@PathVariable、@RequestParam:两者的作⽤都是将request⾥的参数的值绑定到 control⾥的⽅法参数⾥。
区别在于,URL写法不同。当请求参数username不存在时会有异常发⽣,可以通过设置属性required=false解决 ,例如@RequestParam(value="username",required=false)
1. 使⽤@RequestParam时,URL是这样的:host:port/path?参数名=参数值
2. 使⽤@PathVariable时,URL是这样的:host:port/path/参数值,不写的时候也可以获取到参数值,但是必须名称对应。参
数可以省略不写
@RequestMapping: 和请求报⽂是做对应的
a:value,指定请求的地址
b:method 请求⽅法类型 这个不写的话,⾃适应:get或者post
c:consumes 请求的提交内容类型
d:produces 指定返回的内容类型 仅当request请求头中的(Accept)类型中包含该指定类型才返回
e: params 指定request中必须包含某些参数值
f:headers 指定request中必须包含指定的header值
g: name 指定映射的名称
@RequestMapping(method = RequestMethod.GET)
@RequestMapping(method = RequestMethod.POST)
@RequestMapping(method = RequestMethod.PUT)
@RequestMapping(method = RequestMethod.DELETE)
当然也可以使⽤
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping 这与上⾯的是⼀样的效果
@EnableCaching :是spring framework中的注解驱动的缓存管理功能。⾃spring版本3.1起加⼊了该注解。如果你使⽤了这个注解,那么你就不需要在XML⽂件中配置cache manager了。
3、其他注解
@suppresswarnings 抑制警告
@Modifying 如果是增,改,删加上此注解
1:⽅法的返回值应该是int,表⽰更新语句所影响的⾏数。
2:在调⽤的地⽅必须加事务,没有事务不能正常执⾏。@Transactional 事务注解
@Query ⾃定义查询语句 JPQL
4、JPA注解
@Entity:@Table(name=“”):注解在类上表明这是⼀个实体类。⼀般⽤于jpa这两个注解⼀般⼀块使⽤,但是如果表名和实体类名相同的话,@Table可以省略
@Column:通过@Column注解设置,包含的设置如下 name:数据库表字段名
unique:是否唯⼀
nullable:是否可以为空
Length:长度
inserttable:是否可以插⼊
updateable:是否可以更新
columnDefinition: 定义建表时创建此列的DDL
secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
@Column(name = "user_code", nullable = false, length=32)//设置属性userCode对应的字段为user_code,长度为32,⾮空 private String userCode;
@Column(name = "user_wages", nullable = true, precision=12,scale=2)//设置属性wages对应的字段为user_wages,12位数字可保留两位⼩数,可以为空
private double wages;
@Id:表⽰该属性为主键。
@Temporal(TemporalType.DATE)//设置为时间类型
private Date joinDate;
@Transient:表⽰该属性并⾮⼀个到数据库表的字段的映射,ORM框架将忽略该属性。如果⼀个属性并⾮数据库表的字段映射,就务必将其标⽰为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载⽅式
@JsonIgnore:作⽤是json序列化时将bean中的⼀些属性忽略掉,序列化和反序列化都受影响。
@JoinColumn(name=”loginId”):⼀对⼀:本表中指向另⼀个表的外键。⼀对多:另⼀个表指向本表的外键。
@OneToOne、@OneToMany、@ManyToOne:对应配置⽂件中的⼀对⼀,⼀对多,多对⼀。
@GeneratedValue ⽤于标注主键的⽣成策略,通过 strategy 属性指定。默认情况下,JPA ⾃动选择⼀
个最适合底层数据库的主键⽣成策略:SqlServer 对应 identity,MySQL 对应 auto increment。 在 javax.persistence.GenerationType 中定义了以下⼏种可供选择的策略:
IDENTITY:采⽤数据库 ID⾃增长的⽅式来⾃增主键字段,Oracle 不⽀持这种⽅式;
AUTO: JPA⾃动选择合适的策略,是默认选项;
SEQUENCE:通过序列产⽣主键,通过 @SequenceGenerator 注解指定序列名,MySql 不⽀持这种⽅式
TABLE:通过表产⽣主键,框架借由表模拟序列产⽣主键,使⽤该策略可以使应⽤更易于数据库移植。
参考:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论