0


SpringBoot常用注解

SpringBoot常用注解

1.常用注解介绍

1.1 SpringMvc的实现原理

springmvc

image-20220803122030297

1.2 常用的注解介绍

常用注解分类有如下:

1.项目配置注解

  • @SpringBootApplication
  • @ServletComponentScan
  • @MapperScan

2.Controller的表现层注解:

  • @controller
  • @Autowired
  • @CrossOrigin
  • @PathVariable
  • @RequestParam
  • @EnablCaching
  • @RestController
  • @RequestMapping
  • @ResponseBody
  • @GetMapping
  • @PutMapping
  • @PostMapping
  • @DeleteMapping

3.servcie业务层注解

  • @Service
  • @Resource

4.持久层注解

  • @Repository
  • @Component
  • @Transactional

5.其他相关注解

  • @ControllerAdvice
  • @Configuration
  • @Bean
  • @Value

1.3 前言介绍

在spring boot中,摒弃了spring以往项目中大量繁琐的配置,遵循约定大于配置的原则,通过自身默认配置,极大的降低了项目搭建的复杂度。同样在spring boot中,大量注解的使用,使得代码看起来更加简洁,提高开发的效率。这些注解不光包括spring boot自有,也有一些是继承自spring的。

2.配置文件相关注解

2.2 @SpringBootApplication

@SpringBootApplication

是一个复合注解,包含了

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan

这三个注解这三个注解的作用分别为:

  • @SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
  • @EnableAutoConfiguration:是自动配置的注解,这个注解会根据我们添加的组件jar来完成一些默认配置,我们做微服时会添加spring-boot-starter-web这个组件jar的pom依赖,这样配置会默认配置springmvc 和tomcat。
  • @ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。等价于context:component-scan的xml配置文件中的配置项
@SpringBootApplicationpublicclassSpringboot2Application{publicstaticvoidmain(String[] args){SpringApplication.run(Springboot2Application.class, args);}}

2.3 @ServletComponentScan

Servlet、Filter、Listener 可以直接通过

@WebServlet、@WebFilter、@WebListener

注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置,所以这次相中使用到了filter的实现,用到了这个注解

2.4 @MapperScan

spring-boot支持mybatis组件的一个注解,通过此注解指定

mybatis接口类的路径

,即可完成对mybatis接口的扫描。

@MapperScan("com.example.mapper")@SpringBootApplicationpublicclassSpringboot2Application{publicstaticvoidmain(String[] args){SpringApplication.run(Springboot2Application.class, args);}}

3.Controller层相关注解

3.1 @controller

表明这个类是一个控制器类,和

@RequestMapping

来配合使用拦截请求

@ControllerpublicclassUserController{@RequestMapping("/view")publicStringview(){return"view";}}

3.2 @Autowired

是spring的自动装配,这个个注解可以用到构造器,变量域,方法,注解类型上。

当我们需要从bean 工厂中获取一个bean时,Spring会自动为我们装配该bean

中标记为@Autowired的元素

publicclassUserController{@AutowiredprivateUserService userService;@RequestMapping("/view")publicStringview(){
        userService.save();return"view";}}

3.3 @CrossOrigin

@CrossOrigin(origins = “”, maxAge = 1000)

这个注解主要是为了解决跨域访问的问题。这个注解可以为整个controller配置启用跨域,也可以在方法级别启用

3.4 @PathVariable

路径变量注解,

@RequestMapping中用{}

来定义url部分的变量名

privatestaticfinalString  PAGE ="param";// @PathVariable的用法// 这里是@PathVariable注解的单个值路径使用方法@RequestMapping("/path/{id}")publicModelAndViewpathTest1(@PathVariable(value ="id",required =false)int id){ModelAndView modelAndView =newModelAndView();
         modelAndView.setViewName(PAGE);return modelAndView;}// 这里是@PathVariable注解的多个值路径使用方法@RequestMapping("/path/{id}/{username}/{password}")publicModelAndViewpathTest2(@PathVariable(value ="id",required =false)int id,@PathVariable(value ="username",required =false)String username,@PathVariable(value ="password",required =false)String password){ModelAndView modelAndView =newModelAndView();
        modelAndView.setViewName(PAGE);return modelAndView;}

3.5 @RequestParam

用于将指定的请求参数赋值给方法中的形参。

有三个属性:

  • value:请求参数名(必须配置)
  • required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)
  • defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置)
privatestaticfinalString  PAGE ="param";// @RequestParam 的多参数方式使用@RequestMapping("/param")publicModelAndViewparamTest(@RequestParam(value ="id",required =false,defaultValue ="0")int id,@RequestParam(value ="username",required =false,defaultValue ="zhangsan")String username,@RequestParam(value ="password",required =false,defaultValue ="123456")String password){ModelAndView modelAndView =newModelAndView();
        modelAndView.addObject("id",id);
        modelAndView.addObject("username",username);
        modelAndView.addObject("password",password);
        modelAndView.setViewName(PAGE);return modelAndView;// 访问的时候使用 http://localhost:8080/param?id=1&username=zhangsan&password=123456}

3.6 @EnablCaching

