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

Springboot学习笔记(三)-常用注入组件方式

时间:2018-05-19 01:16:21      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:默认   src   ports   root   bean   生效   ada   一个   java   

本文把注入的类型分为普通类和配置文件类两种

普通类

包扫描@ComponentScan+组件标注注解(@Controller@Service@Repository@Component)

包扫描不是必须的,指定包名后以指定的包名为准,比如指定包名为a:@ComponentScan("a"),即使b包中有标注@Controller等注解的bean也不注册。

包扫描注解除了默认的value()还有basePackages()basePackageClasses()等方法:

basePackages(): 指定扫描的包名(前缀)

basePackageClasses():如果指定为A.class,那么会扫描A类所在包的类。

includeFilters():将所指定的类注入容器。
excludeFilters():将所指定的类排除。
技术分享图片

@Bean

可以放在方法和注解上。

一般放在标有@Configuration类中的方法上。如:
技术分享图片

@Import

只能用在类上,最简单直观,将A注入:
技术分享图片

虽然直观,但需要批量注入就有点麻烦,@Import提供了高级功能:
技术分享图片

ImportSelector

ImportSelector是个接口,它只有一个方法:

String[] selectImports(AnnotationMetadata importingClassMetadata);

返回值是需要注入的类型全类名,入参是指和@Import并列的全部注解信息,比如有个实现类:

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        if (importingClassMetadata.hasAnnotation(UsesJava8.class.getName())) {
            return new String[]{A.class.getName()};
        }
        return new String[0];
    }
}

表示只有@UsesJava8@Import同时标注时才注入A,以下情况会生效:

@SpringBootApplication
@Import(MyImportSelector.class)
@UsesJava8
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

ImportBeanDefinitionRegistrar

ImportBeanDefinitionRegistrar也是个接口,它只有一个方法:

    public void registerBeanDefinitions(
            AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);

简单实现如下:

public class MyImportSelector implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        registry.registerBeanDefinition("IThreadPool", new RootBeanDefinition(A.class));
    }
}

调用:

@SpringBootApplication
@Import(MyImportSelector.class)
@UsesJava8
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

配置文件类

待续。。。

Springboot学习笔记(三)-常用注入组件方式

标签:默认   src   ports   root   bean   生效   ada   一个   java   

原文地址:https://www.cnblogs.com/yw0219/p/9058605.html

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