配置类等于配置文件
@Configuration : 告诉spring这是一个配置类
@Bean : 从容器注册一个Bean,类型为返回值类型,id默认方法名作为id
例如:
@Bean ("person")//指定Bean的名字为person
public Person person01(){
return new Person("lisi",20)
}
通过new AnnotationConfigApplicationContent(MainConfig.class);来获取IOC容器,基于配置文件时是用new ClassPathXmlApplicationContext("配置文件的位置")来获取IOC容器。
@ComponentScan : 包扫描器
@ComponentScan(value="com.it" ,excludeFilters = {@Filter (type = FilterType.ANNOTATION,classes={Controller.class})})
value : 指定要扫描的包,excludeFilters : 指定扫描的时候按照什么规则排除哪些组建;
@ComponentScan(value ="com.it",includeFilters = {@Filter(type = FilterType.ANNOTATION,classes={Controller.calss} , useDefaultFilters = false)})
inlcudeFilters : 指定扫描包的时候只扫描哪些组件,需要将useDefaultFilters = false.
@Scope : 配置Bean的作用域(prototype,singleton,request,session)
singleton单实例情况下IOC启动会调用方法创建对象放到IOC容器中,以后每次获取直接从容器中拿就可以。
prototype:多实例情况下IOC容器启动时不会创建对象,每次获取getBean()时调用方法创建对象。
@Lazy : (针对单实例)
单实例: 默认情况下IOC容器创建的时候创建对象
懒加载 : 容器创建的时候不创建bean,在第一次使用的时候也就是getBean()的时候会创建bean.
@Condition : 按照一定的条件进行判断,满足条件给容器注册bean;
例如 : 系统是Windows,给容器注册("billl"),系统是Linux给容器注册("linux")
@Condition(WindowsConditon.class) @Conditon(Linux.class)
@Conditon也可以放在配置类上,对配置类中的组件统一配置。
给容器中注册组件的方法:
1.包扫描+组件标注注解(@Service @Controller @Repository @Component) 这种情况局限于自己写的类,不适用从外部导入到包中的类(类上没有加注解)
2.@Bean(适用于导入的包)在配置类中直接用@Bean直接注册
3.@Import: 快速的给容器中导入一个组件
(1)@Import({Color.class,Red.class}),容器会自动注册这个组件,id默认是类的全类名。
(2) ImportSelector接口:返回需要导入的组件的数组@Import({Color.class,Red.class,MyImportSelector.class}),其中MyImportSelector.class会返回要注册到容器的全类名数组。
(3)ImportBeanDefinitionRegistrar : 手动注册bean到容器中,在注入之前可以加入一些判断条件。
(4)使用spring提供的FactoryBean(工厂bean)
//创建一个Spring定义的FactoryBean
public class ColorFactoryBean implements FactoryBean<color>{
//返回一个Color对象,这个对象会添加到容器中
@Override
public Color getObject() throws Exception{
return new Color();
}
//设置bean是否是单实例
@Override
public boolean isSingleton(){
return trure;
}
}
例如:
@Bean
public ColorFactoryBean colorFactoryBean(){
return new ColorFactoryBean();//实际上是获取的工厂里面配置的对象
}
1)默认获取到的是工厂bean调用getObject创建的对象
2)要获取工厂bean本身 ,我们需要给id前面加一个& &ColorFactoryBean