1、定义注解
package com.imooc.diveinspringbootzhujie.anotation;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(HelloWorldImportSelector.class)
public @interface EnableHelloWorld {
}
2、selector
package com.imooc.diveinspringbootzhujie.anotation;
import com.imooc.diveinspringbootzhujie.configuration.HelloWorldConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class HelloWorldImportSelector implements ImportSelector{
/**
* Select and return the names of which class(es) should be imported based on
* the {@link AnnotationMetadata} of the importing @{@link Configuration} class.
*/
public String[] selectImports(AnnotationMetadata importingClassMetadata){
return new String[] {HelloWorldConfiguration.class.getName()};
}
}
3、configuration
package com.imooc.diveinspringbootzhujie.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HelloWorldConfiguration {
@Bean
public String helloWorld(){
return "Hello world 2018";
}
}
4、引导类
package com.imooc.diveinspringbootzhujie.bootstrap;
import com.imooc.diveinspringbootzhujie.anotation.EnableHelloWorld;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
@EnableHelloWorld
public class EnableHelloWorldBootstrap {
public static void main(String[] args) {
ConfigurableApplicationContext context = new SpringApplicationBuilder(EnableHelloWorldBootstrap.class)
.web(WebApplicationType.NONE)
.run(args);
String helloWorld = context.getBean("helloWorld", String.class);
System.out.println("hello world bean : " + helloWorld);
}
}
5、运行结果
2019-01-07 22:01:27.833 INFO 37908 --- [ main] c.i.d.b.EnableHelloWorldBootstrap : Starting EnableHelloWorldBootstrap on USER-20190103IR with PID 37908 (started by Administrator in D:\360安全浏览器下载\dive-in-spring-boot-zhujie)
2019-01-07 22:01:27.847 INFO 37908 --- [ main] c.i.d.b.EnableHelloWorldBootstrap : No active profile set, falling back to default profiles: default
2019-01-07 22:01:28.471 INFO 37908 --- [ main] c.i.d.b.EnableHelloWorldBootstrap : Started EnableHelloWorldBootstrap in 1.31 seconds (JVM running for 2.288)
hello world bean : Hello world 2018