spring小结(5)---继续@Configuration

上节提到@Configuration的cglib,假设将confi类的方法配置为static,会输出2次
@Configuration
@ComponentScan("com.lmq.BaseService")
//@Import(MyImportBeanDefinitionRegistrar.class)
@Import(MyImportSelector.class)
public class AppConfig {


    @Bean
     public  static  lmqDao indexdao()
    {
        return new lmqDao();
    }

    @Bean
    public lmqDao1 indexdao1()
    {
        indexdao();
        return new lmqDao1();  //会输出2遍“lmqdao1-init",因为是根据执行方法来产生bean,方法调用了一次,总共2次
    }


}

原因在于spring处理不同

查看

ConfigurationClassBeanDefinitionReader 的chuli
ConfigurationClassBeanDefinition beanDef = new ConfigurationClassBeanDefinition(configClass, metadata);
beanDef.setResource(configClass.getResource());
beanDef.setSource(this.sourceExtractor.extractSource(metadata, configClass.getResource()));

if (metadata.isStatic()) {
   // static @Bean method  设置的是class
   beanDef.setBeanClassName(configClass.getMetadata().getClassName());
   beanDef.setFactoryMethodName(methodName);
}
else {
   // instance @Bean method  //设置的是factorybean,后面进入代理,安照上节所讲所以一次
   beanDef.setFactoryBeanName(configClass.getBeanName());
   beanDef.setUniqueFactoryMethodName(methodName);
}
beanDef.setAutowireMode(RootBeanDefinition.AUTOWIRE_CONSTRUCTOR);
beanDef.setAttribute(RequiredAnnotationBeanPostProcessor.SKIP_REQUIRED_CHECK_ATTRIBUTE, Boolean.TRUE);

AnnotationConfigUtils.processCommonDefinitionAnnotations(beanDef, metadata);

Autowire autowire = bean.getEnum("autowire");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值