文章目录

  • 前言
  • 一、常用注解
    • 1. 项目配置注解
      • 1.@SpringBootApplication
      • 2.@ServletComponentScan
      • 3.@MapperScan
    • 2.@controller
      • 1.@Autowired
      • 2.@CrossOrigin
      • 3.@PathVariable
      • 4.@EnablCaching
      • 5.@RestController
      • 6.@RequestMapping
      • 7.@ResponseBody
    • 3. servcie层注解
      • 1.@Service
      • 1.@Resource
    • 4. 持久层注解
      • 1.@Repository
      • 1.@Component
      • 1.@Transactional
    • 5. 资源导入注解
    • 6. 其他相关注解
      • 1.@ControllerAdvice
      • 2.@Configuration


前言

在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.@Autowired

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

@Service
public class ArticleServiceImpl implements ArticleService {}

@Controller
public class ArticleController {
    @Autowired
    ArticleService articleService;}

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";
    }

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 )

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.@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<String, String> redisTemplate;

    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }
    }

1.@Transactional

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

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

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;
    }

}

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);
    }
}

更多推荐

springboot 常用注解