• springboot 常用注解


    文章目录


    前言

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

    一、常用注解

    1. 项目配置注解

    1.@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配置文件中的配置项

    2.@ServletComponentScan

    Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置,所以这次相中使用到了filter的实现,用到了这个注解

    3.@MapperScan

    spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描。

    2.@controller

    表明这个类是一个控制器类,和@RequestMapping来配合使用拦截请求

    @Controller
    public class AdminLoginController {
    @RequestMapping({"/", "/login"})
        public String hello() {
            return "index";
        }}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.@Autowired

    是spring的自动装配,这个个注解可以用到构造器,变量域,方法,注解类型上。当我们需要从bean 工厂中获取一个bean时,Spring会自动为我们装配该bean中标记为@Autowired的元素

    @Service
    public class ArticleServiceImpl implements ArticleService {}
    
    @Controller
    public class ArticleController {
        @Autowired
        ArticleService articleService;}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.@CrossOrigin

    @CrossOrigin(origins = “”, maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个controller配置启用跨域,也可以在方法级别启用

    3.@PathVariable

    路径变量注解,@RequestMapping中用{}来定义url部分的变量名

        @RequestMapping("/adminDetele/{id}")
        public String adminDetele(@PathVariable("id") int id){
            loginService.adminRecovery(id);
            loginService.adminDetele(id);
            return "redirect:/admin/adminDelList-del";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.@EnablCaching

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

    5.@RestController

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

    6.@RequestMapping

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

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

    rest风格

    普通风格, Rest风格(加粗部分)
    @RequestMapping(value=“”,method = RequestMethod.GET)
    @GetMapping(value =“”)
    @RequestMapping(value=“”,method = RequestMethod.POST) @PostMapping(value =“”)
    @RequestMapping(value=“”,method = RequestMethod.PUT) @PutMapping(value =“”)
    @RequestMapping(value=“”,method = RequestMethod.DELETE) @DeleteMapping(value =“”)

    7.@ResponseBody

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

    3. servcie层注解

    1.@Service

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

    @Service
    public class ArticleServiceImpl implements ArticleService {}
    
    @Controller
    public class ArticleController {
        @Autowired
        ArticleService articleService;}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.@Resource

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

    4. 持久层注解

    1.@Repository

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

    1.@Component

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

    @Component
    public class RedisUtils {
    
        @Autowired
        RedisTemplate redisTemplate;
    
        public Object get(String key) {
            return redisTemplate.opsForValue().get(key);
        }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.@Transactional

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

    	//尽量放在业务层上
    	@Transactional
        @RequestMapping("/test")
        public String test(Upload upload){}
    
    • 1
    • 2
    • 3
    • 4

    5. 资源导入注解

    @ImportResource @Import @PropertySource 这三个注解都是用来导入自定义的一些配置文件。
    @ImportResource(locations={}) 导入其他xml配置文件,需要标准在主配置类上。
    导入property的配置文件 @PropertySource指定文件路径,这个相当于使用spring的标签来完成配置项的引入。
    @import注解是一个可以将普通类导入到spring容器中做管理

    6. 其他相关注解

    1.@ControllerAdvice

    @ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理
    @RestControllerAdvice 是 @ControllerAdvice 和 @ResponseBody的合集,可以将异常以json的格式返回数据。

    @ControllerAdvice
    public class GlobalExceptionHandler {
        @Autowired
        RedisUtils redisUtils;
    
        @ExceptionHandler(value = Exception.class)
        public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
            ModelAndView mav = new ModelAndView();
            mav.addObject("exception", e);
            mav.addObject("url", req.getRequestURL());
    //        mav.addObject("admin", redisUtils.get(Constant.USER));
            mav.setViewName("error");
            return mav;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.@Configuration

    声明当前类为配置类

    配置错误页,代码如下

    @Configuration
    public class ErrorConfig implements ErrorPageRegistrar {
    
        @Override
        public void registerErrorPages(ErrorPageRegistry registry) {
            //404错误页
            ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/error404Page");
            ErrorPage error400Page = new ErrorPage(HttpStatus.BAD_REQUEST, "/error400Page");
            ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/error401Page");
            ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error500Page");
            registry.addErrorPages(error400Page, error401Page, error404Page, error500Page);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    Springboot整合taos时序数据库TDengine
    包含文心一言在内的首批国产大模型 全面开放
    P1996 约瑟夫问题 题解
    leetcode 13. 罗马数字转整数
    Python中if __name__ == ‘__main__‘,__init__和self 的解析
    剑指 Offer II 079+080+081+082
    @TableLogic注解说明,以及对增删改查的影响
    比较方法equals( )、==以及CompareTo
    【前端】js实现队列功能 先进后出 先进先出 等
    LeetCode题解:7. 整数反转,迭代,JavaScript,详细注释
  • 原文地址:https://blog.csdn.net/fwdwqdwq/article/details/126114257