SpringIOC学习笔记1
为什么学习Spring注解开发
springioc使用注解开发更加简单,有效,减少配置文件的书写,可以更好的融入到下一阶段Springboot的学习。
@Configuration注解与@Bean
@Configuration相当于一个配置类,相当于bean的xml,在里面可以实现bean.xml的各种配置,但这个是基于注解,非常方便程序员的快速开发。@Bean顾名思义,这是一个bean实例,使用该注解与返回该实例的方法上即向容器中注册该bean实例。
@Configuration
public class MyConfig {
@Bean
public Car car(){
return new Car();
}
@Bean默认是用方法名作为ID,如果需要指定则需要进行指定
@Configuration
public class MyConfig {
@Bean("car")
public Car car00(){
return new Car();
}
@ComponentScan与@ComponentScans
@ComponentScan相当于一个包扫描器,value是路径,如果需要指定哪些组件则使用includeFilters,相反,如果需要指定哪些组件不被扫描进容器则使用excludeFilters但容器默认规则为全部扫描,使用该excludeFilters需要禁用掉useDefaultFilters=false。
@Configuration
@ComponentScan(value = "spring",includeFilters = {
@Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
},useDefaultFilters = false)
public class MyConfig {
@Bean
public Car car(){
return new Car();
}
}
当然我们可以使用自身的拦截规则,需要实现TypeFilter接口,当容器扫描到每个组件时可以获取它当时的信息
@Configuration
@ComponentScan(value = "spring",includeFilters = {
@Filter(type = FilterType.CUSTOM,classes = {MyTypeFilter.class})
},useDefaultFilters = false)
public class MyConfig {
@Bean
public Car car(){
return new Car();
}
}
public class MyTypeFilter implements TypeFilter {
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
ClassMetadata classMetadata=metadataReader.getClassMetadata();
String name=classMetadata.getClassName();
if(name.contains("Co"))return true;
return false;
}
}
@ComponentScans可以包含多个含有ComponentScant类的数组
@ComponentScans(value = {@ComponentScan(value = "spring",includeFilters = {
// @Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
@ComponentScan.Filter(type = FilterType.CUSTOM,classes = {MyTypeFilter.class})
},useDefaultFilters = false)
})
public class ComponentScansConfig {
}
以上就是IOC的容器加载入门,下面我会写具体各项配置详细注解。