spring 组件注册

一、声明配置类和注册 bean

/**
 * 配置类 == applicationContext.xml 配置文件
 * @author Administrator
 *
 */
//@Configuration 告诉 spring 这是一个配置类
@Configuration  
//@ComponentScan:value 配置扫描的包;excludeFilters 按照一定规则排除包;includeFilters 只包含
//excludeFilters = {@Filter(type = FilterType.ANNOTATION,classes={Controller.class})}
@ComponentScan(value = "com.fw",includeFilters = {
        @Filter(type = FilterType.ANNOTATION,classes={Controller.class})
},useDefaultFilters = false)    
public class MainConfig {
    
    @Bean("person")    //给容器中注册一个 Bean;类型为返回值的类型,id 默认以方法名作为 id
    public Person person(){
        return new Person("lisi", 18);
    }
}

二、通过配置类创建 spring 容器

@Testpublic void test1(){
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    Person person = applicationContext.getBean(Person.class);
    System.out.println(person);
}

三、@Scope 指定bean的作用域

/**
 * @Scope:
 * prototype:多实例的:ioc 容器在启动的时候并不会调用方法创建对象,而是每次获取的时候才会去调用方法
 * singleton:单实例的:默认值,ioc 容器在启动的时候就会调用这个方法去创建对象,以后每次获取对象直接从容器中拿
 */
@Scope("singleton")
@Bean("person")
public Person person(){
    return new Person("lisi", 18);
}

 四、@Lazy 懒加载

/**
 * @Lazy:懒加载:只针对单实例 @Scope("singleton")
 *         单实例的 bean:默认在容器启动的时候创建对象
 *         懒加载:容器启动的时候不创建对象.而是在第一次使用(获取)bean 的时候才创建对象,并初始化
 */
//@Scope("singleton")
@Lazy
@Bean("person")
public Person person(){
    return new Person("lisi", 18);
}

五、 

原文地址:https://www.cnblogs.com/fangwu/p/8675593.html