spring xml 解析bean配置文件为beanDefinition过程

2021-05-29 04:03

阅读:638

标签:rem   from   else   决定   pen   red   修改   方法   lan   

public AbstractBeanDefinition parseBeanDefinitionAttributes(Element ele, String beanName,
			@Nullable BeanDefinition containingBean, AbstractBeanDefinition bd) {
		// https://blog.csdn.net/ZixiangLi/article/details/87937819
		// singleton 已经不使用了,后面都修改为scope配置了
		if (ele.hasAttribute(SINGLETON_ATTRIBUTE)) {
			error("Old 1.x ‘singleton‘ attribute in use - upgrade to ‘scope‘ declaration", ele);
		}
		// bean 作用范围 singleton,prototype request session
		else if (ele.hasAttribute(SCOPE_ATTRIBUTE)) {
			bd.setScope(ele.getAttribute(SCOPE_ATTRIBUTE));
		}
		// 如果都找不到,则使用bean的scope
		else if (containingBean != null) {
			// Take default from containing bean in case of an inner bean definition.
			bd.setScope(containingBean.getScope());
		}

		// 设置bean 是否为抽象类,默认是false 如果设置为true 则不能初始化
		if (ele.hasAttribute(ABSTRACT_ATTRIBUTE)) {
			bd.setAbstract(TRUE_VALUE.equals(ele.getAttribute(ABSTRACT_ATTRIBUTE)));
		}

		// 解析 lazy-init 属性,设置bean是否懒加载,如果设置为true,在应用第一次使用到该bean时才加载
		// "非单例" 的不受这个限制,在初始化容器时都不会加载
		String lazyInit = ele.getAttribute(LAZY_INIT_ATTRIBUTE);
		if (isDefaultValue(lazyInit)) {
			lazyInit = this.defaults.getLazyInit();
		}

		bd.setLazyInit(TRUE_VALUE.equals(lazyInit));

		// 解析 autowire
		// 存在5个值
		// byName:通过属性名称来自动装配,及A类中的B对象名称为beanService,那么将根据id="beanService"来装配,A 类必须提供setBeanService方法
		// byType:根据属性来找到和配置文件中配置的class类型一致的bean来自动装配,如果找到多个类型一致的bean则抛出异常,如果一个都没找到,则不执行装配,也不抛出异常
		// no 不执行 自动装配,只能用

spring xml 解析bean配置文件为beanDefinition过程

标签:rem   from   else   决定   pen   red   修改   方法   lan   

原文地址:https://www.cnblogs.com/arax/p/14772669.html


评论


亲,登录后才可以留言!