spring boot的自动装配及自定义装配

了解spring boot的自动装配先了解spring framework的手动装配。

spring framework手动装配

spring 模式注解装配

  1. 定义:一种用于生命在应用中扮演“组件”角色的注解。比如:@controller、@service、@Component等
  2. 装配:或者 @ComponentScan;前者是spring2.5中提出的方案, 后者是spring3.1的方案。
Spring @Enable 模块装配

什么是模块装配: Spring Framework 3.1 开始支持”@Enable 模块驱动“。所谓“模块”是指具备相同领域的功能组件集合, 组合所形成一个独立 的单元。比如 Web MVC 模块、AspectJ代理模块、Caching(缓存)模块、JMX(Java 管 理扩展)模块、Async(异步处 理)模块等。比如:@EnableWebMvc 启用WebMVC模块 @EnableTransactionManagement 启用事务管理模块

实现方式
  1. 注解方式
@Retention( RetentionPolicy. RUNTIME)
@Target(ElementType. TYPE)
@Documented
@Import (DelegatingWebMvcConfiguration. class)
public @interface EnableWebMvc {
    ....
}


@Configuration
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
    ....
}
  1. 编程接口的方式

    实现一个自定义注解

/**
 *  激活 HelloWorld 模块
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(HelloWorldImportSelector.class)
public @interface EnableHelloWorld {
}

实现一个配置类

/**
 * HelloWorld 配置
 *
 */
public class HelloWorldConfiguration {

    @Bean
    public String helloWorld() { // 方法名即 Bean 名称
        return "Hello,World 2019";
    }

}

定义个selector,实现import org.springframework.context.annotation.ImportSelector接口

public class HelloWorldImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{HelloWorldConfiguration.class.getName()};
    }
}

然后在可以在spring boot的启动类上加上@EnableHelloWorld,然后在 return "Hello,World 2019"打上断点debug启动就可以看到效果。也可以直接在自动注解的上加这个@Import(HelloWorldConfiguration.class)引入配置类而不是这个selector,同样也可以实现。但是为什么要要一圈呢?主要是因为多一层这个selector可以在select里做一下流程控制。

实现自动装配只需要在resource下新建META-INF文件夹,然后加入

# /是换行符,这里的类名一般都很长为了方便阅读换行标注,多个类用逗号分隔
org.springframework.boot.autoconfigure.EnableAutoConfiguration=/
com.HelloWorldAutoConfiguration,TestConfiguration

你可能感兴趣的:(spring boot的自动装配及自定义装配)