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 服务器,系统监控等很多有用的功,让我们快速构建企业及应用程序。
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的优先级。
示例:
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注解,示例:
8、@RequestBody在处理请求方法的参数列表中使用,它可以将请求主体中的参数绑定到一个对象中,请求主体参数是通过HttpMessageConverter传递的,根据请求主体中的参数名与对象的属性名进行匹配并绑定值。此外,还可以通过@Valid注解对请求主体中的参数进行校验。
示例:
9、@PostMapping@PostMapping注解用于处理HTTP POST请求,并将请求映射到具体的处理方法中。@PostMapping与@GetMapping一样,也是一个组合注解,它相当于是@RequestMapping(method=HttpMethod.POST)的快捷方式。
示例:
10、@DeleteMapping@DeleteMapping注解用于处理HTTP DELETE请求,并将请求映射到删除方法中。@DeleteMapping是一个组合注解,它相当于是@RequestMapping(method=HttpMethod.DELETE)的快捷方式。
示例:
11、@ResponseBody@ResponseBody会自动将控制器中方法的返回值写入到HTTP响应中。特别的,@ResponseBody注解只能用在被@Controller注解标记的类中。如果在被@RestController标记的类中,则方法不需要使用@ResponseBody注解进行标注。@RestController相当于是@Controller和@ResponseBody的组合注解。
示例:
12、@ResponseStatus注解可以标注请求处理方法。使用此注解,可以指定响应所需要的HTTP STATUS。特别地,我们可以使用HttpStauts类对该注解的value属性进行赋值。
示例:
13、@RequestParam注解用于将方法的参数与Web请求的传递的参数进行绑定。使用@RequestParam可以轻松的访问HTTP请求参数的值。
示例:
14、@Controller是@Component注解的一个延伸,会自动扫描并配置被该注解标注的类。此注解用于标注Spring MVC的控制器。
示例:
15、@ModelAttribute可以通过模型索引名称来访问已经存在于控制器中的model
示例:
与@PathVariable和@RequestParam注解一样,如果参数名与模型具有相同的名字,则不必指定索引名称,简写示例如下:
如果使用@ModelAttribute对方法进行标注,Spring会将方法的返回值绑定到具体的Model上
示例:
在Spring调用具体的处理方法之前,被@ModelAttribute注解标注的所有方法都将被执行。
16、@Component注解用于标注一个普通的组件类,它没有明确的业务范围,只是通知Spring被此注解的类需要被纳入到Spring Bean容器中并进行管理。
示例:
17、@Repository是@Component注解的延伸,与@Component注解一样,被此注解标注的类会被Spring自动管理起来,@Repository注解用于标注DAO层的数据持久化类。
示例:
18、@DependsOn可以配置Spring IoC容器在初始化一个Bean之前,先初始化其他的Bean对象
示例:
Spring boot 返回 JSON 数据
在做如下操作之前,我们对之前的 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>
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 Boot常用的注解有一定的了解,由于篇幅原因,关于Spring Boot的完整知识点就没有都呈现给大家了,不过小编这里都整理成文档合集了。
Spring Boot 学习笔记获取方式:关注 转发 私信【0803】获取!
喜欢文章记得关注我点赞哟,感谢支持!重要的事情说三遍,转发 转发 转发,一定要记得转发哦!!!