码迷,mamicode.com
首页 > 编程语言 > 详细

springboot-装配讲解

时间:2020-06-08 00:14:46      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:sele   常量   span   扫描   测试   app   默认值   bean   over   

主要是两个注解

@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-装配讲解

标签:sele   常量   span   扫描   测试   app   默认值   bean   over   

原文地址:https://www.cnblogs.com/nbtai/p/13063019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!