精华内容
下载资源
问答
  • SpringBoot常用注解

    2020-04-01 09:24:08
    SpringBoot常用注解

    Spring Web MVC 注解

    单注解

    @Controller
    它是@Component注解的一个延伸,Spring会自动扫描并配置被该注解标注的类。此注解用于标注Spring MVC的控制器。

    @RequestBody
    在处理请求方法的参数列表中使用,它可以将请求主体中的参数绑定到一个对象中,请求主体参数是通过HttpMessageConverter传递的,根据请求主体中的参数名与对象的属性名进行匹配并绑定值。

    @ResponseBody
    自动将控制器中方法的返回值写入到HTTP响应中。它只能用在被@Controller注解标记的类中。

    如果在被@RestController标记的类中,则方法不需要使用@ResponseBody注解进行标注。

    @ResponseStatus
    可以标注请求处理方法。使用此注解,可以指定响应所需要的HTTP STATUS。

    可以使用HttpStauts类对该注解的value属性进行赋值。

    @RequestMapping
    将Web请求与请求处理类中的方法进行映射。Spring MVC和Spring WebFlux都通过RquestMappingHandlerMapping和RequestMappingHndlerAdapter两个类来提供对@RequestMapping注解的支持。
    配置属性:
    value:映射的请求URL或者其别名
    method:兼容HTTP的方法名
    params:根据HTTP参数的存在、缺省或值对请求进行过滤
    header:根据HTTP Header的存在、缺省或值对请求进行过滤
    consume:设定在HTTP请求正文中允许使用的媒体类型
    product:在HTTP响应体中允许使用的媒体类型

    使用该注解的时候需要使用@Controller或@RestController进行标记。

    @ControllerAdvice
    它是@Component注解的一个延伸注解,Spring会自动扫描并检测被@ControllerAdvice所标注的类。@ControllerAdvice需要和@ExceptionHandler、@InitBinder以及@ModelAttribute注解搭配使用,主要是用来处理控制器所抛出的异常信息。首先,我们需要定义一个被@ControllerAdvice所标注的类,在该类中,定义一个用于处理具体异常的方法,并使用@ExceptionHandler注解进行标记。

    使用@ControllerAdvice注解,就可以快速的创建统一的,自定义的异常处理类。

    @ExceptionHandler
    用于标注处理特定类型异常类所抛出异常的方法。当控制器中的方法抛出异常时,Spring会自动捕获异常,并将捕获的异常信息传递给被@ExceptionHandler标注的方法。

    @PathVariable
    将方法中的参数绑定到请求URI中的模板变量上。可以通过@RequestMapping注解来指定URI的模板变量,然后使用@PathVariable注解将方法中的参数绑定到模板变量上。它允许我们使用value或name属性来给参数取一个别名。
    模板变量名需要使用“{ }”进行包裹,如果方法的参数名与URI模板变量名一致,则在@PathVariable中就可以省略别名的定义。

        @GetMapping("/delete/{id}")
        public R delete(@PathVariable("id") Long id) {
            pipeService.deleteById(id);
            return R.ok().put("data", "");
        }
    

    如果参数是一个非必须的,可选的项,则可以在@PathVariable中设置require = false。

    @RequestParam
    用于将方法的参数与Web请求的传递的参数进行绑定。使用@RequestParam可以轻松的访问HTTP请求参数的值。

        /**
         * 列表
         */
        @GetMapping("/list")
        public R list(@RequestParam Map<String, Object> params) {
            PageUtils page = pipeService.queryPage(params);
            return R.ok().put("data", page);
        }
    

    @ModelAttribute
    通过模型索引名称来访问已经存在于控制器中的model。如果使用@ModelAttribute对方法进行标注,Spring会将方法的返回值绑定到具体的Model上。在Spring调用具体的处理方法之前,被@ModelAttribute注解标注的所有方法都将被执行。

    @CrossOrigin
    将为请求处理类或请求处理方法提供跨域调用支持。如果将此注解标注类,那么类中的所有方法都将获得支持跨域的能力。使用它可以微调跨域行为。

    @InitBinder
    用于标注初始化WebDataBinider的方法,该方法用于对Http请求传递的表单数据进行处理,如时间格式化、字符串处理等。

    组合注解

    @RestController
    等同于同时加上了@Controller和@ResponseBody。当使用此注解时,不需要再在方法上使用@ResponseBody注解。

    @GetMapping
    用于处理HTTP GET请求,并将请求映射到具体的处理方法中。它相当于是@RequestMapping(method=RequestMethod.GET)的快捷方式。

    @PostMapping
    用于处理HTTP POST请求,并将请求映射到具体的处理方法中。它相当于是@RequestMapping(method=HttpMethod.POST)的快捷方式。

    @PutMapping
    用于处理HTTP PUT请求,并将请求映射到具体的处理方法中。它相当于是@RequestMapping(method=HttpMethod.PUT)的快捷方式。

    @DeleteMapping
    用于处理HTTP DELETE请求,并将请求映射到删除方法中。它相当于是@RequestMapping(method=HttpMethod.DELETE)的快捷方式。

    @PatchMapping
    用于处理HTTP PATCH请求,并将请求映射到对应的处理方法中。它相当于是@RequestMapping(method=HttpMethod.PATCH)的快捷方式。

    Spring Bean 注解

    @ComponentScan
    用于配置Spring需要扫描的被组件注解注释的类所在的包。可以通过配置其basePackages属性或者value属性来配置需要扫描的包路径。value属性是basePackages的别名。

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE})
    @Documented
    @Repeatable(ComponentScans.class)
    public @interface ComponentScan {
    }
    

    @Service
    @Component的一个延伸(特例),它用于标注业务逻辑类。与@Component注解一样,被此注解标注的类,会自动被Spring所管理。

    @Repository
    @Component注解的延伸,与@Component注解一样,被此注解标注的类会被Spring自动管理起来,@Repository注解用于标注DAO层的数据持久化类。

    Spring Dependency Inject注解

    @DependsOn
    可以配置Spring IoC容器在初始化一个Bean之前,先初始化其他的Bean对象。

    @Bean
    告知Spring,被此注解所标注的类将需要纳入到Bean管理工厂中。

    Scops注解

    @Scope
    用来定义@Component标注的类的作用范围以及@Bean所标记的类的作用范围。@Scope所限定的作用范围有:singleton、prototype、request、session、globalSession或者其他的自定义范围。

    @Scope 单例模式
    当@Scope的作用范围设置成Singleton时,被此注解所标注的类只会被Spring IoC容器初始化一次。在默认情况下,Spring IoC容器所初始化的类实例都为singleton。

    容器配置注解

    @Autowired
    用于标记Spring将要解析和注入的依赖项。此注解可以作用在构造函数、字段和setter方法上。

    @Primary
    当系统中需要配置多个具有相同类型的bean时,@Primary可以定义这些Bean的优先级。

    @Qualifier
    当系统中存在同一类型的多个Bean时,@Autowired在进行依赖注入的时候就不知道该选择哪一个实现类进行注入。此时,可以使用@Qualifier注解来微调,帮助@Autowired选择正确的依赖项。

    Spring Boot注解

    @SpringBootApplication
    Sprnig Boot项目的核心注解,目的是开启自动配置。它是一个组合注解,此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。源码如下:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(
        excludeFilters = {@Filter(
        type = FilterType.CUSTOM,
        classes = {TypeExcludeFilter.class}
    ), @Filter(
        type = FilterType.CUSTOM,
        classes = {AutoConfigurationExcludeFilter.class}
    )}
    )
    

    @EnableAutoConfiguration
    用于通知Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项。

    @Conditional
    控制更为复杂的配置条件。在Spring内置的条件控制注解不满足应用需求的时候,可以使用此注解定义自定义的控制条件,以达到自定义的要求。

    @ImportResource
    导入Spring的配置文件,让配置文件里面的内容生效。

    @ConfigurationProperties
    将属性注入到bean中,通过Component注解将bean注解到spring容器中。

    展开全文
  • SpringBoot 常用注解

    2020-10-28 11:52:26
    SpringBoot 常用注解项目配置注解1、@SpringBootApplication 注解2、@ServletComponentScan:3、@MapperScan:4、资源导入注解:@ImportResource @Import @PropertySourcecontroller 层1、@Controller2、@CrossOrigin:...


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

    本文中将spring boot项目中常用的一些核心注解归类总结,并结合实际使用的角度来解释其作用。

    项目配置注解

    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配置文件中的配置项。

    大多数情况下,这3个注解会被同时使用,基于最佳实践,这三个注解就被做了包装,成为了@SpringBootApplication注解。

    2、@ServletComponentScan:

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

    3、@MapperScan:

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

    它和@mapper注解是一样的作用,不同的地方是扫描入口不一样。@mapper需要加在每一个mapper接口类上面。所以大多数情况下,都是在规划好工程目录之后,通过@MapperScan注解配置路径完成mapper接口的注入。

    添加mybatis相应组建依赖之后。就可以使用该注解。

    进一步查看mybatis-spring-boot-starter包,可以找到这里已经将mybatis做了包装。

    这也是spring的一个理念,不重复造轮子,整合优秀的资源进入spring的体系中。

    4、资源导入注解:@ImportResource @Import @PropertySource

    这三个注解都是用来导入自定义的一些配置文件。

    @ImportResource(locations={}) 导入其他xml配置文件,需要标准在主配置类上。

    导入property的配置文件 @PropertySource指定文件路径,这个相当于使用spring的标签来完成配置项的引入。

    @import注解是一个可以将普通类导入到spring容器中做管理

    controller 层

    1、@Controller

    表明这个类是一个控制器类,和@RequestMapping来配合使用拦截请求,如果不在method中注明请求的方式,默认是拦截get和post请求。这样请求会完成后转向一个视图解析器。但是在大多微服务搭建的时候,前后端会做分离。所以请求后端只关注数据处理,后端返回json数据的话,需要配合@ResponseBody注解来完成。

    这样一个只需要返回数据的接口就需要3个注解来完成,大多情况我们都是需要返回数据。也是基于最佳实践,所以将这三个注解进一步整合。

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

    同样的情况,@RequestMapping(value="",method= RequestMethod.GET ),我们都需要明确请求方式。这样的写法又会显得比较繁琐,于是乎就有了如下的几个注解。

    普通风格 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 =“”)

    这几个注解是 @RequestMapping(value="",method= RequestMethod.xxx )的最佳实践。为了代码的更加简洁。

    2、@CrossOrigin:

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

    我们在项目中使用这个注解是为了解决微服在做定时任务调度编排的时候,会访问不同的spider节点而出现跨域问题。

    3、@Autowired:

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

    4、@EnablCaching

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

    5、@PathVariable:

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

    同样可以支持变量名加正则表达式的方式,变量名:[正则表达式]。

    servcie层注解

    1、@Service:

    这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给spring容器。事务的切面也会配置在这一层。当让 这个注解不是一定要用。有个泛指组件的注解,当我们不能确定具体作用的时候 可以用泛指组件的注解托付给spring容器。

    2、@Resource:

    @Resource和@Autowired一样都可以用来装配bean,都可以标注字段上,或者方法上。 @resource注解不是spring提供的,是属于J2EE规范的注解。

    两个之前的区别就是匹配方式上有点不同,@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配。

    持久层注解

    1、@Repository:

    @Repository注解类作为DAO对象,管理操作数据库的对象。

    总得来看,@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理

    @Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。

    通过这些注解的分层管理,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。

    所以我们在正常开发中,如果能用@Service, @Controller, @Repository其中一个标注这个类的定位的时候,就不要用@Component来标注。

    2、@Transactional:

    通过这个注解可以声明事务,可以添加在类上或者方法上。

    在spring boot中 不用再单独配置事务管理,一般情况是我们会在servcie层添加了事务注解,即可开启事务。要注意的是,事务的开启只能在public 方法上。并且主要事务切面的回滚条件。正常我们配置rollbackfor exception时 ,如果在方法里捕获了异常就会导致事务切面配置的失效。

    其他相关注解

    @ControllerAdvice 和 @RestControllerAdvice:通常和@ExceptionHandler、@InitBinder、@ModelAttribute一起配合使用。

    @ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理。

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

    如下面对数据异常返回的统一处理。

    这里是对平时用到的一些注解做了归纳,及应用说明。还有其他更深的知识还需要在后续的用中继续学习。

    参考文档
    https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/

    https://spring.io/projects/spring-boot/

    展开全文
  • Springboot常用注解

    2020-11-18 14:41:47
    springboot 常用注解 1、@SpringBootApplication 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @SpringBootApplication public class SpringbootApplication { public static ...

    springboot 常用注解

    1、@SpringBootApplication

    包含@Configuration、@EnableAutoConfiguration、@ComponentScan

    通常用在主类上。

    @SpringBootApplication
    public class SpringbootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootApplication.class, args);
        }
    }
    

    2、@Repository@Service@Controller@Component

    这四个注解全部作用于

    @Repository@Service@Controller 这三个注解在功能上和**@Component相同,全部可由@Component替代,但通常@Repository用于标注数据访问组件,即DAO组件。
    @Service 用于标注业务层组件。
    @Controller** 用于控制层,用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。通俗来说,被Controller标记的类就是一个控制器,这个类中的方法,就是相应的动作。

    3、@RestController

    用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody

    4、@ResponseBody

    表示该方法的返回结果直接写入HTTP response body中

    一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析

    为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

    5、@ComponentScan

    组件扫描。相当于,如果扫描到有@Component @Controller @Service等这些注解的类,则把

    这些类注册为bean。

    6、@Configuration

    指出该类是 Bean 配置的信息源,相当于XML中的,一般加在主类上。
    标注在类上,相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(应用上下文)

    7、@Bean

    相当于XML中的<bean>标签,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

    8、@EnableAutoConfiguration

    让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上。

    9、@AutoWired

    byType(根据类型进行装配,默认)方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
    当加上(required=false)时,就算找不到bean也不报错。

    10、@Qualifier

    当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用

    11、@Resource(name=“name”,type=“type”)

    没有括号内内容的话,默认byName。与@Autowired干类似的事。

    12、@RequestMapping

    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
    比如下图,就将请求映射到了http://localhost:8080/school/listStudent 上,
    在这里插入图片描述
    在这里插入图片描述

    该注解有六个属性:

    params:指定request中必须包含某些参数值是,才让该方法处理。

    headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。

    value:指定请求的实际地址,指定的地址可以是URI Template 模式

    method:指定请求的method类型, GET、POST、PUT、DELETE等

    consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;

    produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

    展开全文
  • springboot 常用注解

    2020-08-26 20:42:21
    springboot 常用注解 在spring boot中,摒弃了spring以往项目中大量繁琐的配置,通过自身默认配置,极大的降低了项目搭建的复杂度。在spring boot中,大量注解的使用,使得代码看起来更加简洁,提高开发的效率。这些...

    springboot 常用注解

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

    1、@SpringBootApplication

    @SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan这三个注解

    ① @SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。

    ② @ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。

    ③ @EnableAutoConfiguration:是自动配置的注解。

    2、@MapperScan

    使用@MapperScan可以指定要扫描的Mapper类的包的路径,比如:

    @SpringBootApplication
    @MapperScan(“com.qf.mapper”)
    // 添加对mapper包扫描
    public class Application {

    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }

    }

    3、@ServletComponentScan

    Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置。(Spring Boot 应用中这三个注解默认是不被扫描的,需要在项目启动类上添加 @ServletComponentScan 注解, 表示对 Servlet 组件扫描。)

    4、将类注入到spring容器中

    注解 说明
    @Repository 持久层(dao)注入spring容器
    @Service 业务逻辑层(server)注入spring容器
    @Controller 控制层(controller)注入spring容器
    @Component 普通pojo注入spring容器,其他三个注解是这个注解的拓展,并且具有了特定的功能

    5、@ResponseBody

    可以作用在方法上或类上,返回json数据的话,需要配合@ResponseBody注解来完成,表示该方法的返回结果直接写入 HTTP response body 中,而不会被解析为跳转路径,即不会经过视图解析器,返回什么数据即在页面输入什么数据。(@RestController 是@Controller 和@ResponseBody的结合)

    6、@RequestMapping、@GetMapping、@PostMapping

    这3个注解功能也是类似的,通过这3个注解来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,用在方法上,可以通过配置的url进行访问

    注解 说明
    @RequestMapping @RequestMapping(url),通过该注解就可以通过配置的url进行访问,方式可以是get或post请求,两种方式均可
    @GetMapping @GetMapping(url) ,功能类似的,只是这个限定了只能是Get请求
    @PostMapping @PostMapping(url),功能类似的,只是这个限定了只能是Post请求

    7、@AutoWired、@Qualifier、@Resource

    这3个注解都是基于注解方式进行自动装配,在容器里面将查找到的bean返回,一般@AutoWired用得最多,@Qualifier则需要配合@AutoWired使用,@Resource则是可以通过名字进行自动装配

    注解 说明
    @AutoWired @Autowired默认按类型装配,如果发现找到多个bean,则按照name方式比对,如果还有多个,则报出异常
    @Qualifier spring的注解,按名字注入 一般当出现两个及以上bean时,不知道要注入哪个,结合@AutoWired使用
    @Resource 1. 如果同时指定了name和type,例如@Resource(name = “xxx” type=“xxx”)则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
      2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
      3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
      4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配

    8、@Value、@ConfigurationProperties、@PropertySource

    注解 说明
    @Value 用于获取bean的属性,一般用于读取配置文件的数据,作用在变量上
    @ConfigurationProperties 用于注入Bean属性,然后再通过当前Bean获取注入值,作用在类上
    @PropertySource 用于指定要读取的配置文件,可以和@Value或@ConfigurationProperties配合使用(不只是yml文件读取)

    9、@RequestParam、@RequestBody、@PathVariable、@RequestHeader、@CookieValue

    这3个注解放在一起主要是经常在控制层用来接收参数的。

    在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,但是@RequestBody最多只能有一个,而@RequestParam()可以有多个。

    注解 说明
    @RequestParam 获取查询参数。即url?name=这种形式
    @PathVariable 获取路径参数。即url/{id}这种形式。
    @RequestBody 获取Body的参数,一般用于post获取参数
    @RequestHeader 获取请求头的信息
    @CookieValue 获取Cookie的信息

    10、@Transactional: 通过这个注解可以声明事务,可以添加在类上或者方法上。

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

    11、@Bean:放在方法的上面,意思是产生一个bean,并交给spring管理

    springboot自动配置

    我们一般使用SpringApplication.run()来启动整个应用。这个入口类要使用@SpringBootApplication注解声明,它是SpringBoot的核心注解。我们已经知道他是复合注解,这个注解里面,最主要的就是@EnableAutoConfiguration,顾名思义,一看就知道它要开启自动配置,点进去看@EnableAutoConfiguration的源码

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import(EnableAutoConfigurationImportSelector.class)
    public @interface EnableAutoConfiguration {
        .....
    }
    

    可以看到,在@EnableAutoConfiguration注解内使用到了@import注解来完成导入配置的功能,而EnableAutoConfigurationImportSelector内部则是使用了SpringFactoriesLoader.loadFactoryNames方法进行扫描具有META-INF/spring.factories文件的jar包。下面是1.5.8.RELEASE实现源码:

     @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        if (!isEnabled(annotationMetadata)) {
            return NO_IMPORTS;
        }
        try {
              AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
                        .loadMetadata(this.beanClassLoader);
              AnnotationAttributes attributes = getAttributes(annotationMetadata);
              
              //扫描具有META-INF/spring.factories文件的jar包
              
              List<String> configurations = getCandidateConfigurations(annotationMetadata,
                        attributes);
              //去重
              
              configurations = removeDuplicates(configurations);
              //排序
              
              configurations = sort(configurations, autoConfigurationMetadata);
               //删除需要排除的类
               
             Set<String> exclusions = getExclusions(annotationMetadata, attributes);
             checkExcludedClasses(configurations, exclusions);
             configurations.removeAll(exclusions);
             configurations = filter(configurations, autoConfigurationMetadata);
             fireAutoConfigurationImportEvents(configurations, exclusions);
             return configurations.toArray(new String[configurations.size()]);
        }
        catch (IOException ex) {
            throw new IllegalStateException(ex);
        }
    }
    
    
    
    //加载spring.factories实现
    protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,
            AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
                getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
        Assert.notEmpty(configurations,
                "No auto configuration classes found in META-INF/spring.factories. If you "
                          + "are using a custom packaging, make sure that file is correct.");
        return configurations;
    }
    

    扫描具有META-INF/spring.factories文件的jar包,然后把扫描到的这些文件包装成Properties对象,

    从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中。

    以上整个过程就是将类路径下"META-INF/spring.factories"里面配置的所有EnableAutoConfiguration的值加入到容器中。

    spring.factories文件是Key=Value形式,多个Value时使用,隔开,该文件中定义了关于初始化,监听器等信息,而真正使自动配置生效的key是org.springframework.boot.autoconfigure.EnableAutoConfiguration,如下所示:

    # Auto Configure
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
    org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
    //省略......
    

    上面的EnableAutoConfiguration配置了多个类,这些都是Spring Boot中的自动配置相关类;在启动过程中会解析对应类配置信息。每个Configuation类都定义了相关bean的实例化配置。都说明了哪些bean可以被自动配置,什么条件下可以自动配置,并把这些bean实例化出来。如果我们自定义了一个starter的话,也要在该starter的jar包中提供 spring.factories文件,并且为其配置org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的配置类。每一个这样XXAutoConfiguration类都是容器中的一个组件都加入到容器中,用他们来实现自动配置。

    springboot其理念是约定优于配置,尽可能地进行自动配置,减少了用户需要动手写的各种冗余配置项,Spring Boot提倡无XML配置文件的理念,使用Spring Boot生成的应用完全不会生成任何配置代码与XML配置文件

    SpringBoot的自动配置原理,跟餐厅的机制很类似,如果将SpringBoot比喻成餐厅,把吃饭比做我们的应用,我们来到餐厅吃饭的时候(相当于在应用中加入了@SpringBootApplication),服务员会引导我们开始在菜单点餐纸上点餐(菜单点餐纸是预先定义好的,就相当于spring.factories文件,预先定义了我们可以使用的自动配置信息),餐厅既可以自行搭配烤鱼口味,也可以直接点店家为我们搭配好的口味(springboot也是如此,比如消息中间件,就有好多种口味可以选,比如rabbitmq,kafka,根据业务场景而定),我们在喜欢的菜上进行勾选(相当于在pom文件中引入所需框架的starter),然后确定下单(启动springboot应用)。比如自己想吃花菜,可惜餐厅没有这道辅菜,但是我们可以自己准备然后带过去啊,烤鱼上了就加进去煮(**这就是加入自定义的自动配置了)。

    展开全文
  • springboot常用注解

    2020-03-27 13:31:04
    springboot常用注解 @SpringBootApplication 申明让spring boot自动给程序进行必要的配置,这个配置等同于: @Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。 @Configuration 相当于传统的...
  • Springboot 常用注解

    2019-11-15 14:57:35
    Springboot 常用注解 @SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Repository: 用于标注数据访问组件,即DAO组件。 @Service: 用于标注业务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,551
精华内容 1,420
关键字:

springboot常用注解

spring 订阅