SpringBoot 常用注解

2019-05-14  本文已影响0人  索伦x

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容器

上一篇 下一篇

猜你喜欢

热点阅读