1框架介绍struts:学习的第一个框架,思想转变,完全自己编写,转型到,框架完成部分。基于xml配置文件。hibernate:hbm配置,优化配置等,配置量大。spring:理解思想(IoC控制反转、DI依赖注入、AOP切面编程)额外添加的springxml文件importresouces=可以去包含其他的配置文件,在开发中比较常见。每一个模块使用单独一个配置文件。2spring入门2.1回顾service中使用dao方式方式1:没有接口,只有类类:UserService、UserDaoclassUserService{privateUserDaouserDao=newUserDao();....}方式2:接口+实现类接口:UserService、UserDao实现类:UserServiceImpl、UserDaoImplclassUserServiceImplimplementsUserService{privateUserDaouserDao=newUserDaoImpl();....}方式3:接口+实现类+工厂接口:UserService、UserDao实现类:UserServiceImpl、UserDaoImplclassUserServiceImplimplementsUserService{privateUserDaouserDao=newUserDaoImpl();BeanFactory.getBean()....}本身自己new实例,但此时通过配置文件,让工厂去new,IoC(inverseofcontrol)控制反转控制反转IoC:将创建对象实例交于spring容器,不在由自己创建。将对象交于spring,此对象之后都称之为:bean2.2什么是spring轻量级:与重量级(EJB)对比。使用spring依赖程序很少。spring是一种解决方案,用于全站式开发。提供了软件开发,分层中不同层解决方案。web层:struts、springMVCservice层:spring(权限管理、事务管理等)dao层:hibernate、JdbcTemplateclassBeanFactory{publicstaticUserDaogetBean(){returnnewUserDaoImpl();//读取配置文件,获得dao实现类全限定类名,通过反射实例化。}}解决问题:service和dao解耦(没有关系)。*耦合:模块与模块之间的关系*内聚:类似功能应该存在一起*高内聚低耦合:讲所有的类似存放一起,模块之间关系越少越好。引出问题:问题1,service和工厂耦合。问题2,工厂与dao耦合*问题2:工厂与dao解耦:将dao实现类存放到配置文件中。xmlbeanid=userDaoIDclass=cn.itcast.UserDaoImpl反射:Class.forName(cn.itcast.UserDaoImpl).newInstance();//工厂在new2.3spring好处2.4体系结构spring核心组件:beans、core、context、expression2.5版本核心:spring-framework-3.2.0.RELEASE依赖:spring-framework-3.0.2.RELEASE-dependencies,从3.0.2之后再不提供依赖包。maven解决项目jar依赖的。不需要手动的下载jar包。3helloworld(必须练习)注意:编写helloworld之前,必须理解IoC概念。3.1步骤1.导入jar包2.编写spring配置文件3从spring容器获得实例对象,操作api3.2导入jar包导入4个核心组件,以及一个依赖jar3.3编写配置文件位置:任意包,开发是src下名称:任意,建议:applicationContext.xml添加约束位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html?xmlversion=1.0encoding=UTF-8?beansxmlns=:xsi=:schemaLocation=://!--beandefinitionshere--/beans内容?xmlversion=1.0encoding=UTF-8?beansxmlns=:xsi=:schemaLocation=://!--将对象配置给spring,id唯一名称,class为实现类全限定类名--beanid=userDaoIdclass=cn.itcast.a_hello.UserDao/bean/beans3.4api使用@Testpublicvoiddemo02(){StringxmlPath=cn/itcast/a_hello/beans.xml;//1获得spring容器ApplicationContextapplicationContext=newClassPathXmlApplicationContext(xmlPath);//2从容器通过名称获得实例UserDaouserDao=(UserDao)applicationContext.getBean(userDaoId);userDao.sayHello();}4依赖注入DI(必须练习)DI:DependencyInjection,依赖注入。依赖:A类使用B类,我们就成A类依赖与B类。依赖注入:A类使用B类,将自动创建B类实例,自动设置给A类例如:UserService需要使用UserDao,当从spring容器获得UserService时,spring将自动的创建UserDao,并设置给UserService。此时UserService不需要任何操作就可以使用UserDao。service提供setterpublicclassBookServiceImplimplementsBookService{//方式2:类+接口//privateBookDaobookDao=newBookDaoImpl();//方式4依赖注入,service使用dao将由工厂自动创建并设置。提供接口对应setter方法‘privateBookDaobookDao;publicvoidsetBookDao(BookDaobookDao){this.bookDao=bookDao;}@OverridepublicvoidaddBook(){this.bookDao.save();}}spring配置propertybeansxmlns=:xsi=:schemaLocation=://!--配置servcie--beanid=bookServiceIdclass=cn.itcast.b_di.BookServiceImpl!--给指定bean的属性,确定设置的内容*name:表示bean的属性名称(通过setter获得)*ref:引用,表示引用spring容器已经配置好的其他bean--propertyname=bookDaoref=bookDaoId/property/bean!--配置dao,spring就可以创建--beanid=bookDaoIdclass=cn.itcast.b_di.BookDaoImpl/bean/beans5自动提示确定schema文档位置myeclipse配置schema6BeanFactory和ApplicationContext(多读)BeanFactory,spring提供用于管理所有bean的工厂。用于生产bean。ApplicationContext,spring提供的bean容器,用于生产bean。ApplicationContext在加载完成配置文件时,默认将容器中所有的bean都进行实例化,之后调用getBean时直接获得即可。BeanFactory加载配置文件时不进行实例化,实例化延迟。直到第一次调用getBean时才实例化。7装配bean基于xml7.1bean实例化方式方式1:使用构造方式(默认构造方法)beanid=userDaoIdclass=cn.itcast.UserDao方式2:静态工厂,一般情况用于整合其他框架或工具。!--配置静态工厂--beanid=demo1class=cn.itcast.c_instance.a_static_factory.MyBeanFactory1factory-method=createDemo!--用于确定静态工厂中方法名称--/beanpublicclassMyBeanFactory1{/***工厂提供实例*@return*/publicstaticDemo1createDemo(){returnnewDemo1();}}方式3:实例工厂,用工厂之前,必须先new工厂。beansxmlns=:xsi=:schemaLocation=://!--1创建工厂实例--beanid=myBeanFactory2class=cn.itcast.c_instance.b_factory.MyBeanFactory2/bean!--2获得实例*factory-bean:确定工厂实例*factory-method:确定工厂普通方法名称--beanid=demo2factory-bean=myBeanFactory2factory-method=createDemo/bean/beanspublicclassMyBeanFactory2{/***要执行createDemo()方法,必须newMyBeanFactory2()*@return*/publicDemo2createDemo(){returnnewDemo2();}}7.2Bean种类分类两种:普通bean、工厂bean普通bean:没有任何要求,之前使用都是普通bean工厂bea