您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > spring-ioc分析
-1-理解Spring体系结构的模块构成掌握BeanFactory和ApplicationContext的使用方法掌握Bean的生命周期掌握在IoC容器中装配Bean的方法掌握依赖注入的不同方式掌握注入参数的不同类型掌握Bean的不同作用域类型掌握IoC容器中对Bean进行自动装配的不同类型了解依赖检查的几种处理模式目标-2-Spring概述•Spring是一个全方位的解决方案,主要包括如下功能:基于依赖注入(控制反转IoC)的核心机制声明式的面向切面编程(AOP)支持与多种技术整合优秀的WebMVC框架•Spring具有如下优点:低侵入式设计,代码无污染独立于各种应用服务器,真正实现WriteOnce、RunAnywhere(一次编写、随处运行)的承诺IoC容器降低了业务对象替换的复杂性,降低了组件之间的耦合AOP容器允许将一些通用任务如安全、事务、日志等进行集中式处理Spring中的ORM和DAO支持提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问Spring的高度开放性,并不强制开发者完全依赖于Spring,可自由选用Spring框架的部分或全部功能-3-Spring体系结构-4-ICO容器•IoC(InversionofControl,控制反转)是Spring框架的基础,AOP、声明式事务等功能都是在此基础上实现的BeanFactoryApplicationContextSpringIoC容器注入业务对象(POJO)可用的完整系统装配、集成业务对象生产-5-BeanFactory•org.springframework.beans.factory.BeanFactory是IoC容器的核心接口,其职责是实例化、定位、配置应用程序中的对象及建立这些对象间的依赖方法功能说明booleancontainsBean(Stringname)判断容器是否包含id为name的Bean定义ObjectgetBean(Stringname)返回容器中id为name的BeanObjectgetBean(Stringname,ClassrequiredType)返回容器中特定id和类型的BeanClassgetType(Stringname)返回容器中id为name的Bean的类型AutowireCapableBeanFactoryListableBeanFactoryBeanDefinitionRegistryBeanFactoryHierarchicalBeanFactoryConfigurableBeanFactoryConfigurableListableBeanFactoryDefaultListableBeanFactoryXmlBeanFactory-6-使用BeanFactory?xmlversion=1.0encoding=UTF-8?!DOCTYPEbeansPUBLIC-//SPRING//DTDBEAN2.0//EN!--创建一个id为customer的Bean对象--beanid=customerclass=com.haiersoft.ch07.pojos.Customer!--根据属性名称注入相应的值--propertyname=userNamevalue=zhangsan/propertyname=passwordvalue=123/propertyname=realNamevalue=张三/propertyname=addressvalue=青岛/propertyname=mobilevalue=12345678//bean/beans//根据配置文件创建ClassPathResource对象ClassPathResourceis=newClassPathResource(bean.xml);//创建BeanFactory对象BeanFactoryfactory=newXmlBeanFactory(is);//从BeanFactory对象中,根据id获取具体对象Customercustomer=(Customer)factory.getBean(customer);-7-ApplicationContext•ApplicationContext接口由BeanFactory派生而来,增强了BeanFactory的功能,提供了更多的面向实际应用的方法,如添加了Bean生命周期的控制、框架事件体系、国际化支持、资源加载透明化等多项功能•ApplicationContext接口的主要实现类:ClassPathXmlApplicationContext:从类路径加载配置文件FileSystemXmlApplicationContext:从文件系统中装载配置文件-8-使用ApplicationContext•Spring的配置文件在类路径下•Spring的配置文件在文件系统的路径下•ApplicationContext在初始化应用上下文时,默认会实例化所有的singletonBean(单例Bean)。因此系统前期初始化ApplicationContext时将有较大的系统开销,时间稍长一些,但程序后面获取Bean实例时将直接从缓存中调用,因此具有较好的性能ApplicationContextctx=newClassPathXmlApplicationContext(bean.xml);ApplicationContextctx=newFileSystemXmlApplicationContext(E:/workspace/ch07/src/bean.xml);-9-Bean生命周期实例化设置属性值调用BeanFactoryAware的setBeanFactory()方法调用ApplicationContextAware的setApplicationContext()方法调用BeanPostProcessor的postProcessBeforeInitialization()方法调用InitializingBean的afterPropertiesSet()方法通过init-method属性配置的初始化方法调用BeanPostProcessor的postProcessAfterInitialization()方法Spring缓存池中准备就绪的Bean将准备就绪的Bean交给调用者调用DisposableBean的afterPropertiesSet()方法通过destroy-method属性配置的销毁方法-10-Spring配置文件?xmlversion=1.0encoding=UTF-8?!DOCTYPEbeansPUBLIC-//SPRING//DTDBEAN2.0//EN=customerclass=com.haiersoft.ch07.pojos.Customer/bean/beans?xmlversion=1.0encoding=UTF-8?beansxmlns=:xsi=:aop=:tx=:schemaLocation=“://://://://://=truebeanid=customerclass=com.haiersoft.ch07.pojos.Customer/bean/beans-11-Bean基本配置beanid=名称class=类名/?xmlversion=1.0encoding=UTF-8?!DOCTYPEbeansPUBLIC-//SPRING//DTDBEAN2.0//EN=customerclass=com.haiersoft.ch07.pojos.Customer/bean/beansgetBean(“customer”)示例7.D.1-12-依赖注入的方式依赖注入(DependencyInjection,DI)•根据注入方式的不同,Bean的依赖注入通常表现为如下两种形式:设值注入:通过使用属性的setter方法注入Bean的属性值或依赖对象构造注入:通过使用构造器来注入Bean的属性或依赖对象•不管是设值注入,还是构造器注入,都受Spring的IoC容器管理。注入的要么是一个确定的值,要么是对IoC容器中其他Bean的引用。-13-设值注入设值注入(也称属性注入)是指IoC容器使用属性的setter方法注入Bean的属性值或依赖对象publicclassCustomerimplementsSerializable{/*用户ID*/privateIntegerid;/*用户名*/privateStringuserName;/*密码*/privateStringpassword;/*真实姓名*/privateStringrealName;/*收货人地址*/privateStringaddress;/*手机号*/privateStringmobile;......get、set方法}?xmlversion=1.0encoding=UTF-8?!DOCTYPEbeansPUBLIC-//SPRING//DTDBEAN2.0//EN=customerclass=com.haiersoft.ch07.pojos.Customerpropertyname=idvalue=1/propertyname=userNamevalue=zhangsan/propertyname=passwordvalue=123/propertyname=realNamevalue=张三/propertyname=addressvalue=青岛/propertyname=mobilevalue=12345678//bean/beans示例7.D.2-14-构造注入构造注入是指通过使用构造器来注入Bean的属性或依赖对象publicclassCustomerimplementsSerializable{......各个属性/*根据属性创建构造方法*/publicCustomer(Integerid,Stringuse
本文标题:spring-ioc分析
链接地址:https://www.777doc.com/doc-1763708 .html