1、@Configuration
会告诉spring这是一个配置类,与springmvc中的bean.xml是一个效果;使用如下:
@Configuration
public class MainConfig {
}
2、@ComponentScan
告诉spring要扫描的类路径,与springmvc中的<context:component-scan>
一个效果;lazyInit制定是否需要懒加载,默认false,懒加载表示程序第一次访问时才加载,否则在容器初始化时加载,excludeFilters属性可以指定要排除的类,排除规则有5种,
1、ANNOTATION
按注解 、
2、ASSIGNABLE_TYPE
按类型、
3、ASPECTJ
按使用ASPECTJ表达式、
4、 REGEX
按正则、
5、CUSTOM
按自定义规则;
使用如下:
@ComponentScan(value="com.*",excludeFilters = {
//排除带Controller注解的类
@ComponentScan.Filter(type=FilterType.ANNOTATION,classes={Controller.class}),
//排除Car的子类
@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE,classes={Car.class}),
//按自定义规则排除
@ComponentScan.Filter(type= FilterType.CUSTOM,classes{MyTypeFilter.class})
})
}
/**
* 加载所有类名包含‘a’的类
*/
public class MyTypeFilter implements TypeFilter {
/**
* metadataReader:读取到的当前正在扫描的类的信息
* metadataReaderFactory:可以获取到其他任何类信息的
*/
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
//获取当前正在扫描的类的类信息
ClassMetadata classMetadata = metadataReader.getClassMetadata();
String className = classMetadata.getClassName();
if(className.contains("a")){
return true;
}
return false;
}
}
3、@ComponentScans
指定加载多个@ComponentScan,使用如下:
@ComponentScans(
value = {
@ComponentScan(value="com.a.*"),
@ComponentScan(value="com.b.*"),
}
)