1、Spring学习讲义Spring几个重要概念(0200)1. DI Dependency Injection 依赖注入 2. IOC(DI)Inversion of Control控制反转3. AOP Aspect-Oriented Programming 面向切面编程4. SSH框架什么是IOC(DI),有什么好处1. 把自己new的东西改为由容器提供a) 初始化具体值b) 装配2. 好处:灵活装配Spring IOC配置与应用1. 环境搭建:A)引入jar包:spring-core.jar , sping-beans.jar, spring-context.jar jarkata-comm
2、ons/commons-loggin.jar,B)引入XML文件的元文件(解决没有提示的问题):a) window preferences myeclipse xml xml catalogb) User Specified Entries addi. Location: D:share0900_Springsoftspring-framework-2.5.6distresourcesspring-beans-2.5.xsdii. URI: file:/D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-
3、beans-2.5.xsdiii. Key Type: Schema Locationiv. Key: http:/www.springframework.org/schema/beans/spring-beans-2.5.xsd2. BeanFactory 和 ApplicationContext ApplicationContext实现BeanFactory接口1 ClassPathXmlApplicationContext 从classpath路径中读取xml文件3. Bean的实例化(xml):1 调用无参构造函数;(0300)“常用”2 采用静态工厂方法。(0400)“不用了解具体实
4、现方法”4. Bean的Scope1 Singlelon(默认)2 Prototype3 Request4 Session5. Bean的生命周期一个BEAN从建立到消亡,会经历一系列的生命周期。1 Bean定义文件中定义init-method(局部)2 Bean定义文件中定义destroy-method(局部)3 配置文件定义:default-init-method 和 default-destroy-method (全局)注意init-method destroy-method 不要和prototype一起用!6. Bean定义的继承需要在抽象Bean的定义中加入:abstract=”tr
5、ue”在实现Bean的定义中加入:parent=“ParentBeanName”。7. Bean的依赖设置两种基本注入方式:1 Setter Injection(重要)2 Construction Injection(不重要用的很少)8. 自动绑定四种方法:1 在Bean的定义中使用标签定义基本类型值;2 是用标签指定参考至其他Bean实例;3 使用标签指定”class”属性,指定依赖对象;4 隐式的自动绑定绑定方式:byName(名称) byType(类型) 将某个实例绑定在其他Bean属性上。9. 集合注入不重要,很少用,看例子!什么是AOP1. 面向切面编程 Aspect-Oriente
6、d ProgrammingA) 是对面向对象编程的有力补充。(顺,横)2. 当我们需要在业务逻辑前后加入一些与业务逻辑无关的系统逻辑(如:日志,权限检查,安全设置,运行时间等)内容时,我们把这些逻辑独立出来变成一个对象,成为Aspect。3. 好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码。4. AOP实现方法:代理(Proxy)Spring会自动生成代理对象,现简述代理机制Spring AOP的配置与应用1. 代理机制:A) 静态代理1 代理对象和被代理对象需要实现同一个接口2 代理对象可以实现日志相关服务3 被代理对象保留业务逻辑职责。4 缺点:一个代理接口对应一种服务,若
7、代理方法很多,无法胜任。B) 动态代理1 使用Handler服务于各个对象,Handler实现InvocationHandler接口。2 使用Handler的bind()方法,绑定被代理对象。2. AOP的相关概念a) JoinPoint 切点b) PointCut 切点的集合c) Aspect 切面d) Advice切面逻辑e) Target 被代理对象f) Weave 织入3. 实现AOP的两种方式:A) 使用annotationB) 使用xml4. Annotation的AOP配置a) 加上对应的xsd文件spring-aop.xsd和Jar包b) beans.xml c) 此时就可以解
8、析对应的Annotation了d) 建立我们的拦截类e) 用Aspect注解这个类f) 建立处理方法g) 用Before来注解方法h) 写明白切入点(execution .)i) 让spring对我们的拦截器类进行管理Component,初始化这个切面5. 常见的Annotation:(用做注解)a) Pointcut 切点的集合,使写法简介一点点b) Before 在方法前织入c) AfterReturning =(finally)在抛出异常后依旧织入d) AfterThrowing 在抛出异常前织入e) Around 在方法前后环绕织入6. xml配置AOP把interceptor对象初始
9、化aop:configaop:aspect .aop:pointcutaop:beforeStruts + Spring + Hibernate1.架构的历史A)两层架构B)三层架构Spring整合Hibernate1.架构思路(DI)A)UserDAO注入SessionFactoryB)DataSource的注入C)SessionFactory的注入Spring整合Struts1. 架构思路A)建立web project,加入相关的jar包B)struts对象继承Action类,让Spring来管理Action对象,让Action对象也成为Spring管理的Bean,即使用Spring产生A
10、ction对象。(HelloAction.java)C)UserChecker模拟业务层权限检查对象,可以使用Spring做依赖注入(UserChecker.java ,beans-config.xml)D)对Struts-config.xml使用Plug-in标签,指定Spring的Bean名称和位置。注意:Struts-config.xml 中Action名称与beans-config.xml中Bean的名称要对应,Struts生成的代理对象(DelegatingActionProxy)是通过名称进行匹配和完成消息传递的。Struts2.1.6 + Spring2.5.6 + Hibern
11、ate3.3.21. 需要的jar包列表jar包名称所在位置说明antlr-2.7.6.jarhibernate/lib/required解析HQLaspectjrtspring/lib/aspectjAOPaspectjweaver.AOPcglib-nodep-2.1_3.jarspring/lib/cglib代理,二进制增强common-annotations.jarspring/lib/j2eeResourcecommons-collections-3.1.jarhibernate/lib/required集合框架commons-fileupload-1.2.1.jarstruts/l
12、ibstrutscommons-io-1.3.2struts/libstrutscommons-logging-1.1.1单独下载,删除1.0.4(struts/lib)strutsspringdom4j-1.6.1.jarhibernate/required解析xmlejb3-persistencehibernate-annotation/libEntityfreemarker-2.3.13struts/libstrutshibernate3.jarhibernatehibernate-annotationshibernate-annotation/hibernate-common-anno
13、tationshibernate-annotation/libjavassist-3.9.0.GA.jarhiberante/lib/requiredhibernatejta-1.1.jar.hibernate transactionjunit4.5mysql-ognl-2.6.11.jarstruts/libslf4j-api-1.5.8.jarhibernate/lib/requiredhibernate-logslf4j-nop-1.5.8.jarhibernate/lib/requiredspring.jarspring/diststruts2-core-2.1.6.jarstruts
14、/libxwork-2.1.2.jarstruts/libstruts2commons-dbcpspring/lib/jarkata-commonscommons-pool.jar.struts2-spring-plugin-2.1.6.jarstruts/lib2. BestPractice:a) 将这些所有的jar包保存到一个位置,使用的时候直接copy3. 步骤a) 加入jar包b) 首先整合Spring + Hibernatei. 建立对应的package1. dao / dao.impl / model / service / service.impl/ testii. 建立对应的接
15、口与类框架1. S2SH_01iii. 建立spring的配置文件(建议自己保留一份经常使用的配置文件,以后用到的时候直接copy改)iv. 建立数据库v. 加入Hibernate注解1. 在实体类上加相应注解Entity Id等2. 在beans配置文件配置对应的实体类,使之受管vi. 写dao service的实现vii. 加入Spring注解1. 在对应Service及DAO实现中加入Component,让spring对其初始化2. 在Service上加入Transactional或者使用xml方式(此处建议后者,因为更简单)3. 在DAO中注入sessionFactory4. 在Ser
16、vice中注入DAO5. 写DAO与Service的实现viii. 写测试c) 整合Struts2i. 结合点:Struts2的Action由Spring产生ii. 步骤:1. 修改web.xml加入 struts的filter2. 再加入spring的listener,这样的话,webapp一旦启动,spring容器就初始化了3. 规划struts的action和jsp展现4. 加入struts.xmla) 修改配置,由spring替代struts产生Action对象5. 修改action配置a) 把类名改为bean对象的名称,这个时候就可以使用首字母小写了b) Scope(“prototy
17、pe”)不要忘记iii. struts的读常量:1. struts-default.xml 2. struts-plugin.xml3. struts.xml4. struts.properties5. web.xmliv. 中文问题:1. Struts2.1.8已经修正,只需要改i18n.encoding = gbk2. 使用spring的characterencoding3. 需要严格注意filter的顺序4. 需要加到Struts2的filter前面v. LazyInitializationException1. OpenSessionInViewFilter2. 需要严格顺序问题3. 需要加到struts2的filter前面
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1