SpringBoot常用注解


@SpringBootApplication

约定优于配置。

一般放在 主程序入口类 上,主程序入口类(启动类) 放在root 包下,这样程序启动时所有的相关配置,类都能扫描,查找到。

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

但其实也可以放在其他类 OtherClass 上,但是需要在run函数中改为 OtherClass.class,程序启动时也会调用相关配置:

public class Application {
	public static void main(String[] args) {
		SpringApplication.run(OtherClass.class, args);
	}
}
@SpringBootApplication
public class OtherClass{}

@SpringBootApplication = @ComponentScan + @Configuration + @EnableAutoConfiguration。

@ComponentScan

注解在类上。

@ComponentScan让SpringBoot扫描到Configuration类并把它加入到程序上下文。

@ComponentScan 注解会自动扫描指定包下的全部标有 @Component注解的类,并注册成bean,也包括 @Component下的子注解@Service、@Repository、@Controller。

@Configuration

注解在类上,表示这是一个IOC容器,相当于spring的配置文件,java配置的方式。 IOC容器的配置类一般与 @Bean 注解配合使用,用@Configuration 注解类等价与 XML 中配置 beans,用@Bean 注解方法等价于 XML 中配置 bean。@Bean:注解在方法上,声明当前方法返回一个Bean。

@EnableAutoConfiguration

启用 Spring 应用程序上下文的自动配置,试图猜测和配置您可能需要的bean。自动配置类通常采用基于你的classpath 和已经定义的 beans 对象进行应用。被 @EnableAutoConfiguration 注解的类所在的包有特定的意义,并且作为默认配置使用。通常推荐将 @EnableAutoConfiguration 配置在 root 包下,这样所有的子包、类都可以被查找到。


@Component

注解在类上,表示通用bean ,value不写默认就是类名首字母小写。@Component的子注解有 @Repository、@Service、@Controller。

@Repository

注解在类上,表示这是一个数据访问层bean

@Service

注解在类上,表示这是一个业务层bean

@Controller

注解在类上,表示这是一个控制层bean


@Controller

@Responsebody

该注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上@Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中

@RequestMapping(value = "/change", method = RequestMethod.POST,
				produces = "application/json;charset=utf-8")

@RequestMapping

  1. value,指定请求的地址
  2. method ,请求方法类型。这个不写的话,自适应:get或者post
  3. consumes ,请求的提交内容类型
  4. produces ,指定返回的内容类型。仅当request请求头中的(Accept)类型中包含该指定类型才返回
  5. params ,指定request中必须包含某些参数值
  6. headers ,指定request中必须包含指定的header值
  7. name , 指定映射的名称
@RequestMapping("/test") 
//@RequestMapping(method = RequestMethod.GET)/@GetMapping
@ResponseBody 
public String test(){ return "ok"; }

@RestController

用于标注控制层组件(如struts中的action)。

@RestController 是一个结合了 @ResponseBody 和 @Controller 的注解(像:resetful接口调用时,返回的是json等就使用),所以不再需要另外加注解 @ResponseBody。

import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController;

@RestController 
@RequestMapping(/demo”) 
public class Demo{
	@RequestMapping("/test")
	public String test(){
		return"ok";
	}
}

注入

@Autowired (byType方式)

按类型注入、装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。

把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

默认属性required= true;当不能确定 Spring 容器中一定拥有某个类的Bean 时, 可以在需要自动注入该类 Bean 的地方可以使用@Autowired(required = false), 这等于告诉Spring:在找不到匹配Bean时也不抛出BeanCreationException 异常。

@Autowired 
@Qualifier(value = “userService”) 
private UserService userService;

@Qualifier

当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。

@Resource (byName方式)

@Resource(name=“name”,type=“type”)
没有括号内内容的话,默认byName。与@Autowired干类似的事。

@Scope 描述spring容器如何创建Bean实例

注解在类上。

1、singleton: 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例
2、prototype:表示每次获得bean都会生成一个新的对象
3、request:表示在一次http请求内有效(只适用于web应用)
4、session:表示在一个用户会话内有效(只适用于web应用)
5、globalSession:表示在全局会话内有效(只适用于web应用)

在多数情况,我们只会使用singleton和prototype两种scope,如果未指定scope属性,默认为singleton。

@ConfigurationProperties

