左右左布局网站建设,电子图书网站开发的目的,保定网站设计推荐,怎么把模板导入wordpress前一篇博客介绍了Spring中的Bean的基本概念和作用域#xff08;Spring读书笔记-----Spring的Bean之Bean的基本概念 #xff09;,现在介绍Spring Bean的基本配置。 从开始我们知道Java应用中各组件的相互调用的实质可以归纳为依赖关系。根据注入方式的不同#xff0c;Bean的依…前一篇博客介绍了Spring中的Bean的基本概念和作用域Spring读书笔记-----Spring的Bean之Bean的基本概念 ,现在介绍Spring Bean的基本配置。 从开始我们知道Java应用中各组件的相互调用的实质可以归纳为依赖关系。根据注入方式的不同Bean的依赖注入可以分为两种形式 1、 属性通过property …/元素配置对应设置注入。 2、 构造器参数通过constructor-arg…/元素配置对应构造注入。 不管是属性还是构造器参数都视为Bean的依赖接受Spring容器管理依赖关系的值要么是一个确定的值要么是Spring容器中的其他Bean的引用。 在一般情况下我是不应该在配置文件中管理普通属性的引用通常只是用配置文件管理容器中的Bean实例的依赖关系。 Spring在实例化容器时会校验BeanFactory中每一个Bean的配置。这些校验包括 Bean引用的依赖Bean是否指向一个合法的Bean。 Bean的普通属性值是否获得一个有效值。 对于singleton作用域的Bean如果没有强行取消其预初始化的行为系统会在创建Spring容器时预初始化所用singleton Bean与此同时该Bean所依赖的Bean也被一起实例化。 BeanFactory与ApplicationContext实例化容器中的Bean的时机也是不同的BeanFactory等到程序需要Bean实例时才创建Bean而ApplicationContext是在创建ApplicationContext实例时会预初始化容器中的全部Bean。同时在创建BeanFactory时不会立即创建Bean实例所以有可能程序可以正确地创建BeanFactory实例但是当请求Bean实例时依然抛出一个异常创建Bean实例或注入它的依赖关系时出现错误。所以当配置错误的延迟出现会给系统带来一些不安全的因素。而ApplicationContext则是默认预初始化所有singleton作用域的Bean所以ApplicationContext实例化过程比BeanFactory实例化过程的时间和内存开销大但是一旦创建成功应用后面的响应速度会非常快同时可以检验出配置错误故一般都是推荐使用ApplicationContext作为Spring容器。 其实我们可以指定lazy-int”true”来强制取消singleton作用域的Bean的预初始。这样该Bean就不会随着ApplicationContext启动而预实例化了。 Spring可以为任何java对象注入任何类型的属性只要改java对象为该属性提供了对应的setter方法即可。 [html] view plaincopyprint? bean idperson classlee.Person !-- Property配置需要依赖注入的属性 -- property namename valuechenming / property nameage value22 / /bean bean idperson classlee.Person!-- Property配置需要依赖注入的属性 --property namename valuechenming /property nameage value22 //bean Spring会为bean…/元素创建一个java对象一个这样的java对象对应一个Bean实例对于如上代码Spring会采用如下形式来创建Java实例。 [java] view plaincopyprint? //获取lee.Person类的Class对象 Class personClass Class.forName(lee.Person); //创建lee.Person类的默认实例 Object personBean personBean.newInStance(); //获取lee.Person类的Class对象Class personClass Class.forName(lee.Person);//创建lee.Person类的默认实例Object personBean personBean.newInStance(); 创建该实例后Spring就会遍历该bean../元素的所有property…/子元素。bean…/元素每包含一个property…/子元素Spring就会为该Bean实例调用一次setter方法。类似于下面程序 [java] view plaincopyprint? //获取name属性的setter方法 String setName setName; //获取lee.Person类里面的Set()Name方法 java.lang.reflect.Method setMethod personClass.getMethod(setName, aVal.getClass()); //调用Bean实例的SetName()方法 setMethod.invoke(personBean, aVal); //获取name属性的setter方法String setName setName;//获取lee.Person类里面的Set()Name方法java.lang.reflect.Method setMethod personClass.getMethod(setName, aVal.getClass());//调用Bean实例的SetName()方法setMethod.invoke(personBean, aVal); 对于使用constructor-arg…/元素来指定构造器注入Spring不会采用默认的构造器来创建Bean实例而是使用特定的构造器来创建该Bean实例。 [html] view plaincopyprint? bean idperson classlee.Person constructor-arg index0 valueaVal / constructor-arg index1 valuebVal / /bean bean idperson classlee.Personconstructor-arg index0 valueaVal /constructor-arg index1 valuebVal //bean 针对上面的代码Spring会采用类似如下的代码来创建Bean实例 [java] view plaincopyprint? //获取lee.Person类的class对象 Class personClass Class.forName(lee.Person); //获取第一个参数是aVal类型第二个参数是bVal类型的构造器 Constructor personCtr personClass.getConstructor(aVal.getClass(),bVal.getClass()); //以指定构造器创建Bean实例 Object bean personCtr.newInstance(aVal,bVal); //获取lee.Person类的class对象Class personClass Class.forName(lee.Person);//获取第一个参数是aVal类型第二个参数是bVal类型的构造器Constructor personCtr personClass.getConstructor(aVal.getClass(),bVal.getClass());//以指定构造器创建Bean实例Object bean personCtr.newInstance(aVal,bVal); 上面的程序只是一个实例实际上Spring还需要根据property…/元素、contructor-arg../元素所使用value属性ref属性等来判断需要注入的到底是什么数据类型并要对这些值进行合适的类型转换所以Spring的实际处理过程会更加复杂。 读李刚《轻量级Java EE企业应用实战》转载于:https://www.cnblogs.com/zzzzw/p/4580969.html