整理了一些常用和用的不熟练的注解。
SpringBoot 核心注解
@SpringBootApplication
标识这是一个springboot应用,这个注解是SpringBootConfiguration EnableAutoConfigurationCompoentScan的结合体。
@SpringBootApplication
public class MyApplication{
public static void main(String[] args){
SpringApplication.run(MyApplication.class, args);
}
}
@Configuration
用它来代替applicationContext.xml
文件,可以在这个注解下进行配置。通常用来自定义Bean
@Configuration
public class MyConfig{
@Bean
public Mybean bean(){
}
}
@SpringBootConfiguration
是 Configuration 注解的变体,用来修饰 springboot的配置。
@EnableAutoConfiguration
允许springboot自动配置注解,开启之后,springboot会在自动配置Bean
CompoentScan
自动扫描@Compoent注解,包括@Service @Controller @Repository注册bean到context
@SpringBootApplication
@CompoentScan(basePackage="")
public class MyApplication{
public static void main(String[] args){
SpringApplication.run(MyApplication.class, args);
}
}
@Autowired
可以自动把一个Bean注入到当前类中。默认情况下是根据类型进行匹配,可以用@Qualifier 进行限制
@Compoent
public class MyCompoent{
@Autowired
private UserImpl userImpl;
}
@Value
从配置文件或者环境变量获取值。
@Bean
用于定义一个Bean,放到IOC容器中。一般在@Configuration中使用。
原型注解
@Scope
常用于设置Bean的作用域,包括 Singleton、Prototype、Request、Session 等。默认情况下,Bean 是 Singleton 的。
- Singleton: 默认,单例模式,全局仅有一个实例
- Prototype: 原型模式:每次获取Bean,都会有一个实例
- Request: 针对每一次Http都会创建一个实例,同时该实例仅在当前的Http Requset有效
- Session: 针对每次HTTP请求都会创建一个实例,同时该实例仅在当前的HTTP Session中有效
直接用字符串会有问题,用默认的参数:
-
ConfigurableBeanFactory.SCOPE_PROTOTYPE
-
ConfigurableBeanFactory.SCOPE_SINGLETON
-
WebApplicationContext.SCOPE_REQUEST
-
WebApplicationContext.SCOPE_SESSION
大部分业务直接用Singleton就可以,但是如果实例内有非静态变量,就会导致线程安全问题。 设置为Prototype的时候,每次连接都会生成一个实例,GC频繁,性能下降。
@Lazy
用于设置Bean的延迟初始化。当IOC从XML文件、java配置或其他方式加载的时候,不会初始化这个Bean。
@DependsOn
表示Bean之间的依赖关系。IOC启动的时候,先创建@DependsOn标识的Bean。
SpringWeb常用注解
@Controller
标志着类是一个SpringMVC控制器,用来处理HTTP请求
@Controller
public class MyController{}
@RestController
他是 @Controller 和 @ResponseBody,用于创建Restful风格的控制器,表示控制器所有方法返回的都是Json
格式的。
@RequsetMapping
用于映射Http请求,可以用value
属性指定URL请求,可以用Method
指定请求方法。
@RestController
@RequsetMapping("/v1")
publi class ApiController{
}
@GetMapping
相当于 @RequsetMapping(method=RequestMethod.GET)
@RestController
@RequsetMapping("/v1")
publi class ApiController{
@GetMapping("/hello")
public void handleHello(){}
}
@PostMapping
相当于 @RequsetMapping(method=RequsetMethod.Post)
@PutMapping
同上
@DeleteMapping
同上
@RequestParma
用于将请求参数映射到方法的参数当中,可以使用value
属性指定参数名,required
指定是否必填,defaultValue
指定默认值
@RestController
@RequsetMapping("/v1")
publi class ApiController{
@GetMapping("/hello")
public String handleHello(@RequestParma("name") string name){
return "hello " + name;
}
}
@PathVariable
用于把URL的占位符映射到方法的参数中。可以使用value
属性指定占位符名称。
@RestController
@RequsetMapping("/v1")
publi class ApiController{
@GetMapping("/{name}")
public String handleName(@PathVariable("name") String name){
}
}
@RequestBody
用于从请求体中获取数据。通常处理Post,Put请求
@RestController
@RequestMapping("/api")
public class MyController {
@PostMapping("/greeting")
public String greeting(@RequestBody GreetingRequest request) {
return "Hello, " + request.getName() + "!";
}
}
@Data
public class GreetingRequest {
private String name;
}
@ResponseBody
注解表示该方法返回的结果直接输出到响应体中。
@ResponseStatus
注解用于指定请求处理完成后的状态码。
@Cacheable
表示该方法的结果被缓存,假如参数相同,就调用缓存的结果。
@CachePut
表示方法的结果应该被缓存起来,下次调用该方法时,不会返回缓存结果,而是重新计算结果并缓存起来。
@CacheEvict
表示方法执行后从缓存中删除指定项。
测试注解
@SpringBootTest
它会创建一个完整的 Spring 应用程序上下文,并在测试期间使用它
数据库相关
@Transactional
用于指定一个方法需要在事务中执行。默认情况下,只有 RuntimeException 会触发事务回滚。
@Reposity
用于标记数据访问层,表示这个类是一个数据仓库
@Entity
用于标记实体类,表示这个类是一个JPA实体,与数据库中的表对应。
@Id
标记主键字段
@GeneratedValue
指定主键的生成策略。
@Column
指定实体属性和数据库表之间的映射关系。