SpringBoot 注解大全之核心(持续更新)

本文深入解析SpringBoot中关键的注解,如@SpringBootApplication、@Configuration、@EnableAutoConfiguration等,详细介绍了它们的功能和使用场景,帮助开发者更好地理解和运用SpringBoot。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

核心注解(annotations)列表

  • @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文
  • @Configuration 其实相当于传统的spring xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件
  • @EnableAutoConfiguration 允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean
  • @SpringBootConfiguration 这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展
  • @ConfigurationProperties 可使用注解的方式将自定义的properties文件映射到实体bean中,比如config.properties文件或者其它的文件
  • @EnableConfigurationProperties 注解的beans将自动被Environment属性配置
  • @ComponentScan 组件扫描,可自动发现和装配一些Bean
  • @Component 把普通pojo实例化到spring容器中,注解过后可以用于@ComponentScan自动装配
  • @Controller 注解用于定义控制器类,在原先的spring mvc项目中由控制器负责将用户发来的URL请求转发到对应的服务接口
  • @ResponseBody 注解的作用是需要配置@RequestMapping使用,是表示将方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,返回支持字符串,JSON数据、XML数据等格式
  • @RequestMapping 注解作用是把URL映射到控制器类,简单点的理解就是标注出URL请求的路径,同时RequestMapping有的方法有Post、Delete、Put、Get等
  • @RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器
  • @Autowired 自动导入,对类成员变量、方法及构造函数进行标注,完成自动装配
  • @PathVariable 获取参数
  • @JsonBackReference 解决嵌套外链问题
  • @RepositoryRestResourcepublic 配合spring-boot-starter-data-rest使用。
  • @Import 通过导入的方式实现把实例加入springIOC容器中。可以在需要时将没有被Spring容器管理的类导入至Spring容器中
  • @ImportResource 和@Import类似,区别就是@ImportResource导入的是配置文件
  • @AutoConfigureAfter 用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后
  • @AutoConfigureBefore 表示该自动配置类需要在另外指定的自动配置类配置之前

注解(annotations)详解

@SpringBootApplication

程序运行的 main 方法通过调用 run 来委托 Spring Boot 的 SpringApplication 类,SpringApplication 类将引导我们的应用,启动 Spring,然后启动自动配置的 Tomcat web 服务器,免取了tomcat部署的环节。
示例代码

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

@Configuration

注解使用其实就是相当于传统的spring xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件

@ConfigurationProperties(prefix="demo")
public class MyProperties {
    @NotNull
    private String path;

}

@EnableAutoConfiguration

注解使用就允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean
先在项目资源根目录下存放了一个"META-INF/spring.factories"的文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.bitter.api.CustomAutoConfiguration

然后写CustomAutoConfiguration 实例类代码

@Configuration
public class CustomAutoConfiguration {
    @Bean
    public DemoApi apiStudent() {
        DemoApi demoApi = new DemoApi();
        demoApi .setName("auto-config");
        return demoApi;
    }

}

可以在其它类中进行引用

	@Resource
	private DemoApi demoApi;
	
	@GetMapping("/getdemoapi")
	@ResponseBody
	public String autoConfig() {
	    return demoApi.getName();
	}

@ConfigurationProperties

注解使用方式将自定义的properties文件映射到实体bean中,比如config.properties文件或者其它的文件

config.properties的配置文件

	myapp.title=hello world
@ConfigurationProperties(prefix="myapp")
public class Myapp{
	private String title;//自动装配值为hello world
	//get set省
}

@EnableConfigurationProperties

注解用于把beans将自动被Environment属性配置

@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
public class HelloServiceAutoConfiguration {

}

再进行调用

@RestController
public class ConfigurationPropertiesController {

    @Autowired
    private HelloServiceProperties helloServiceProperties;

    @RequestMapping("/getTitle")
    public String getObjectProperties () {
        System.out.println(helloServiceProperties.getTitle());
        return helloServiceProperties.getTitle();
    }
}

@ComponentScan

注解在类上面,通过该注解用于定义组件扫描包路径或者类,为空表示列表扫描,扫描后自动发现和装配Bean,不过也需要在类上面定义@Service或者@Component 才会被扫描到,空注解的类不会被默认装配。
示例代码


@SpringBootApplication
@ComponentScan(basePackageClasses = Person.class) //只扫描Person类
@ComponentScan(value = "com.bitter") //扫描com.bitter下面所有的名
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@Component

把普通pojo实例化到spring容器中,注解过后可以用于@ComponentScan自动装配

@Component
public class Person{
  //
}

@Controller

注解用于定义控制器类,在原先的spring mvc项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),注解过后表示该类需由DispatcherServlet 分发的请求,使用时通常需要配合注解@RequestMapping。
示例代码

@Controller
@RequestMapping("/a") //请求的路径前缀(可选)
public class MyController {
	@RequestMapping("/hello") //请求的路径
	public ModelAndView hello(Map<String,Object> map){
		ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("hello");//返回的页面,可以是.html、.flt、.jsp等后缀
		return modelAndView;
	}
} 

@RestController

注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。请求基本上都是直接返回数据,不会直接到view层
示例代码

@RestController
@RequestMapping("/a") //请求的路径前缀(可选)
public class MyController {
	@RequestMapping("/hello") //请求的路径
	@ResponseBody
	public String hello(Map<String,Object> map){
		return "返回的是具体数据.一般用于ajax请求使用";
	}
} 

@ResponseBody

注解的作用是需要配置@RequestMapping使用,是表示将方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,返回支持字符串,JSON数据、XML数据等格式,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据
示例代码

@RestController
@RequestMapping("/a") //请求的路径前缀(可选)
public class MyController {
	@RequestMapping("/hello") //请求的路径
	@ResponseBody
	public String hello(Map<String,Object> map){
		return "返回的String格式的数据,同时也支持返回json数据对象";
	}
} 

@RequestMapping

注解作用是把URL映射到控制器类,简单点的理解就是标注出URL请求的路径,同时RequestMapping有的方法有Post、Delete、Put、Get等

@RestController
@RequestMapping("/a") //请求的路径前缀(可选)
public class MyController {
	@RequestMapping("/hello",method = RequestMethod.GET) //支持get请求,不支持其它的请求方式,如method不写,请求所有的请求都支持
	@ResponseBody
	public String hello(Map<String,Object> map){
		return "返回的String格式的数据,同时也支持返回json数据对象";
	}
} 

@Autowired

注解的作用是对类自动导入,对类成员变量、方法及构造函数进行标注,完成自动装配

@RestController
@RequestMapping("/a") //请求的路径前缀(可选)
public class MyController {

	@Autowired 
	private PersonService personService ;

	@RequestMapping("/hello",method = RequestMethod.GET) //支持get请求,不支持其它的请求方式,如method不写,请求所有的请求都支持
	@ResponseBody
	public String hello(Map<String,Object> map){
		String name = personService.getName();
		return "返回的String格式的数据,同时也支持返回json数据对象";
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值