SpringBoot 核心注解#
@SpringBootApplication#
标识这是一个springboot应用,这个注解是SpringBootConfiguration EnableAutoConfigurationCompoentScan的结合体。
@SpringBootApplication
public class MyApplication{
public static void main(String[] args){
SpringApplication.run(MyApplication.class, args);
}
}
java@Configuration#
用它来代替applicationContext.xml
文件,可以在这个注解下进行配置。通常用来自定义Bean
@Configuration
public class MyConfig{
@Bean
public Mybean bean(){
}
}
java@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);
}
}
java@Autowired#
可以自动把一个Bean注入到当前类中。默认情况下是根据类型进行匹配,可以用@Qualifier 进行限制
@Compoent
public class MyCompoent{
@Autowired
private UserImpl userImpl;
}
java@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{}
java@RestController#
他是 @Controller 和 @ResponseBody,用于创建Restful风格的控制器,表示控制器所有方法返回的都是Json
格式的。
@RequsetMapping#
用于映射Http请求,可以用value
属性指定URL请求,可以用Method
指定请求方法。
@RestController
@RequsetMapping("/v1")
publi class ApiController{
}
java@GetMapping#
相当于 @RequsetMapping(method=RequestMethod.GET)
@RestController
@RequsetMapping("/v1")
publi class ApiController{
@GetMapping("/hello")
public void handleHello(){}
}
java@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;
}
}
java@PathVariable#
用于把URL的占位符映射到方法的参数中。可以使用value
属性指定占位符名称。
@RestController
@RequsetMapping("/v1")
publi class ApiController{
@GetMapping("/{name}")
public String handleName(@PathVariable("name") String name){
}
}
java@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;
}
java@ResponseBody#
注解表示该方法返回的结果直接输出到响应体中。
@ResponseStatus#
注解用于指定请求处理完成后的状态码。
@Cacheable#
表示该方法的结果被缓存,假如参数相同,就调用缓存的结果。
@CachePut#
表示方法的结果应该被缓存起来,下次调用该方法时,不会返回缓存结果,而是重新计算结果并缓存起来。
@CacheEvict#
表示方法执行后从缓存中删除指定项。
测试注解#
@SpringBootTest#
它会创建一个完整的 Spring 应用程序上下文,并在测试期间使用它
数据库相关#
@Transactional#
用于指定一个方法需要在事务中执行。默认情况下,只有 RuntimeException 会触发事务回滚。
@Reposity#
用于标记数据访问层,表示这个类是一个数据仓库
@Entity#
用于标记实体类,表示这个类是一个JPA实体,与数据库中的表对应。
@Id#
标记主键字段
@GeneratedValue#
指定主键的生成策略。
@Column#
指定实体属性和数据库表之间的映射关系。