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的容器加载入门,下面我会写具体各项配置详细注解。

11-29 11:15