springBoot @Configuration @Lazy

@ComponentScan 使用

ComponentScan 就是基本的扫描spring的注解包
注意点:如果要用到springboot的Filters属性,那么需要把useDefaultFilters设置成false,否则filter失效
@ComponentScan(value=”com.melon.web”,
includeFilters={@Filters(type=FilterType.ANNOTATION,classes={Controller.class}},
useDefaultFilters=false)

如果useDefaultFilters不设置false,那么includeFilters就不生效,走的是默认的配置,
所以一般情况下你要用到Filter就要设置useDefaultFilters=false
FilterType默认按注解过滤

  1. 指定注解类型比如@Controller

    @Filters(type=FilterType.ANNOTATION,classes={Controller.class}

  2. 过滤指明具体类

    @Filters(type=FilterType.ASSIGNABLE_TYPE,classes={MyController.class}

  3. 自定义类型

    @Filters(type=FilterType.CUSTOM,classes={MyFilter.class}

MyFilter 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class MyTypeFilter implements TypeFilter {
/**
*
* @param metadataReader 读取当前正在扫描类的信息
* @param metadataReaderFactory 可以获取到其他任何类信息
* @return
* @throws IOException
*/

public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
//获取当前类注解的信息
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
//获取扫描类的信息
ClassMetadata classMetadata = metadataReader.getClassMetadata();
//获取扫描类资源(类路径)
Resource resource = metadataReader.getResource();
if(classMetadata.getClassName().contains("Order")){
return true;
}
return false;
}
}

@Lazy

@Lazy主要跟@Bean搭配,专门针对单列bean,容器起来时候不加载,不生成bean
等去getBean的时候再去加载,生成bean