springboot常用注解

本文深入解析SpringBoot中关键注解的使用方法与功能,包括@EnableAutoConfiguration、@ComponentScan、@RestController、@ConfigurationProperties等,阐述了它们在项目中的作用及如何正确应用。
@EnableAutoConfiguration(exclude={SolrAutoConfiguration.class,MongoAutoConfiguration.class})

@EnableAutoConfiguration注解是开启自动配置,在springboot中,spring-boot-autoconfigure-1.5.6.RELEASE.jar是默认配置的jar,这个jar包中,拥有很多的配置对象。在springboot的启动类前加上该注解springboot就会自动配置所需的对象。如果不要希望springboot自动配置某些有对象时,可以使用"exclude"属性来排除掉不希望自动配置的对象。

@ComponentScan("com.yunxiang.controller")

@ComponentScan
@ComponentScan注解表示指定springboot启动类在启动时,要进行扫描的包,如果没有指明要扫描的包时,springboot的启动类,在启动时,默认扫描当前包及当前包的所有子包;如果指明要扫描的包时,springboot的启动类,在启动时,只扫描指定包及指定包的子包。

@EnableAsync

@EnableAsync注解表示springboot启动类开启异步调用。

注:以上四个注解只能使用在springboot的启动类上。

springboot的启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
//@EnableAutoConfiguration
//@ComponentScan("com.yunxiang.controller")
@SpringBootApplication(scanBasePackages={"com.yunxiang"})
public class SpringApplications {

	//springboot的入口
	public static void main(String[] args) {
		/*
		 * 第一个参数,springboot入口所在类的字节码(即当前类的字节码)
		 * 第二个参数,就是字符串数组的参数名
		 */
		SpringApplication.run(SpringApplications.class, args);
	}
}
@SpringBootApplication(scanBasePackages={"com.yunxiang"},exclude={SolrAutoConfiguration.class,MongoAutoConfiguration.class})

@SpringBootApplication注解是@EnableAutoConfiguration和@ComponentScan的组合键,他拥有@EnableAutoConfiguration和@ComponentScan的所有功能。

@RestController

@RestController注解只能修改类(Controller层中的类),表示该类的所有结果都是Restful内容(即将所有的结果一json格式返回),即该注解的作用相当于在每个方法上都添加了@ResponseBody。

@ConfigurationProperties(prefix="book")
@Controller
public class IndexController {
	
	private String author;
	private String name;
	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

application.properties

book.author=zhangsan
book.name=spring

@ConfigurationProperties注解可以有@Value的功能,只是@Value注解需要写在每个注入常量的上面,@ConfigurationProperties注解值需要写在类的什么,并且需要给他指明一个前置,并且每个注入对象都要有get和set方法。

@MapperScan("com.yunxiang.mapper")

@MapperScan注解用于扫描接口类对象(“mapper.java”)。

@Configuration

@Configuration注解可理解为用spring的时候xml里面的<beans>标签,可以达到在Spring中使用xml配置文件的作用。

@bean

@Bean可理解为用spring的时候xml里面的<bean>标签,使用该注解常用在类对象上,表示该类对象创建成功后,将类对象放入spring容器中。

@ControllerAdvice

@ControllerAdvice注解是Controller层的行为通知,当使用@ExceptionHandler、@InitBinder、@ModelAttribute注解时,必须在类前面使用@ControllerAdvice注解。

@ExceptionHandler(Exception.class)

@ExceptionHandler用于声明进行全局异常处理的方法。

	@Async
	@Override
	public Future<String> doTest3() throws Exception {
		System.out.println("任务三开始执行");
		long startTime = System.currentTimeMillis();
		Thread.sleep(random.nextInt(10000));
		long endTime = System.currentTimeMillis();
		System.out.println("任务三结束,耗时:"+(endTime - startTime)+"毫秒");
		return new AsyncResult<String>("任务三结束");
	}

@Async注解常用在方法上,表示在执行该方法时使用多线程,即在开启一个新的线程来执行该方法。

@EnableScheduling

@EnableScheduling注解只能修饰在springboot的启动类,表示启动任务调度。

@Scheduled

@Scheduled注解表示用来配置到方法上来完成对应的定时任务的配置,如执行时间,间隔时间,延迟时间等等。详解见"https://www.jianshu.com/p/88125f1cf91c"

@Insert("insert into user(name, sex,address,brithday) values(#{user.name},#{user.sex},#{user.address},#{user.brithday})")
	void addUser(@Param("user")User user);

@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中

@Primary

@Primary注解在当一个接口有2个不同实现时,使用该注解修修饰的那个接口实现类可以默认优先选择

@Configuration

@Configuration注解常用于修饰类对象。表示该类对象相当于是一个".xml"配置文件。

@EnableJpaRepositories("com.yunxiang.dao")

在springboot整合JPA-Hibernate中,使用"@EnableJpaRepositories(“com.yunxiang.dao”)"注解来扫描dao层对象,因为"JPA-Hibernate"的dao层对象继承了"JpaRepository"类,在dao层对象中并没有定义方法,所有操作数据库的方法都是"JpaRepository"的方法。

@EntityScan("com.yunxiang.pojo")

在springboot整合JPA-Hibernate中,"@EntityScan(“com.yunxiang.pojo”)"注解用来扫描pojo层的pojo对象,因为"JPA-Hibernate"中可以根据pojo对象直接在数据库中创建对应的数据表。
JPA-Hibernate的pojo对象实例

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity(name="user")
@Table(name="user")
public class User {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;

	@Column(name="username")
    private String name;

    private Date brithday;

    private String sex;

    private String address;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getBrithday() {
		return brithday;
	}

	public void setBrithday(Date brithday) {
		this.brithday = brithday;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
    
}
@Entity(name="user")
//可以不写此参数
@Table(name="user")

@Entity(name=“user”)注解表示pojo类对象与数据库中的数据表的映射关系,“name"属性的值,就是数据库中的表名,如果不写此参数,表示该类映射到数据库中以类名为名的数据表,如果没有该数据表,数据库会自动创建;”@Table(name=“user”)" 当实体类与其映射的数据库表名不同名时,需要使用。此外,当实体类与其映射的数据库表名不同名时,可以使用"@Entity"注解的"name"属性类指明映射关系,此时,就不需要"@Table"注解。

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

“@Id"注解表示他修饰的属性为数据表中的主键,”@GeneratedValue"注解表示主键的生成策略,他有一下几个属性:
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。

@Column(name="username")

@Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,他有一下属性:
name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入;
unique:是否唯一;
nullable:是否允许为空;
length:对于字符型列,length属性指定列的最大字符长度;
insertable:是否允许插入;
updatetable:是否允许更新;
columnDefinition:定义建表时创建此列的DDL;
secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。
@JsonFormat注解可以用来接受Date类型数据
pattern:日期的转换形式;
timezone:时区

public class Student {
    private Integer id;

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date  birthTime;

    private String name;

    private String ages;

   public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Date getBirthTime() {
		return birthTime;
	}

	public void setBirthTime(Date birthTime) {
		this.birthTime = birthTime;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAges() {
		return ages;
	}

	public void setAges(String ages) {
		this.ages = ages;
	}

}

@ConditionalOnMissingBean

该注解在初始化@Bean时,会先查看spring仓库中是否存在该类型的对象,如果存在,则不初始化该对象,如果不存在,就初始化该对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值