1.声明bean
@Component 组件,没有明确的角色
@Controller 在展现层使用,控制器的声明(Controller层)
@Service 在业务逻辑层使用(service层)
@Repository 在数据访问层使用(dao层)
@Mapper Mybatis注解,可替代Repository
@Component (@Controller, @Service, @Repository)用于自动检测和使用类路径扫描自动配置bean。注释类和bean之间存在隐式的一对一映射(即一个类对应一个bean)。
@Bean
用于显式声明单个bean,而不是让Spring像上面那样自动执行它。它将bean的声明与类定义分离,并允许您精确地创建和配置bean。
2.注入bean
@Autowired by type Spring
@Resource by name JSR-250
@Qualifier @Autowired @Qualifie("NAME") Spring
@Inject @Inject @Named("NAME") JSR330
注解在属性上
@Autowired:先byType再byName,默认情况下它要求依赖对象必须存在(可以设置它required
属性为false)
@Resource:先byName再byType,当指定@Resource name属性时,只会byName
@Qualifier:当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。
@Required
这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException
3.java配置类
@Configuration 声明当前类为配置类,相当于xml形式的Spring配置
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式
@ComponentScan 用于对Component进行扫描,相当于xml中的
@WishlyConfiguration 为@Configuration与@ComponentScan的组合注解,可以替代这两个注解
@ConfigurationProperties 将属性变为可配置的
4.切面(AOP)
@Aspect 声明一个切面(类上)
@After 在方法执行之后执行(方法上)
@AfterReturning
@Before 在方法执行之前执行(方法上)
@Around 在方法执行之前与之后执行(方法上)
@PointCut 声明切点
5.请求
5.0 RequestMapping(path=" ", method=" ")
注解实现接收http请求的json数据,将json转换为java对象
get,post
类级别:映射请求的 URL
方法级别:映射 URL 以及 HTTP 请求方法
5.0 springboot中的简写
@GetMapping
@PostMapping
@DeleteMapping
@PutMapping
5.1 Request:
写在方法的参数上,@RequestBody @RequestParam @PathVariable 都是用来处理请求参数映射的,只是涉及的场景不同
@RequestParam(name=" ", required=" ", defaultValue=" ")
/student?current=1&limit=10
get, post
Content-Type: application/x-www-form-urlencoded
@RequestBody
注解实现将conreoller方法返回对象转化为json对象响应给客户
post
Content-Type: application/json
适用于返回类型json的情况
@PathVariable
/student/123
@PathParam
类似@PathVariable, 不同的是@PathVariab在没有对应属性时会是一个null值,不会报错
5.2 Response:
写在方法上
@ResponseBody
@RestController
@RestController = @Controller + @ResponseBody
返回JSON 或 XML 形式数据
6.事务
@Insert
@Select
@Update
@Delete
以上4个写在Mapper接口上
@Options 声明sql相关的其他信息,如:自增
@Transactional 声明事务,隔离级别,传播机制
7.元注解
常用的元注解:
@Target
注解作用域
@Retention
注解作用时间
@Document
注解是否写入文本
@Inherited
标有该注解的类的子类自动继承该注解
- 如何读取注解:
Method.getDeclaredAnnotations()
Method.getAnnotation(Class<T> annotationClass)
8. 异常处理
@ControllerAdvice
统一处理异常
- 用于修饰类,表示该类是Controller的全局配置类。
- 在此类中,可以对Controller进行如下三种全局配置:
异常处理方案、绑定数据方案、绑定参数方案。
@RestControllerAdvice = @Responsbody + @ControllerAdvice
@ExceptionHandler
- 用于修饰方法,该方法会在Controller出现异常后被调用,用于处理捕获到的异常。
@ModelAttribute
- 用于修饰方法,该方法会在Controller方法执行前被调用,用于为Model对象绑定参数。
@DataBinder
- 用于修饰方法,该方法会在Controller方法执行前被调用,用于绑定参数的转换器。
9.其他
@Scope 设置Spring容器如何新建Bean实例 @Bean(NAME)@Scope(Value)
其设置类型包括:
Singleton (单例,一个Spring容器中只有一个bean实例,默认模式
Protetype (每次调用新建一个bean)
Request (web项目中,给每个http request新建一个bean)
Session (web项目中,给每个http session新建一个bean)
GlobalSession(给每一个 global http session新建一个Bean实例)
@Value 为属性注入值
@Value(VALUE)
String name;
@Async 在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)
@Scheduled 来申明这是一个任务
@RunWith 运行器,Spring中通常用于对JUnit的支持
@Primary 自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常。
@Named 和Spring的@Component功能相同。@Named可以有值,如果没有值生成的Bean名称默认和类名相同。
@Valid 不分组校验
@Validated 对javabean的校验, 对使用@RequestParam方式接收参数方式校验使用@Validated
分组检验
@Param 用于给参数取别名,如果只有一个参数,并且在<if>里使用,则必须加别名
@CookieValue 声明cookie参数
Springboot 注解
- @SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能;
- @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置的功能:
- @SpringBootApplication(exclude={DataSourceAutoConfiguration.class});
- @ComponentScan:Spring组件扫描
- @ImportResource 注解导入老 Spring 项目配置文件
java自带注解
-
@Override
:表示当前的方法定义将覆盖父类中的方法 -
@Deprecated
:表示代码被弃用,如果使用了被@Deprecated注解的代码则编译器将发出警告 -
@SuppressWarnings
:表示关闭编译器警告信息 -
@Target:
描述注解的使用范围(即:被修饰的注解可以用在什么地方) -
@Retention:
描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以被保留到何时) -
@Documented:
描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息 -
@inherited:
被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解
@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。
@PostConstruct
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。
Constructor >> @Autowired >> @PostConstruct
@PreDestroy
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。
标签:java,Spring,Controller,bean,修饰,注解,方法 From: https://blog.51cto.com/u_15905340/5919337