SpringBoot 常用注解
@SpringBootApplication
包含@Configuration、@EnableAutoConfiguration、@ComponentScan
通常用在主类上。
@RestController
用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody
例如: 如果使用@Controller来实现返回数据返回json,那么方法一般要加上:
@RequestMapping("/getDemoById.do")
@ResponseBody
public Map<String, Object> getUser(long id) {
Map<String, Object> map = new HashMap<String, Object>();
do someting....
return map;
}
如果使用@RestController实现返回数据返回json则不用加
@ResponseBody注解
@ComponentScan
组件扫描。相当于<context:component-scan>,如果扫描到@Component @Controller @Service等这些注解的类,则把这些类注册为bean。
@Configuration
指出该类是 Bean 配置的信息源,相当于XML中的<beans></beans>,一般加在主类上。
@Bean
相当于XML中的<bean></bean>,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
@EnableAutoConfiguration
让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上。
@Profiles
Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。
任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机。
使用场景一:
@Configuration
@Profile("dev")
public class MyConfig {
@Bean
public Cat cat(){
return new Cat();
}
}
使用场景二:
// 接口定义
public interface SendMessage {
// 发送短信方法定义
public void send();
}
// Dev 环境实现类
@Component
@Profile("dev")
public class DevSendMessage implements SendMessage {
@Override
public void send() {
System.out.println(">>>>>>>>Dev Send()<<<<<<<<");
}
}
// Prd环境实现类
@Component
@Profile("prd")
public class StgSendMessage implements SendMessage {
@Override
public void send() {
System.out.println(">>>>>>>>Stg Send()<<<<<<<<");
}
}
// 启动类
@SpringBootApplication
public class ProfiledemoApplication {
@Value("${app.name}")
private String name;
@Autowired
private SendMessage sendMessage;
@PostConstruct
public void init(){
sendMessage.send();// 会根据profile指定的环境实例化对应的类
}
}
测试
: 在 application.properties 中添加 spring.profiles.active=dev
@ConfigurationProperties
Spring Boot将尝试校验外部的配置,默认使用JSR-303(如果在classpath路径中)。
你可以轻松的为你的@ConfigurationProperties类添加JSR-303 javax.validation约束注解:
//另外一种写法
//@EnableConfigurationProperties({ConnectionSettings.class})
@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
private String host;
private int port;
...
// ... getters and setters
}
配置文件: application.yml
server:
port: 8080
tomcat:
uri-encoding: utf-8
connection:
host: 192.168.0.1
port: 8080
请注意 @EnableConfigurationProperties
注解。该注解是用来开启对@ConfigurationProperties
注解配置Bean的支持。也就是@EnableConfigurationProperties注解告诉Spring Boot 能支持@ConfigurationProperties。如果不指定会看到如下异常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dxz.property.MailProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
EnableAutoConfiguration注解的工作原理
定义一个Java配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
public class MyConfig {
@Bean
public Cat cat(){
return new Cat();
}
}
启动主类
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context =SpringApplication.run(Application.class,args);
Cat cat = context.getBean(Cat.class);
System.out.println(cat);
}
}
spring.factories
在resource下新建文件夹META-INF,在文件夹下面新建spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=core.bean.MyConfig
总结,@EnableAutoConfiguration 作用
从classpath中搜索所有META-INF/spring.factories配置文件然后,将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器
网友评论