美文网首页
SpringBoot 常用注解

SpringBoot 常用注解

作者: 索伦x | 来源:发表于2019-05-14 16:02 被阅读0次

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

    相关文章

      网友评论

          本文标题:SpringBoot 常用注解

          本文链接:https://www.haomeiwen.com/subject/lorlaqtx.html