您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 韩顺平Spring笔记
spring的快速入门案例①spring是什么?struts是web框架(jsp/action/actionfrom)hibernate是orm框架,处于持久层.spring是容器框架,用于配置bean,并维护bean之间关系的框架☞spring中有一个非常概念:bean(是java中的任何一种对象javabean/service/action/数据源./dao,ioc(控制反转inverseofcontrol)di(dependencyinjection依赖注入)☞画一个框架图快速入门开发一个spring项目.1.引入spring的开发包(最小配置spring.jar该包把常用的jar都包括,还要写日志包common-logging.jar2.创建spring的一个核心文件applicationContext.xml,[hibernate有核心hibernate.cfg.xmlstruts核心文件struts-config.xml],该文件一般放在src目录下,该文件中引入xsd文件:可以从给出的案例中拷贝一份.3.配置bean!--在容器文件中配置bean(service/dao/domain/action/数据源)--!--bean元素的作用是,当我们的spring框架加载时候,spring就会自动的创建一个bean对象,并放入内存UserServiceuserSerivce=newUserService();userSerivce.setName(韩顺平);--beanid=userServiceclass=com.service.UserService!--这里就体现出注入的概念.--propertyname=namevalue韩顺平/value/property/bean4.在Test.java中,我们怎么使用//我们现在使用spring来完成上面的任务//1.得到spring的applicationContext对象(容器对象)ApplicationContextac=newClassPathXmlApplicationContext(applicationContext.xml);UserServiceus=(UserService)ac.getBean(userService);us.sayHello();5.细节讨论?传统的方法和使用spring的方法5.1使用spring,没有new对象,我们把创建对象的任务交给spring框架5.2spring的运行原理图:5.3我们再看spring对上面案例总结:spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可.ioc是什么?答:ioc(inverseofcontroll)控制反转:所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护.DI是什么?答:di(dependencyinjection)依赖注入:实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术☞学习框架,最重要的就是学习各个配置.把Applicationcontext做成一个单例的.上机练习:把我写的代码走一遍.spring开发提倡接口编程,配合di技术可以层与层的解耦举例说明:现在我们体验一下spring的di配合接口编程的,完成一个字母大小写转换的案例:思路:1.创建一个接口ChangeLetter2.两个类实现接口3.把对象配置到spring容器中4.使用通过上面的案例,我们可以初步体会到di配合接口编程,的确可以减少层(web层)和业务层的耦合度.思考题:接口ValidateUser有一个方法:check(??)有两个类CheckUser1implementsValidateUser{check//安装xml验证}CheckUser2implementsVallidateUser{check()//到数据库去验证}从ApplicationContex应用上下文容器中获取bean和从bean工厂容器中获取bean具体案例://从ApplicationContext中取beanApplicationContextac=newClassPathXmlApplicationContext(com/hsp/ioc/beans.xml);//当我们去实例化beans.xml,该文件中配置的bean被实例(该beanscope是singleton)从bean中取出student//如果我们使用beanfactory去获取bean,当你只是实例化该容器,那么//容器的bean不被实例化,只有当你去使用getBean某个bean时,才会实时的创建.BeanFactoryfactory=newXmlBeanFactory(newClassPathResource(com/hsp/ioc/beans.xml));factory.getBean(student);结论:1.如果使用ApplicationContext,则配置的bean如果是singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存)2.如果是BeanFactory,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度)3.规定:一般没有特殊要求,应当使用ApplicatioContext完成(90%)bean的scope的细节入门案例://获取两个studentStudents1=(Student)ac.getBean(student);Students2=(Student)ac.getBean(student);System.out.println(s1++s2);requestsessionglobal-session是在web开发中才有意义.三种获取ApplicationContext对象引用的方法1.ClassPathXmlApplicationContext-通过类路径2.FileSystemXmlApplicationContext-通过文件路径举例:ApplicationContextac=newFileSystemXmlApplicationContext(文件路径beans.xml/applicationContext.xml);3.XmlWebApplicationContextbean的生命周期为什么总是一个生命周期当做一个重点?Servlet-servlet生命周期init()destory()java对象生命周期.往往笔试,面试总喜欢问生命周期的问题①实例化(当我们的程序加载beans.xml文件),把我们的bean(前提是scope=singleton)实例化到内存②调用set方法设置属性③如果你实现了bean名字关注接口(BeanNameAware)则,可以通过setBeanName获取id号④如果你实现了bean工厂关注接口,(BeanFactoryAware),则可以获取BeanFactory⑤如果你实现了ApplicationContextAware接口,则调用方法//该方法传递ApplicationContextpublicvoidsetApplicationContext(ApplicationContextarg0)throwsBeansException{//TODOAuto-generatedmethodstubSystem.out.println(setApplicationContext+arg0);}⑥如果bean和一个后置处理器关联,则会自动去调用ObjectpostProcessBeforeInitialization方法⑦如果你实现InitializingBean接口,则会调用afterPropertiesSet⑧如果自己在beaninit-method=”init”/则可以在bean定义自己的初始化方法.⑨如果bean和一个后置处理器关联,则会自动去调用ObjectpostProcessAfterInitialization方法⑩使用我们的bean11.容器关闭12.可以通过实现DisposableBean接口来调用方法destory13.可以在beandestory-method=”fun1”/调用定制的销毁方法小结:我们实际开发中往往,没有用的这么的过程,常见的是:1-2-6-10-9-11上机练习:把使用每个bean的时间记录到一个recoder.txt文件,内容是xxbean.使用时间是:1999-11-1111:11:11问题:通过BeanFactory来获取bean对象,bean的生命周期是否和Applicationcontext是一样吗?不是一样的,bean是工厂中创建的生命周期会简单一些:配置bean的细节①scope的说明:☞尽量使用scope=”singleton”,不要使用prototype,因为这样对我们的性能影响较大.②如何给集合类型注入值.java中主要的集合有几种:mapsetlist/数组Department类:packagecom.hsp.collection;importjava.util.List;importjava.util.Map;importjava.util.Set;publicclassDepartment{privateStringname;privateString[]empName;privateListEmployeeempList;privateSetEmployeeempsets;privateMapString,EmployeeempMaps;publicSetEmployeegetEmpsets(){returnempsets;}publicvoidsetEmpsets(SetEmployeeempsets){this.empsets=empsets;}publicString[]getEmpName(){returnempName;}publicvoidsetEmpName(String[]empName){this.empName=empName;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicListEmployeegetEmpList(){returnempList;}publicvoidsetEmpList(ListEmployeeempList){this.empList=empList;}publicMapString,EmployeegetEmpMaps(){returnempMaps;}publicvoidsetEmpMaps(MapString,EmployeeempMaps){this.empMaps=empMaps;}}//Employeel类packagecom.hsp.collection;publicclassEmployee{privateStringname;privateintid;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}}beans.xml配置文件:?xmlversion=1.
本文标题:韩顺平Spring笔记
链接地址:https://www.777doc.com/doc-6289974 .html