@EnableCaching: 这个注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。其作用相当于spring配置文件中的cache manager标签。

3.7 @RestController

@RestController

@Controller

@ResponseBody

的结合,以json数据格式返回数据,一个类被加上@RestController 注解,数据接口中就不再需要添加@ResponseBody。更加简洁。

@RestController// @Controller + @ResponseBody@RequestMapping("/request")publicclassRestUserController{@GetMapping("/get")publicUserrestTest(){User user =newUser(1,"zhangsan",20,"男");return user;}

3.8 @RequestMapping

第一种使用

1.用来拦截请求,默认拦截get和post请求

@RequestMapping("/adminDetele/{id}")
或
@RequestMapping(value="/adminDetele/{id}", method=RequestMethod.GET )

2.详细使用方法:

@RestController// @Controller + @ResponseBody@RequestMapping("/request")publicclassRestUserController{@RequestMapper("/data1")publicStringsave(){return"Hello Word"}}

第二种使用

1.导入Freemarker的坐标

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>

2.配置application.yml的配置文件

# 配置视图解析器spring:mvc:view:prefix: /
      suffix: .html
  # 配置freemarker插件  后缀freemarker:suffix: .html
    template-loader-path: classpath:/static/

3.使用@GetMapping注解配合视图解析器

@RestControllerpublicclassUserController{@RequestMapping("/view")publicStringview(){return"view";}}

3.9 @ResponseBody

后端如果要返回json数据的话,需要配合@ResponseBody注解来完成

3.10 @GetMapping

用于将HTTP GET请求映射到特定处理程序方法的注释。具体来说,

@GetMapping

是一个作为快捷方式的组合注释

@RequestMapping(method = RequestMethod.GET)

@RestController@RequestMapping("/request")publicclassRestUserController{@GetMapping("/get")publicUserrestTest(){User user =newUser(1,"zhangsan",20,"男");return user;}}

3.11 @PostMapping

用于将HTTP POST请求映射到特定处理程序方法的注释。具体来说,

@PostMapping

是一个作为快捷方式的组合注释

@RequestMapping(method = RequestMethod.POST)

@RestController@RequestMapping("/request")publicclassRestUserController{@PostMapping("/addUser")publicUseraddUser(@RequestBodyUser user){System.out.println(user);return user;}}

类似的组合注解还有

  • @PutMapping、@DeleteMapping、@PatchMapping

4.业务层相关注解

4.1@Service

这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给spring容器管理,在需要使用的地方可使用

@Autowired自动装配
@ServicepublicclassArticleServiceImplimplementsArticleService{}@ControllerpublicclassArticleController{@AutowiredArticleService articleService;}

4.2 @Resource

@Resource和@Autowired一样都可以用来装配bean,都可以标注字段上,或者方法上。 @resource注解不是spring提供的,是属J2EE规范的注解。两个之前的区别就是匹配方式上有点不同,@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配

@Service("userService")publicclassUserServiceImplimplementsUserService{}@RestControllerpublicclassUserController{@Autowired@Qualifier("userService")@Resource(name ="userService")privateUserService userService;}

5. 持久层注解

5.1 @Repository

作为DAO对象,管理操作数据库的对象。@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理

@RepositorypublicinterfaceUserDao{}

5.2 @Component

通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。通过这些注解的分层管理,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发

@ComponentpublicclassRedisUtils{@AutowiredRedisTemplate<String,String> redisTemplate;publicObjectget(String key){return redisTemplate.opsForValue().get(key);}}

5.3 @Transactional

声明事务,可以添加在类上或者方法上。在spring boot中 不用再单独配置事务管理,一般情况是我们会在servcie层添加了事务注解,即可开启事务。要注意的是,事务的开启只能在public 方法上

//尽量放在业务层上@Transactional@RequestMapping("/test")publicStringtest(Upload upload){}

6. 其他相关注解

6.1 ControllerAdvice

@ControllerAdvice 和 @ExceptionHandler

配合完成统一异常拦截处理

@RestControllerAdvice 是 @ControllerAdvice 和 @ResponseBody的合集,可以将异常以json的格式返回数据。

@ControllerAdvicepublicclassGlobalExceptionHandler{@AutowiredRedisUtils redisUtils;@ExceptionHandler(value =Exception.class)publicModelAndViewdefaultErrorHandler(HttpServletRequest req,Exception e)throwsException{ModelAndView mav =newModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());//        mav.addObject("admin", redisUtils.get(Constant.USER));
        mav.setViewName("error");return mav;}}

6.2 @Configuration

声明当前类为配置类,配合

@Bean

注解一起使用,可以作为导入插件。

@ConfigurationpublicclassMybatiPlusConfig{@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptor interceptor =newMybatisPlusInterceptor();
        interceptor.addInnerInterceptor(newOptimisticLockerInnerInterceptor());return interceptor;}}
标签: spring boot java spring

本文转载自: https://blog.csdn.net/weixin_46532941/article/details/129922697
版权归原作者 CN-ZHANG 所有, 如有侵权,请联系我们删除。

“SpringBoot常用注解”的评论:

还没有评论