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