一、@SpringBootApplication详解
对启动一个springboot服务所需注解进行包装,其中必须注解为:
@Configuration+@EnableAutoConfiguration+@ComponentScan
用于对应用的主函数进行注解,使服务器自动扫描加载配置
二、@RequestMapping详解
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性:
- value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等; - consumes,produces;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回; - params,headers;
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
三、@RestController详解
@RestController注解相当于@ResponseBody + @Controller合在一起的作用
一般用于接口或前后端分离:
如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp,html页面,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是return 里的内容。
@RestController
@RequestMapping("/TestController")
public class TestRestController{
// 返回 return 里面的内容
@RequestMapping(value = "index", method = RequestMethod.GET)
public String index(){
// 返回 return 里面的内容 如字符串 json xml 或自定义返回
return "{}";
}
}
一般用于后台页面:
如果需要返回到指定页面,则需要用 @Controller 配合视图解析器 InternalResourceViewResolver 才行。
如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
@Controller
@RequestMapping("/TestController")
public class TestController{
// 映射文件
@RequestMapping(value = "index", method = RequestMethod.GET)
public String index(){
// 他就会映射到 TestController 目录下 index.jsp 或 index.html 文件
return "TestController/index";
}
// 返回 return 里面的内容
@RequestMapping(value = "index", method = RequestMethod.GET)
@ResponseBody
public String index(){
// 返回 return 里面的内容 如字符串 json xml 或自定义返回
return "{}";
}
}
四、@EnableAutoConfiguration详解
这个注释告诉SpringBoot“猜”你将如何想配置Spring,基于你已经添加jar依赖项。如果spring-boot-starter-web已经添加Tomcat和Spring MVC,这个注释自动将假设您正在开发一个web应用程序并添加相应的spring设置。
自动配置被设计用来和“Starters”一起更好的工作,但这两个概念并不直接相关。您可以自由挑选starter依赖项以外的jar包,springboot仍将尽力自动配置您的应用程序。
spring通常建议我们将main方法所在的类放到一个root包下,@EnableAutoConfiguration(开启自动配置)注解通常都放到main所在类的上面,下面是一个典型的结构布局:
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
这样@EnableAutoConfiguration可以从逐层的往下搜索各个加注解的类,例如,你正在编写一个JPA程序(如果你的pom里进行了配置的话),spring会自动去搜索加了@Entity注解的类,并进行调用
五、jackson处理相关自动
指定字段不返回:@JsonIgnore
指定日期格式:@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8")
空字段不返回:@JsonInclude(Include.NON_NUll)
指定别名:@JsonProperty
package net.xdclass.demo.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Date;
public class User {
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
private int age;
@JsonIgnore//把该字段忽略掉,不将它添加到返回给客户端的json中
private String pwd;
public User(int age, String pwd, String phone, Date createTime) {
this.age = age;
this.pwd = pwd;
this.phone = phone;
this.createTime = createTime;
}
@JsonProperty("account")//对phone字段添加别名,以别名形式返回json给客户端
@JsonInclude(JsonInclude.Include.NON_NULL) //若该字段为空值就不会返回给前端
private String phone;
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",locale = "zh",timezone = "GMT+8")//对日期进行格式化
private Date createTime;
}
六、@Bean详解
@Bean 用在方法上,告诉Spring容器,你可以从下面这个方法中拿到一个Bean
Bean是啥:
- 1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化);
- 2、凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性;
- 3、规律:凡是子类及带有方法或属性的类都要加上注册Bean到Spring IoC的注解;
- 4、把Bean理解为类的代理或代言人(实际上确实是通过反射、代理来实现的),这样它就能代表类拥有该拥有的东西了
- 5、我们都在微博上@过某某,对方会优先看到这条信息,并给你反馈,那么在Spring中,你标识一个@符号,那么Spring就会来看看,并且从这里拿到一个Bean或者给出一个Bean
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) throws Exception{
SpringApplication.run(FileController.class,args);
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize("10240KB"); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize("1024000KB");
return factory.createMultipartConfig();
}
}
七、@MapperScan详解
什么是通用Mapper:通用Mapper就是为了解决单表增删改查,基于Mybatis的插件。开发人员不需要编写SQL,不需要在DAO中增加方法,只要写好实体类,就能支持相应的增删改查方法。
@MapperScan作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加。
package net.myclass;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("net.mycalss.mapper")
public class MyApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(MyApplication.class, args);
}
}
添加@MapperScan(“net.mycalss.mapper”)注解以后,com.winter.dao包下面的接口类,在编译之后都会生成相应的实现类
使用@MapperScan注解多个包
@SpringBootApplication
@MapperScan({"com.kfit.demo","com.kfit.user"})
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
八、@Component注解详解
@Component是一个元注解,意思是可以注解其他类注解,如@Controller @Service @Repository @Aspect。官方的原话是:带此注解的类看为组件,当使用基于注解的配置和类路径扫描的时候,这些类就会被实例化。
@component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>)
当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类