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-装配讲解的主要内容,如果未能解决你的问题,请参考以下文章