赋值,将注解转换成对象。给对象赋值。

Spring Boot将尝试校验外部的配置,默认使用JSR-303(如果在classpath路径中)。
你可以轻松的为你的@ConfigurationProperties类添加JSR-303 javax.validation约束注解:

@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
	@NotNull
	private InetAddress remoteAddress;
	// ... getters and setters
}

其他

@suppresswarnings 抑制警告

@Transactional 事务注解

在Spring中,事务有两种实现,分别是编程式事务和声明式事务。

  1. 编程式事务:
    编程式事务使用TransationTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务,spring推荐使用TransationTemplate。

  2. 声明式事务:
    建立在AOP基础上,其本质是对方法前后进行拦截,然后再目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过@Transactional就可以进行事务操作,更快捷而且简单。推荐使用。


导入配置文件

@PropertySource

引入单个properties文件
@PropertySource(value = {"classpath:xxxx/xxxx.properties"})

引入多个properties文件:
@PropertySource(value = {"classpath:xxxx/xxxx.properties","classpath:xxxx/xxxx.properties"})

@ImportResource导入xml配置文件

可以分为两种模式,相对路径的classpath,绝对路径的file。
注意:单文件可以不写value或locations。

取值:使用 @Value注解取配置文件中的值:

@Value("${properties中的键}")
private String xxx;

@Import导入额外的配置文件

功能类似XML配置的,用来导入配置类,可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar。

@SpringBootApplication
@Import({SmsConfig.class})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

JPA

@Entity ,@Table(name="")

表明这是一个实体类,一般用于jpa,这两个注解一块使用,但是如果表名和实体类名相同的话,@Table可以省略。

@MappedSuperClass

基于代码复用和模型分离的思想,在项目开发中使用jpa的@MappedSuperClass注解,将实体类的多个属性分别封装到不同的非实体类中。例如,数据库表中都需要id来表示编号,id是这些映射实体类的通用属性,交给jpa统一生产主键id编号,那么使用一个父类来封装这些通用属性,并用@MappedSuperClass标识。

注意:

标注为@MappedSuperClass的类将不是一个完整的实体类,它将不会映射到数据库表,但是它的属性都映射到其子类的数据库字段中。
标注@MappedSuperClass的类不能再标注@#Entity或@Table注解,也无需实现序列化接口。

@NoRepositoryBean

一般用做父类的repository,有这个注解,spring不会去实例化该repository。

@Column

如果字段名和列名相同,则可以省略。

@Id

表示该属性为主键。

@Transient

表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。

如果一个属性并非数据库表的字段映射,就务必将其标注为@Transient,否则,ORM框架默认将其注解为@Basic。

@Basic

@Basic 是实体类与数据库字段映射时最简单的类型。

类型支持Java基本类型(byte、short、int、long、float、double、char、boolean),包装类,枚举类,以及实现了serializable接口的类型。

@basic注解有两个属性:

fetch用来指定属性的加载机制
有两个选项:EAGER(即时加载,默认值)和LAZY(懒加载),即时加载意味着当实例化对象的时候必须加载该属性值,懒加载是指当实例化对象时不加载该对象,只有当调用该属性时才加载。

optional用来指定属性是否可空
有两个选项:true(可空,默认值)和false

如果你的实体类上不加@Basic注解,它也会自动加上@Basic,并使用默认值。

@JsonIgnore

在实体类向前台返回数据时用来忽略不想传递给前台的属性或接口。

Bean实体中会有某些运维字段,返回信息给前台的时候,不希望将对应值一并返回。此时可以在对应属性上加上@JsonIgnore,或者可以在User类上加上注解@JsonIgnoreProperties(value="{password}")

@JoinColumn、@OneToOne、@OneToMany、@ManyToOne


Spring MVC 注解

@PathVariable和@RequestParam

都是将request里的参数的值绑定到contorl里的方法参数里的,区别在于,URL写法不同

使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值
使用@PathVariable时,URL是这样的:http://host:port/path/参数值

当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决,例如: @RequestParam(value=“username”, required=false)
不写的时候也可以获取到参数值,但是必须名称对应。参数可以省略不写。

RequestMapping(“user/{username}) 
public String getByUsername(@PathVariable String username){} 

缓存

@EnablCaching

@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。


未完待续
如果有错误的地方欢迎指出~😙

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值