1、@Configuration
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器
1、@Configuration不可以是final类型的类
2、@Configuration不可以是匿名类
3、嵌套的@Configuration必须是静态类
注册Bean的过程:
1.1、@Configuration配置spring并启动spring容器
1.2、@Configuration启动容器+@Bean注册Bean
1.3、@Configuration启动容器+@Component注册Bean
Demo:
//配置类等同于以前的配置文件
@Configuration
public class MainConfig {
//给容器注册一个bean,类型是返回值,id默认是用方法名作为id
//当指定value时,value的值作为该bean的id,不会再去看方法名是什么了
@Bean(value ="person")
public Personperson01(){
return new Person("snail",20);
}
}
2、@Bean
1、给容器注册一个bean,类型是返回值,id默认是用方法名作为id
2、当指定value时,value的值作为该bean的id,不会再去看方法名是什么了
3、Demo
@Configuration
public class MainConfig {
//给容器注册一个bean,类型是返回值,id默认是用方法名作为id
//当指定value时,value的值作为该bean的id,不会再去看方法名是什么了
@Bean(value = "person")
public Person person01(){
return new Person("snail",20);
}
}
3、@ComponentScan
可以指定扫码的范围
1、按照包来扫
@ComponentScan(value = "com.dwd.snail.testspring.test")
2、按照注解类型来
@ComponentScan(
excludeFilters ={@ComponentScan.Filter(type= FilterType.ANNOTATION
,classes = {Controller.class, Repository.class})})
3、按照给定的类型来
@ComponentScan(@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
classes = {BookController.class})})
4、可以指定多个ComponentScan规则(该注解可以在配置类上配置多个)
4、@Scope
指定注册的Bean是单实例还是多实例的
1、默认是单实例的,ioc容器启动就会调用方法,并放在容器中,以后就从容器中拿
2、如果改成多实例的话,ioc容器启动时不会调用方法
3、单实例的初始化和销毁都归容器管,但是多实例的话,容器只负责调用,不负责管理这些Bean
Demo:
@Scope("prototype") //singleton 是单实例的
//给容器注册一个bean,类型是返回值,id默认是用方法名作为id
//当指定value时,value的值作为该bean的id,不会再去看方法名是什么了
@Bean(value = "person")
public Person person01(){
return new Person("snail",20);
}