Spring学习笔记(一):配置类、组件扫描和懒加载

Spring学习笔记(一):配置类、组件扫描和懒加载

Configuration注解配置类

使用@Configuration来注解配置类,可以替代beans.xml配置文件

    //配置类==配置文件
    @Configuration
    public class MainConfig {
        //向IoC容器中注册一个bean,类型为返回值的类型
        @Bean
        public Person person() {
            return new Person("john", 20);
        }
    }    

根据配置获取IoC容器

public class ConfigTest {
    public static main(String[] args) {
        ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);
        //person()方法名默认为bean的Id
        //如何修改bean的id:
        //1.修改被@bean注解的方法名
        //2.@Bean("需要设置的bean的Id")
        String[] namesOfBean = ac.getBeanNameForType(Person.class);
        for (String name : namesOfBean) {
            System.out.println(name);
        }
    }
    
}

结果打印:person

ComponentScan扫描规则

使用@ComponentScan来注解配置类,用来指定需要扫描的包

@Configuration
//若使用根据类型来
@ComponentScan(value="com.got.test",
includeFilters={@Filter(type=FilterType.ANNOTATION,calsses={Controller.class}), 
useDefaultFilters=false)
public class Confing {
    @Bean
    public Person person() {
        return new Person("John, 20");
    }
}

如果需要手工设置需要包含和排除的类,可以在@ComponentScan中添加属性,同时设置useDefaultFilters为false。
@ComponentScan:

  • value:指定要扫描的包
  • excludeFilters = Filter[] 指定按怎样的规则排除组件
  • includeFilters = Filter[] 指定按怎样的规则包含组件
  • useDefaultFilters: 默认为true,扫描所有组件;指定包含排除规则时需要设置为false
  • 相关扫描规则:
  1. FilterType.ANNOTATION:按照注解
  2. FilterType.ASSIGNABLE_TYPE: 按照给定类型(类名.class)
  3. FilterType.ASPECTJ:使用ASPECTJ表达式
  4. FilterType.REGEX:使用正则匹配
  5. FilterType.CUSTOM:使用自定义规则,自行定义

Scope扫描规则

@Scope注解规定了bean的作用域

  1. prototype: 多实例,容器启动时不会创建实例,每次获取对象时才调用方法创建实例
  2. singleton:单实例(默认),容器启动时创建实例并放入容器中
  3. request:针对web应用,作用于为一次请求
  4. session:同一session使用同一实例
@Scope("prototype")
@Bean
public Person person() {
    return new Person("John", 20);
}

Lazy懒加载

主要针对单实例的bean,单实例的bean默认在容器启动时创建对象,在加上@lazy注解后容器启动时不创建对象,仅当第一次使用(获取)bean时才创建初始化bean实例

@Lazy
@Bean
public Person person() {
    System.out.println("add bean person to IoC Container,");
    retrun new Person("John", 20);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值