如何进行spring中的默认标签源码解析

本篇文章为大家展示了如何进行spring中的默认标签源码解析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

我们提供的服务有:网站建设、做网站、微信公众号开发、网站优化、网站认证、青浦ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的青浦网站制作公司

默认标签解析

       try {
			String parent = null;
			if (ele.hasAttribute(PARENT_ATTRIBUTE)) {//判断是否有parent标签
				parent = ele.getAttribute(PARENT_ATTRIBUTE);
			}
			AbstractBeanDefinition bd = createBeanDefinition(className, parent);
			parseBeanDefinitionAttributes(ele, beanName, containingBean, bd);
			bd.setDescription(DomUtils.getChildElementValueByTagName(ele, DESCRIPTION_ELEMENT));
			parseMetaElements(ele, bd);
			parseLookupOverrideSubElements(ele, bd.getMethodOverrides());
			parseReplacedMethodSubElements(ele, bd.getMethodOverrides());
			parseConstructorArgElements(ele, bd);
			parsePropertyElements(ele, bd);
			parseQualifierElements(ele, bd);
			bd.setResource(this.readerContext.getResource());
			bd.setSource(extractSource(ele));
			return bd;
		}

  parent标签

     某个的父类。这个类用parent的属性,
     
       
   

   
   
       
   

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Child parent = applicationContext.getBean(Child.class);
System.out.println("name="+parent.getName());
System.out.println("age="+parent.getAge());

打印结果:
name=ouyangfeng
age=18

createBeanDefinition方法:创建 GenericBeanDefinition 实例

parseBeanDefinitionAttributes 方法:解析下列属性

singleton属性//单例模式只实例化一次scope属性//作用域request
//作用域session
//作用域globalsession
//每次请求重新实例化一个新的对象abstract属性//定义抽象类spring容器不会为该类创建对象。lazy-init属性//延迟加载,启动时不进行加载,getBean时再加载autowire属性:自动装配
No: 不启动自动装配默认值
byName:在spring IOC中通过属性的名字的方式查找javaBean依赖的对象并为其注入;
byType:在spring IOC中通过属性的类型的方式查找javaBean依赖的对象并为其注入
default:由上级标签的default-autowire属性确定
constructor:跟buType一样区别在于不是使用Seter方法注入,而是通过构造函数注入dependsOn属性:bean的依赖关系,被依赖的bean启动时先实例化,关闭时后销毁 beanOne依赖manager和accountDaoautowire-candidate属性:是否自动注入 
public class MessagePrinter {

    private MessageService service;

    public void setService(MessageService service) {
		this.service = service;
	}
}
MessageServiceDBImpl和MessageServiceFileImpl都是MessageService的实现类, 实例化MessagePrinter时只自动注入MessageServiceFileImpl类primary属性:首选当容器类有多个同一类型的bean改类为首选项init-method属性:初始化类时执行指定方法 destroy-method属性:销毁时执行指定方法factory-method属性:调用工厂类方法 ApplicationContext.getBean("bmwCar"); //获取bean时调用CarStaticFactory类里的getCar方法factory-bean属性: 实例化工厂类 
 

parseMetaElements方法

解析meta元素
mete元素的使用 
     
     

BeanDefinition bd;
String beanCategoriesExpression = (String)bd.getAttribute(CATEGORY_META_KEY);
 

parseLookupOverrideSubElements方法:解析 lookup-method 标签

public abstract class GetBeanCase {
public void showMe(){
    this.getBean().showMe();
}
public abstract User getBean();

public class Teacher extends User {
public void showMe(){
    System.out.println("i is Teacher");
}

public class Person extends User {
public void showMe(){
    System.out.println("i is Person");
}


    




ApplicationContext context = new ClassPathXmlApplicationContext("appContext.xml");
GetBeanCase getBeanCase = (GetBeanCase) context.getBean("getBeanCase");
getBeanCase.showMe();

打印 i is Person
 

parseReplacedMethodSubElements方法:解析replaced-method标签

ublic class MyBean {
public void disPlay(){
    System.out.println("me is原来的method");
}

public class MyBeanReplacer implements MethodReplacer {
public Object reimplement(Object obj, Method method, Object[] args) throws Throwable {
    System.out.println("我替换了原来的method!");
    return null;
}


    

    


ApplicationContext context = new ClassPathXmlApplicationContext("replaceMethod.xml");
MyBean myBean = (MyBean) context.getBean("myBean");
myBean.disPlay();

打印
我替换了原来的method!
 

上述内容就是如何进行spring中的默认标签源码解析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


当前名称:如何进行spring中的默认标签源码解析
网页URL:http://scyanting.com/article/gjpspo.html