spring xml 解析bean配置文件为beanDefinition过程
2021-05-29 04:03
                         标签:rem   from   else   决定   pen   red   修改   方法   lan    spring xml 解析bean配置文件为beanDefinition过程 标签:rem   from   else   决定   pen   red   修改   方法   lan    原文地址:https://www.cnblogs.com/arax/p/14772669.htmlpublic 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过程
文章链接:http://soscw.com/index.php/essay/88949.html