springboot-装配讲解

Posted nbtai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot-装配讲解相关的知识,希望对你有一定的参考价值。

主要是两个注解

@EnableWebMvc 

@EnableAutoConfiguration 

这里主要讲解模仿EnableWebMvc 的形式手动装配.

@EnableHelloWorld  装配类=EnableHelloWorld
@EnableHelloWorldSelector  装配类=EnableHelloWorldSelector
@Configuration这个注解是修改默认bean生成器,写在装配类上
*没有默认值将自动生成bean
*组件扫描并且直接提供给AnnotationConfigApplicationContext
*默认形式是xml文件bean定义的格式

结论写上@Configuration 会自动加载

一、手动装配

1、启动类

//@EnableWebMvc   //不会输出任何参数
//@EnableHelloWorld   //手动装配可以输出SayHelloWorld加载成功
//@EnableHelloWorldSelector(model = "toModel")  //手动装配戏选择器 设定model输出toModel 删除注入参数输出默认defaultModel
@SpringBootApplication
public class XuexiApplication {

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

}

 

2、装配类

EnableHelloWorld

/**
 * 配置文件-手动装配
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({HelloWorldConfiguration.class})
public @interface EnableHelloWorld {
}

EnableHelloWorldSelector

/**
 * 选择器-手动装配
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({HelloWorldConfigurationSelector.class})
public @interface EnableHelloWorldSelector {
    String model() default  "defaultModel";
}

3、配置类

HelloWorldConfiguration

public class HelloWorldConfiguration {

    @Bean
    SayHelloWorld sayHelloWorld(){
        //测试是否加载成功
        System.out.println("SayHelloWorld加载成功");
        return new SayHelloWorld();
    }
}

 

HelloWorldConfigurationSelector

public class HelloWorldConfigurationSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        Map<String, Object> map= annotationMetadata.getAnnotationAttributes(EnableHelloWorldSelector.class.getName());
        //输出model值
        System.out.println("拿到model值="+map.get("model"));
        return new String[]{
                HelloWorldConfiguration.class.getName()
        };
    }
}

SayHelloWorld

public class SayHelloWorld {
    public String test(){
        return "test";
    }
}

二、默认装配

使用 @EnableAutoConfiguration 注解

会读取 application.properties 或 application.yml 文件中的配置。

 

参考文件;

@Target:注解的作用目标

@Target(ElementType.TYPE)——接口、类、枚举、注解
@Target(ElementType.FIELD)——字段、枚举的常量
@Target(ElementType.METHOD)——方法
@Target(ElementType.PARAMETER)——方法参数
@Target(ElementType.CONSTRUCTOR) ——构造函数
@Target(ElementType.LOCAL_VARIABLE)——局部变量
@Target(ElementType.ANNOTATION_TYPE)——注解
@Target(ElementType.PACKAGE)——包

 

@Retention:注解的保留位置

RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。

 

其他

@Document:说明该注解将被包含在javadoc中
@Inherited:说明子类可以继承父类中的该注解

 

以上是关于springboot-装配讲解的主要内容,如果未能解决你的问题,请参考以下文章

springboot-装配讲解

springboot-装配讲解

SpringBoot进阶之道-自动装配

SpringBoot项目开发技巧一:自动装配

SpringBoot学习探究Springboot自动装配

SpringBoot自动装配流程源码分析