快捷搜索:  汽车  科技

spring boot好用注解(太厉害了终于有人把Spring)

spring boot好用注解(太厉害了终于有人把Spring)@Configuration @ConditionalOnClass(DataSource.class) class MySQLAutoConfiguration { //... }4、@SpringBootApplication注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个Bean,并自动触发自动配置Bean和自动扫描组件。此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。示例:@Conditioanl(CustomConditioanl.class) CustomProperties addCustomProperties(){ //... }/2、2、@ConditionalOnResource用于检测当某个配置文件存在使,则触发被其标注的方法,下面是使用此注解的代码示例:@Condit

前言

spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

Spring Boot 被认为是 Spring MVC 的“接班人”,它可以帮我们自动配置,如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用自己的配置。另外,Spring Boot 还集成了嵌入式的 Web 服务器,系统监控等很多有用的功,让我们快速构建企业及应用程序。

spring boot好用注解(太厉害了终于有人把Spring)(1)

1、@Conditional

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

示例:

@Conditioanl(CustomConditioanl.class) CustomProperties addCustomProperties(){ //... }/2、2、@ConditionalOnResource

用于检测当某个配置文件存在使,则触发被其标注的方法,下面是使用此注解的代码

示例:

@ConditionalOnResource(resources = "classpath:website.properties") Properties addWebsiteProperties(){ //... }3、@ConditionalOnClass与@ConditionalOnMissingClass

这两个注解属于类条件注解,它们根据是否存在某个类作为判断依据来决定是否要执行某些配置。

示例:

@Configuration @ConditionalOnClass(DataSource.class) class MySQLAutoConfiguration { //... }4、@SpringBootApplication

注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个Bean,并自动触发自动配置Bean和自动扫描组件。此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。

在Spring Boot应用程序的主类中,就使用了此注解。

示例:

@SpringBootApplication public class Application{ public static void main(String [] args){ SpringApplication.run(Application.class args); } }5、@Autowired

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

示例:

@RestController public class userController { private UserService userService; @Autowired UserController(userService userService){ this.userService = userservice; } }6、@Primary

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

示例:

spring boot好用注解(太厉害了终于有人把Spring)(2)

7、Scops注解

@Scope注解可以用来定义@Component标注的类的作用范围以及@Bean所标记的类的作用范围。@Scope所限定的作用范围有:singleton、prototype、Request、session、globalSession或者其他的自定义范围。这里以prototype为例子进行讲解。

当一个Spring Bean被声明为prototype(原型模式)时,在每次需要使用到该类的时候,Spring IoC容器都会初始化一个新的改类的实例。在定义一个Bean时,可以设置Bean的scope属性为

prototype:scope=“prototype”

也可以使用@Scope注解设置

@Scope(value=ConfigurableBeanFactory.SCOPE_PROPTOTYPE)

两种不同的方式来使用@Scope注解,示例:

spring boot好用注解(太厉害了终于有人把Spring)(3)

8、@RequestBody

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

示例:

spring boot好用注解(太厉害了终于有人把Spring)(4)

9、@PostMapping

@PostMapping注解用于处理HTTP POST请求,并将请求映射到具体的处理方法中。@PostMapping与@GetMapping一样,也是一个组合注解,它相当于是@RequestMapping(method=HttpMethod.POST)的快捷方式。

示例:

spring boot好用注解(太厉害了终于有人把Spring)(5)

10、@DeleteMapping

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

示例:

spring boot好用注解(太厉害了终于有人把Spring)(6)

11、@ResponseBody

@ResponseBody会自动将控制器中方法的返回值写入到HTTP响应中。特别的,@ResponseBody注解只能用在被@Controller注解标记的类中。如果在被@RestController标记的类中,则方法不需要使用@ResponseBody注解进行标注。@RestController相当于是@Controller和@ResponseBody的组合注解。

示例:

spring boot好用注解(太厉害了终于有人把Spring)(7)

12、@ResponseStatus

注解可以标注请求处理方法。使用此注解,可以指定响应所需要的HTTP STATUS。特别地,我们可以使用HttpStauts类对该注解的value属性进行赋值。

示例:

spring boot好用注解(太厉害了终于有人把Spring)(8)

13、@RequestParam

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

示例:

spring boot好用注解(太厉害了终于有人把Spring)(9)

14、@Controller

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

示例:

spring boot好用注解(太厉害了终于有人把Spring)(10)

15、@ModelAttribute

可以通过模型索引名称来访问已经存在于控制器中的model

示例:

spring boot好用注解(太厉害了终于有人把Spring)(11)

与@PathVariable和@RequestParam注解一样,如果参数名与模型具有相同的名字,则不必指定索引名称,简写示例如下:

spring boot好用注解(太厉害了终于有人把Spring)(12)

如果使用@ModelAttribute对方法进行标注,Spring会将方法的返回值绑定到具体的Model上

示例:

spring boot好用注解(太厉害了终于有人把Spring)(13)

在Spring调用具体的处理方法之前,被@ModelAttribute注解标注的所有方法都将被执行。

16、@Component

注解用于标注一个普通的组件类,它没有明确的业务范围,只是通知Spring被此注解的类需要被纳入到Spring Bean容器中并进行管理。

示例:

spring boot好用注解(太厉害了终于有人把Spring)(14)

17、@Repository

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

示例:

spring boot好用注解(太厉害了终于有人把Spring)(15)

18、@DependsOn

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

示例:

spring boot好用注解(太厉害了终于有人把Spring)(16)


Spring boot 返回 JSON 数据

spring boot好用注解(太厉害了终于有人把Spring)(17)

在做如下操作之前,我们对之前的 Hello 进行简单的修改,我们新建一个包 com.hpit.test.web 然后新建一个类 HelloControoler 然后修改 App.java 类,主要是的这个类就是一个单纯的启动类。

主要代码如下:

iackage com.hpit; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * Hello world! */ //其中@SpringBootApplication 申明让 spring boot 自动给程序进行必要的配置,等价于以默认属性使用 //@Configuration,@EnableAutoConfiguration 和@ComponentScan //@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class args); } } com.hpit.test.web.HelloController : package com.hpit.test.web; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController// 标记为:restful public class HelloController { @RequestMapping("/") public String hello(){ return"Hello world!"; } }

我们在编写接口的时候,时常会有需求返回 json 数据,那么在 spring boot 应该怎么操作呢?主要是在 class 中

加入注解@RestController 。

返回 JSON 之步骤:

(1)编写一个实体类 Demo

(2)编写 DemoController;

(3)在 DemoController 加上@RestController 和@RequestMapping 注解;

(4)测试

具体代码如下:

com.hpit.test.bean.Demo : package com.hpit.test.bean; /** * 测试实体类. * @author Administrator * */ public class Demo { private longid;//主键. private String name;//测试名称. public long getId() { returnid; } public void setId(longid) { this.id = id; } public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } } com.hpit.test.web.DemoController: package com.hpit.test.web; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.hpit.test.bean.Demo; /** * 测试. * @author Administrator * */ @RestController @RequestMapping("/demo") public class DemoController { /** * 返回 demo 数据: * 请求地址:http://127.0.0.1:8080/demo/getDemo * @return */ @RequestMapping("/getDemo") public Demo getDemo(){ Demo demo = new Demo(); demo.setId(1); demo.setName("Zjs"); return demo; } }

那么在浏览器访问地址:http://127.0.0.1:8080/demo/getDemo 返回如下数据:

{

id: 1

name: "Zjs"

}

是不是很神奇呢,其实 Spring Boot 也是引用了 JSON 解析包 Jackson,那么自然我们就可以在 Demo 对象上使用 Jackson 提供的 json 属性的注解,对时间进行格式化,对一些字段进行忽略等等。

Spring boot 导入 spring XML 配置文件

在 App.java 类编写 HelloService2;

首先我们这里有几个包:com.hpit org.hpit 我们这里打算把 App.java 启动类放到 com.hpit 中,根据 SpringBoot 扫描(根包到子包的原则),我们把 HelloService2 写在 Spring Boot 可以扫描的位置,HelloService 写在Spring Boot 无法扫描到的位置,那么我们使用配置文件 bean 的方式进行引入,具体代码如下:

1.创建一个 App 默认无法扫描到的 bean

package org.hpit.demo.service; import org.apache.log4j.Logger; import org.springframework.stereotype.Service; /** * TODO 当前类无法被App扫描到将被配置在applicationContext.xml中 * @author 郑江山 * */ @Service("helloService") public class HelloService { private Logger logger = Logger.getLogger(getClass()); public void hello() { logger.info("这个bean是springboot默认情况下无法扫描到的"); } }

2.在 resource 下创建 spring 传统配置文件 applicationContext.xml(名字任意)

src/main/resource/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 在传统spring配置文件中托管springboot默认无法扫描到的bean --> <bean id="helloService" class="org.hpit.demo.service.HelloService"></bean> </beans>

spring boot好用注解(太厉害了终于有人把Spring)(18)

3.创建一个系统启动任务类,用于测试 App 无法扫描到的 Bean 是否能自动装配

com.hpit.springboot03.runner.TestXMLBeanRunner

package com.hpit.springboot03.runner; import javax.annotation.Resource; import org.hpit.demo.service.HelloService; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; /** * TODO 测试App无法扫到的Bean是否能引入 ** @author 郑江山 * */ @Component @Order(value = 1) public class TestXMLBeanRunner implements CommandLineRunner { @Resource private HelloService helloService; @Override public void run(String... arg0) throws Exception { helloService.hello(); } }

4.在 App.java 中配置引入配置文件的注解 @ImportResource

package com.hpit.springboot03; import javax.servlet.MultipartConfigElement; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.Servlet.MultipartConfigFactory; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ImportResource; @SpringBootApplication @ServletComponentScan // 开始servlet扫描 @ComponentScan(basePackages = { "com.hpit" }) @ImportResource(locations = { "applicationContext.xml" }) // 导入spring配置文件 public class App { public static void main(String[] args) throws Exception { SpringApplication.run(App.class args); } // 配置文件上传 @Bean public MultipartConfigElement multipartConfigFactory() { MultipartConfigFactory configFactory = new MultipartConfigFactory(); configFactory.setMaxFileSize("128MB");// KB MB 设置单个上传文件大小 configFactory.setMaxRequestSize("1024MB"); configFactory.setLocation("/");// 设置文件上传路径 return configFactory.createMultipartConfig(); } }

5.启动应用,观察日志输出,发现系统可以引入 App 无法扫描到的 bean

spring boot好用注解(太厉害了终于有人把Spring)(19)

总结

小编这次分享了一些Spring Boot中常见的一些注解的使用方式,以及一些核心知识点,让大家能够对Spring Boot常用的注解有一定的了解,由于篇幅原因,关于Spring Boot的完整知识点就没有都呈现给大家了,不过小编这里都整理成文档合集了。

Spring Boot 学习笔记获取方式:关注 转发 私信【0803】获取!

spring boot好用注解(太厉害了终于有人把Spring)(20)

喜欢文章记得关注我点赞哟,感谢支持!重要的事情说三遍,转发 转发 转发,一定要记得转发哦!!!

猜您喜欢: