马士兵Spring学习笔记2011
java学习笔记---从入门到精通之路
java笔记----从菜鸟到j2se 精通j2ee的高手之路(对初学java的人有用)进来的所有人,不管你是不是懂点java皮毛,还是一窍不通的,如果你选择看完我下面的话和每天下载我的笔记代码观看学习。
那相信08年底既是属于我的成功也是属于你的成功。
对了,不屑一顾的到此可以离开了。
先说下我的学习的东西和我准备如何学习的计划。
目前手里购买了几套视频教程,删减下来最后定为两套必学的材料。
(马士兵的所有教程和 MLDN所有教程) 12月份买了些盗版光盘,细读之后安排了如下计划。
08年学习计划方案07年9月底到08年2月初,通过各类途径,以完成对j2ee各类知识的初步了解.现开始制定最终冲刺方案,该方案开始时间2月中旬,结束时间9月初.较去年vc最终方案多了2月.具体定制如下:一:4个月基础方案用1个半月时间,对11章节基础和基础相关视频一个一个复习并完成里面知识代码.同时对大量的知识点做好相应的笔记,包括本子上和电脑上的笔记.务必达到每个知识点说道就能知道,不知道也能立刻找到.注意配合 jdk5.0中文帮助使用.利用半个月时间,对在线聊天系统视频复习,做到每一个章节都能很快想到以前的知识点.如果不熟悉一定要回头复习11章节内容.坦克大战包括3部分,合理安排复习时间,以求完全精通代码流程.时间不得超过1个半月,此部分必须建立在前面两项学习稳固之后方可学习.最后半个月结合以前对图形游戏的理解,完成自我设计的,自我所能掌握的知识内的一款在线图形游戏.注:4个月时间务必做到对java 基础的全面运用,对eclipse的熟练操作,对java正式规格书写完美.二:2个半月web学习方案3到5天时间,对oracle MySQL数据库的复习,做到对简单的命令直接背下来,繁琐的命令找到帮助手册或自己写下来,以供日后使用时直接查找.10天时间,复习jsp_servlet视频,结束对eclipse使用.半个月时间学习lomboz,针对JDBC_MySQL_BBS项目.务必做到对数据库的合理运用,对tomcat合理配置,对bbs有一定的设计概念.另外半个月时间学习MyEclipse,学习bbs_2007.这段时间比较短,务必多练习多做笔记.一个月时间对shopping视频全面学习.务必完全掌握lomboz用法和AJAX运用和各类知识点. 以上所有知识点获取以尚学堂马士兵视频为主.9月初开始深入探讨各类框架运用,时间持续到年底.并完成自己最初定制的webgame项目.具体框架学习内容包括:Spring crm Hibernate Struts EJB3.0 SOA获取知识点途径:MLDN视频为主,其他视频为辅.今天是3月27号早上,抽点时间在新开的论坛写点东西和发布点笔记,同时也印证下我计划定制后的完成性。
超级全马士兵hibernate学习笔记(WORD整理版)
课程内容 (5)1 HelloWorld (5)2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping (5)3 常见的0/R框架(了解) (5)4 hibernate基础配置(重点) (5)5 ID生成策略(重点 AUTO) (5)6 Hibernate核心开发接口介绍(重点) (5)7 对象的三种状态(了解) (5)8 关系映射(重点) (5)9 Hibernate査询(HQL) (5)10 在Struts基础上继续完善BBS200 (5)11 性能优化(重点) (5)12 补充话题 (5)风格 (5)1 先脉络,后细节 (5)2 先操作,后原理 (5)3 重Annotation,轻xml配置文件 (5)资源 (5)1 http://www. (5)2 hibernate zh_CN文档 (5)3 hibernate annotation references (5)环境准备 (5)1 下载hibernate-distribution-3.3.2.GA-dist (5)2 下载hibernate-annotations-3[1].4.0.GA (5)3 注意阅读hibernate compatibility matrix(hibernate 网站download) (5)4 下载slf4jl.5.8 (6)Hibernate HelloWorld (6)1 建立新java 项目,名为hibernate_0100_HelloWorld (6)2 学习建User-library-hibernate,并加入相应的jar包 (6)3 引入mysql的JDBC驱动包 (6)4 在mysql中建立对应的数据库以及表 (6)5 建立hibernate 配置文件hibernate.cfg.xml (6)6 建立Student 类 (6)7 建立Student 映射文件 Student.hbm.xml (6)8 将映射文件加入到hibernate.cfg.xml中 (6)9 写测试类Main,在Main中对Student对象进行直接的存储测试 (6)10 FAQ: (6)11 Note: (6)12 建立能力 (7)建立 Annotation 版本的 HelloWorld (7)1 创建teacher 表,create table teacher (id int primary key, name varhcar(20), title varchar(lO)); (7)2 创建Teacher 类 (7)3 在hibernate lib 中加入annotation的jar包 (7)4 参考Annotaion文档建立对应的注解 (7)5 在hibernate.cfg.xml中建立映射<mapping class:.../〉 .. (7)6 参考文裆进行测试(注意文裆中缺少configure()的小bug) (7)7 FAQ: @不给提示 (7)What is and Why 0/R Mapping (7)1 JDBC操作数据库很繁琐 (7)2 Sql语句编写并不是面向对象的 (7)3 可以在对象和关系表之间建立关联来简化编程 (7)4 0/R Mapping 简化编程 (7)5 0/R Mapping跨越数据库平台 (7)6 Hibernate_0200_OR_Mapping_Simulation (7)0/R Mapping Frameworks (7)1 hibernate (7)2 toplink (8)3 jdo (8)4 JPA (8)Hibernate基础配置 (8)1 对应项目:Hibernate_0300_BasicConfiguration (8)2 介绍MSQL的图形化客户端 (8)3 hibernate.cfg.xml: hbni2ddl.auto (8)4 搭建日志环境并配置显示DDL语句 (8)5 搭建jUnit环境 (8)6 hibernate.cfg.xml:show_sql (8)7 hibernate.cfg.xml:format_sql (8)8 表名和类名不同,对表名进行配置 (8)9 字段名和属性相同 (8)10 字段名和属性名不同 (8)11 不需要psersistence的字段(不用列) (8)12 映射日期与时间类型,指定时间精度 (8)13 映射枚举类型( 比较少用) (9)14 字段映射的位置(field或者get方法) (9)15 @Lob (9)16 课外:CLOBBLOB类型的数据存取 (9)17 课外:Hibernate自定义数据类型 (9)18 hibernate 类型 (9)ID生成策略 (9)1 对应项目:hibernate_0400_ID (9)2 注意: (9)3 xml生成id (9)4 注解方式:@GeneratedValue (9)5 FAQ; (10)6 联合主键 (10)核心幵发接口介绍 (12)1 hibernate_0500_CoreAPI (12)2 Hibernate API文档需要单独下载 (12)3 Configuration (12)4 SessoinFactor (12)5 Session (12)6 SchemaExport (自动建表) (13)7 Query 接口 (13)8 Note: (13)三种对象状态 (14)1 上一个 project (14)2 三种状态的区分关键在于 (14)3 三种状态: (14)4 对这三种状态需要关注的问题是在该状态下如果进行数据库的操作会发生什么结果,比如改变属性的 (14)关系映射(重要) (15)对象之间的关系 (15)1 这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于 (15)2 简化问题: (15)3 —对一 (15)4 —对多 (15)5 组件映射 (15)一对一关联 (16)1 一对一单向外键关联 (16)2 一对一双向外键关联 (16)3 一对一单向主键关联(不重要) (17)4 一对一双向主键关联(不重要) (17)5 联合主键 (17)组件映射 (17)1 项目:hibernate_1100_component (17)2 对象关系:一个对象是另外一个对象的一部分 (17)3 数据库表:一张表 (17)4 annotation: @ Embeddable @Embbeded (17)5 xml: 使用<component,例如: (18)多对一与一对多 (18)1 多对一单向关联 (18)2 一对多单向关联 (19)3 一对多(多对一)双向关联 (19)多对多 (20)1 单向关联: (20)2 双向关联: (21)关联关系中的CRUD_Cascade_Fetch (21)1 hibernate_1700_one2many_many2one_bi_crud (21)2 设定cascade以设定在持久化时对于关联对象的操作(CUD,R归Fetch管) (21)3 cascade仅仅是帮我们省了编程的麻烦而已,不要把它的作用看的太大 (21)4 铁律:双向关系在程序中要设定双向关联 (22)5 铁律:双向mappedBy (22)6 fetch (22)7 Update时@ManyToOne()中的cascade参数关系 (22)8 Delete时@ManyToOne()中的cascade关系 (22)9 O/RMapping 编程模型 (23)10 要想删除或者更新先做load,除了精确知道ID之外 (23)11 如果想消除关联关系,先设定关系为null.再删除对应记录,如果不删记录,该记录变成垃圾数据 (23)12 练习:多对多的CRUD (23)关系映射总结 (24)1 什么样的关系,设计什么样的表,进行什么样的映射 (24)2 CRUD,按照自然的理解即可(动手测试) (24)集合映射(不太重要) (24)1 项目名称:hibernate_1800_Collections_Mapping (24)2 Set (24)3 List (与Set差不多多个@OrderBy) (24)4 Map (24)继承映射(不太重要) (24)1 三种方式 (24)作业: (24)1 学生课程、分数的设计(重要) (24)2 设计: (25)3 树状结构的设计(至关重要) (25)Hibernate 查询(Query Language) (26)HQL vs EJBQL (26)1 NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)" 262 总结:QL应该和导航关系结合,共同为査询提供服务。
马士兵vip课笔记
马士兵vip课笔记
马士兵VIP课笔记
1. 课程概述
马士兵的VIP课程是一个全面的编程培训项目,涵盖了从基础到高级的各类编程知识和技能。
该课程强调实战编程,注重培养学员的实际项目开发能力。
通过学习此课程,学员可以掌握多种编程语言和技术,为未来的职业发展打下坚实的基础。
2. 课程内容
•基础概念:课程首先介绍了编程的基本概念,如变量、数据类型、控制结构等。
•面向对象编程:深入探讨了面向对象编程的概念,包括类、对象、继承和多态等。
•高级编程技术:涵盖了如泛型、反射、异步编程等高级编程技术。
•框架与库:介绍了多个主流的编程框架和库,如Spring、Django等。
•实战项目:课程以多个实战项目作为结尾,让学员在实际操作中巩固所学知识。
3. 课程特色
•实战导向:课程强调实战编程,注重培养学员解决实际问题的能力。
•内容全面:课程内容涵盖了从基础到高级的各类编程知识和技能,满足不同层次学员的需求。
•互动性强:课程中设置有多个互动环节,鼓励学员与老师和同学进
行交流和讨论。
•社区支持:提供了一个强大的社区支持,学员可以在社区中寻求帮助和分享经验。
4. 总结
马士兵的VIP课程是一个非常全面且实战导向的编程培训项目。
通过学习此课程,学员可以系统地掌握编程知识和技能,为未来的职业发展打下坚实的基础。
如果你是一位编程爱好者或者想要在编程领域有所建树,那么这门课程是你不容错过的选择。
尚学堂-马士兵Struts2教学视频之Struts2 学习笔记
Struts2 学习笔记---wjt276 [二○一○年一月五日完]目录01 Struts2-Action (5)一、Struts作用: (5)二、搭建Struts2的运行环境: (5)三、Namespace (6)四、<package>标签 (6)五、Action (6)六、路径问题的说明 (8)七、Action的动态调用方法 (8)八、Action通配符(wildcard)的配置 (9)九、Action的属性接收参数 (10)1、在Action添加成员属性接受参数 (10)2、域模型(Domain Model) (10)3、ModelDriven接收参数 (11)十、Action属性接收参数中文问题 (12)十一、简单数据验证 (12)十二、访问Web元素 (14)一、方法一:ActionContext方式 (15)二、方式二:Ioc(控制反转)—推荐使用 (15)三、方式三:获取原类型 (16)四、方式四:获取原类型-控制反转 (17)十三、Struts2配置文件模块化包含(include) (17)十四、默认的Action (18)十五、Action总结 (18)02 Struts2-Result (19)一、Result类型 (type) (19)二、全局结果集(Globle Result) (20)三、动态的结果集(dynamic result) (21)四、带参数的结果集 (21)五、Result总结 (22)六、项目经理: (22)03 OGNL表达式语言 (23)04 Struts2-Tags (28)Struts2标签目录 (28)一、property标签 (28)二、set标签 (29)三、bean标签 (29)四、<include>标签-少使用 (29)五、If elseif else (30)六、Iterator标签 (31)七、Theme (31)05设计约定(编码规定) (32)06 项目开发顺序 (32)07 声明式异常处理 (33)08 国际化 (35)一、国际化资源文件 (35)二、Java国际化 (35)Struts学习笔记第3页共39页三、Struts2国际化 (35)1、Action级别 (35)2、Package级别 (36)3、Application级别 (36)四、资源文件中的参数处理 (37)五、国际化-动态语言切换 (37)09 自定义拦截器 (38)10 类型转换 (38)Struts2总结 (39)目录Action⏹简单数据校验Result常用配置文件OGNL & ValueStackTags---------------------Project⏹类型转换、上传与下载、interceptor、防止重复提交 MVC思想深入剖析源码解读其他话题01 Struts2-Action一、Struts作用:将请求与结果分开二、搭建Struts2的运行环境:1、建立Web项目;2、建立Struts2的配置文件(struts.xml);将Struts2的空项目中的配置文件(struts.xml)复制到项目的src目录下。
Spring学习笔记
Spring笔记SPRING笔记 (1)第一章SPRING简介 (3)一、S PRING是什么? (3)1、Spring是一个开源的用于简化采用Java语言开发企业级程序的一个分层的框架 (3)2、分层结构: (3)3、Spring源代码是公开的,但是非标准的 (4)二、S PRING的优点 (4)1、采用J2EE开发存在的问题: (4)2、为什么要使用Spring (4)三、S PRING的组成 (5)第二章SPRING的IOC (5)一、I O C的概念 (5)二、I O C的分类 (6)三、装配介绍 (6)1、Spring容器 (6)2、Spring开发要用到的JAR文件 (7)四、基本装配 (7)1、set方式注入 (7)1)注入简单属性(String和8中基本类型) (7)2)注入对象 (9)3)注入集合类型 (9)2、构造器方式装配(constructor注入) (11)3、比较set和构造注入方式 (11)五、复杂装配 (11)1、工厂方式装配 (11)1)静态工厂方式装配 (11)2)实例工厂方式装配 (12)2、自动装配(Autowring Properties) (12)3、bean的定义的继承 (13)4、bean的依赖关系检查 (13)5、scope (14)六、B EAN的生命周期 (14)1、步骤 (14)2、接口介绍 (15)七、事件处理 (16)1、事件监听原理 (16)2、编程步骤 (16)第三章SPRING的AOP (17)一、AOP的概念 (17)1、什么是AOP (17)2、AOP编程的好处 (17)二、AOP相关概念 (17)三、AOP基本原理 (18)四、S PRING的通知(具体的业务逻辑) (18)1、Spring的通知类型 (18)五、切入点(P OINTCUT) (20)1、pointcut (20)接口Pointcut:org.springframework.aop.Pointcut (20)接口Classfilter:org.springframework.aop.ClassFilter (20)接口MethodMather:org.springframework.aop.MethodMatcher (21)接口Advisor:org.springframework.aop.PointcutAdvisor (21)2、预定义切入点 (22)1)静态切入点: (22)2)动态切入点: (24)3)切入点的交叉与合并: (24)4)Introduction(非重点,严重影响性能,慢5到10倍) (24)六、自动代理 (25)1、使用BeanNameAutoProxyCreator进行自动代理 (25)2、DefaultAdvisorAutoProxyCreator (25)第四章SPRING对持久层的支持 (26)一、S PRING对持久层支持采用的策略: (26)二、S PRING对JDBC的支持 (26)Step 1: 配置数据源 (26)方式一:采用Spring内置的数据源(测试用,性能不高) (26)方式二:采用开源数据库产品如DBCP (27)方式三:直接使用容器提供的数据源(如Tomcat,Weblogic,SunAppServer) (27)Step 2: 配置JdbcTemplate模板类(封装了绝大多数数据库操作) (28)Step 3: 配置DAO (28)Step 4: 配置Service (28)三、S PRING对H IBERNATE的支持 (28)Step1:配置数据源 (28)Step2:配置sessionfactory (28)Step3:配置DAO (29)第五章SPRING对事务的支持 (29)一、事务的概念 (29)二、S PRING的事务机制 (29)三、S PRING事务编程 (30)1、整体介绍 (30)2、Spring声明式事务的编程 (30)3、Spring中事务的使用 (32)四、S PRING事务与EJB事务 (33)第六章框架整合 (33)一、SSH (33)二、S PRING与S TRUTS整合 (34)1、前提: (34)2、加载Spring方式: (34)1)采用ContextLoaderListener来创建ApplicationContext: (34)2)采用ContextLoaderPlugIn来创建ApplicationContext (34)3、集成方案 (34)方案一:通过Spring的ActionSupport类 (34)方式二:通过Spring的DelegatingActionProxy类 (35)方式三:通过Spring的DelegatingRequestProcessor类 (35)三、关于S PRING与EJB (36)第一章Spring简介spring in actionspring 技术手册▲精通Spring2.x企业级开发陈雄华一、Spring是什么?1、Spring是一个开源的用于简化企业级开发的分层框架2、分层结构:接口接口表示层业务层持久层域层1)Presentation layer(表示层)(1) 表示逻辑(生成界面代码)(2) 接收请求(3) 处理业务层抛出的异常(4) 负责规则验证(数据格式,数据非空等)(5) 流程控制2)Service layer(服务层/业务层)(1) 封装业务逻辑处理,并且对外暴露接口(2) 负责事务,安全等服务以及数据访问逻辑3)Persistence layer(持久层)提供透明的数据访问和接口(1) 封装数据访问的逻辑,暴露接口(2) 提供方便的数据访问的方案(查询语言,API,映射机制等)4)Domain layer(域层)域层就是一堆实体的集合,包括实体的关系。
尚学堂马士兵j2se学习笔记
(3)面向对象考虑问题的3步 (3)THIS关键字 (3)STATIC关键字(STATIC变量存放在内存中的DATA SEG中) (3)PACKAGE 关键字 (3)访问控制 (3)方法的重写 (3)S UPER关键字 (4)继承中的构造方法 (4)对象转型 (4)多态的3个必要条件 (4)动态绑定 (4)抽象类ABSTRACT (4)F INAL关键字 (4)接口 (5)5异常分类 (5)异常的捕获和处理 (5)THROW和THROWS的区别 (6)6二维数组 (6)7 S TRING B UFFER和S TRING的区别 (7)7I TERA TOR接口 (7)S ET接口 (7)L IST接口 (8)C OMPARABLE接口 (8)读的效率和写的效率 (8)M AP接口 (8)A UTO BOXING/UNBOXING(JDK1.5) (9) (9)处理流 (9)缓冲流 (9)转换流 (9)数据流 (9)Object流 (10)10线程的概念 (10)线程控制基本方法 (10)sleep方法 (10)join方法 (10)yield方法 (10)synchronized 关键字:可修饰方法,执行过程中锁定当前对象 (10)sleep()和wait()的区别 (10)notify()/notifyAll() (11)叫醒当前wait()的线程 (11) (11)TCP协议和UDP协议 (11)S OCKET (11)C OMPONENT (12)C ONTAINER (12)F RAME (12)布局管理器 (12)内部类 (13)G RAPHIC 类 (13)鼠标事件适配器 (13)W INDOW 事件 (13)匿名类 (13)swith 语句,每一条情况最后都需加break,否则会穿透。
多个case可以合并到一起Java中swith语句只能探测int类型(包括可以转换成int的类型)Return语句终止方法的运行并指定要返回的数据面向对象考虑问题的3步1.由哪些类,哪些对象构成2.这些类各自有哪些属性3.这些类之间有什么联系this关键字◆在类的方法定义中使用的this关键字代表使用该方法的对象的引用。
spring培训学习笔记
s Spring培训学习笔记spring概述.................................................. 错误!未定义书签。
控制反转,还是依赖注入................................... 错误!未定义书签。
面向方面编程............................................. 错误!未定义书签。
一致性抽象............................................... 错误!未定义书签。
事务管理................................................. 错误!未定义书签。
测试..................................................... 错误!未定义书签。
与其它框架整合........................................... 错误!未定义书签。
控制反转..................................................... 错误!未定义书签。
容器(container) .......................................... 错误!未定义书签。
IoC类型................................................. 错误!未定义书签。
IoC in spring ............................................ 错误!未定义书签。
DI with spring ........................................... 错误!未定义书签。
AOP ......................................................... 错误!未定义书签。
Spring课堂笔记讲解
第一篇:Spring概述1、Spring框架内核IoC(Inverse Of Control):反转控制。
AOP(Aspect Oriented Programming):面向切面编程。
2、Spring的体系结构3、Spring开发所需的资源第二篇:Spring核心之IoC(控制反转)1、拷贝核心jar包:2、IoC的概念:3、资源交给Spring管理3.1建立spring的配置文件:a、schema约束文档资料位置b、schema引入后xml没有提示的解决方案c、把DAO实现交给Spring容器(Map结构)管理a、把核心jar包加入到classpath中b、启动Spring容器4、依赖注入:DI(Dependency Injection)5、Spring核心类或接口核心接口:ApplicationContextClassPathXmlApplicationContext:加载位于classpath中的spring配置文件。
FileSystemXmlApplicationContext:加载位于本地磁盘上的spring配置文件。
了解:BeanFactory和ApplicationContext获取Bean的区别6、Bean的初始化●方式一:使用默认的构造方法。
(推荐,重点)注意:Bean要有默认的构造方法●方式二:静态工厂方法初始化(遗留老系统)●方式三:实例工厂方法初始化(遗留老系统)7、bean的存活范围<bean的scope属性>:取值:singlton(默认值):单例的。
在spring容器中实例只有一个。
prototype:非单例的。
用的时候都会创建新的对象。
request:请求范围。
(只能用在web环境下)session:会话范围。
(只能用在web环境下)8、bean的生命周期有关配置注意:9、依赖注入:重点9.1通过构造方法注入9.2setter属性注入:重点9.3p名称空间:9.4SpEL:Spring Expression Language9.5注入数组或集合10、团队开发按模块编写spring配置文件。
尚学堂科技 马士兵 Struts 学习小结 v
2)必须勾选“Copy projects into workspace”
3) 唯一可能出现的问题:拷贝项目的 JRE System Library 的存储路径,重新 Configure Build Path 即可 建立第 3 个 Struts2 小项目:Struts2_0300_Action 1、关于 Action 的详述 1)<action> 如果不包含 class 属性,则会自动默认调用
/Struts2_0100_Introduction/WebRoot/WEB-INF/lib 目录 3. 修改 web.xml 文件如下(从 struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\web.xml 拷贝 的):
4. 修改 struts.xml 文件如下:
%> <head> <!-- 设置base标签,当前页面的所有超链接前面都会自动加上basePath --> <base href="<%=basePath%>" /> </head> <body> <a href="index.jsp">index.jsp</a> </body>
建立第 5 个 Struts2 小项目:Struts2_0500_ActionMethod 1、可以为 Action 指定 method 属性,而 class 属性的类 UserAction 中只有一个 add ()方法
建立第 1 个 Struts2 小项目:Struts2_0100_Introduction 1. 拷贝 struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\classes\struts.xml 至项目的源文件夹
马士兵-J2SE第二章-基础语法-个人笔记
马士兵-J2SE第二章-基础语法-个人笔记第二章基础语法一、标识符1.J ava对各种变量、方法和类等要素命名时使用的字符序列成为标识符。
2.命名规则:a)以一个字母、下划线(_)或美元符号($)开始b)由一个字母、下划线(_)或美元符号($)或数字组成c)是大小写区别对待的, 且无最大长度二、关键字关键字对Java技术编译器有特殊的含义,它们可标识数据类型名或程序构造(construct)名。
表2-1列出了使用在Java编程语言中的关键字。
abstract do implements private throwboolean double import protected throwsbreak else instanceof public transientbyte extends int return truecase false interface short trycatch final long static voidvolatileclass float new switch whilecontinue for null synchronizeddefault if package this三、常量a)J ava的常量值用字符窜表示,区分为不同的数据类型i.整形:39实型3.14 字符常量’a’字符串常量:”hellworld”四、变量a)是程序中最基本的存储单元,包括变量类名,变量类型和作用域b)每个变量都属于特定的数据类型,使用前必须声明,让后赋值,才能使用c)程序执行过程重要!!!01_标识符_关键字_数据类型_1.avi五、变量分类a)按被声明的位置:i.局部变量:方法或语句块内部(方法的参数叫局部变量)(小)ii.成员变量:方法外部、类的内部(大)iii.注意:类外面(与类对应的大括号外面)不能有变量的声明b)按所属的数据类型:i.基本数据类型变量ii.引用数据类型变量六、数据类型划分 4类8种1.b oolean只取true或false2.c har 字符型(单引号),采用Unicode编码,每个字符占两个字节(可以用十六进制编码形式表示);a)c har c1 = ‘\u0061’;b)c har c2=’\n’; 转移字符’\’3.整数型:有固定的表数范围和字段长度a)十进制 12c)十六进制要求0X或0x开头 0x12d)默认为int型i.4.浮点型:有固定的表数范围和字段长度a)十进制 3.14b)科学计数法:2.14e2c)默认为double 要声明float 必须在数字后面加f或者Ffloat f = 12.3fd)七、基本数据类型转换a)b oolean类型不可以转换为其他数据类型,其他类型也不能转换为booleanb)整形,字符型,浮点型的数据在混合运算中相互转换:i.容量小的自动变为大的,byte,short,char->int->long->float->doubleii.byte,short,char之间不能转哈,先转换为intc)容量大的变为小的时,要加上强制转换符,会造成精度降低d)多种类型数据混合运算,系统先将所有数据自动转换为最大的那中,然后计算例子TestConvert.java TestConvert2.java八、格式a)大括号对齐b)遇到{缩进,Tab / Shift + Tabc)程序块之间加空行d)并排语句之间加空格e)运算符两侧加空格i.有特定条件f){前面有空格g)成对编程九、运算符a)算术:+ , - , * , / , % , ++ , --c)逻辑: ! , & , | , ^ , && , ||d)位: & , | , ^ , ~ , >> , << , >>>e)赋值 : =f)扩展赋值: += , -= , *= , /=g)字符串连接: +1.++(--)在后时先取值在运算2.++(--)在前时先运算后取值inti1=1,i22; ii.inti=(i2++); iii.i1++2i) iv.则:i=2i2=22=223.逻辑运算符i. ! 非 , & 与 , | 或 , ^ 异或 , && 短路与 , || 短路或ii.4.赋值运算与扩展赋值运算5.字符串连接: +i.对字符串进行连接ii.+ 运算符两侧的操作数中只要有一个是字符串(String ) 系统会自动将一个操作数转换为字符串iii.当打印时,无论什么类型,都自动转换为字符串进行打印十、表达式a)符合一定语法规则的运算符和操作数的序列b)顺序:按照运算符的优先级从高到低,优先级相同的,按照事先约定的结合方向进行。
spring框架案例学习文档笔记
目录第一课:面向抽象编程 ....................................................................................... 3 第二课:Jdom 的基本使用 ..................................................................................... 3 第三课:模拟Spring 功能 .................................................................................... 4 第四课:搭建sping 的运行环境 . (7)一、 建立一个新的项目 ............................................................................. 7 二、 建立spring 的配置文件 ......................................................................... 7 三、 引入spring 的jar 包........................................................................... 7 四、 测试代码: ................................................................................... 7 五、 注意接口的使用: ............................................................................. 7 第五课:IOC(DI)配置及应用 . (8)一、 什么是IOC 、DI ................................................................................ 8 二、 编辑xml 文件时,没有提示 ...................................................................... 8 三、注入类型(Injecting dependencies) (8)(一) setter 注入类型Setter Injection .......................................................... 8 (二) 构造方法Constructor Injection (9)四、 id 、name .................................................................................... 10 五、 简单属性的注入 .............................................................................. 10 六、 Bean 的作用范围scope ......................................................................... 11 七、 集合注入 .................................................................................... 11 八、自动装配autowire (12)(一) byName .................................................................................. 12 (二) byType .................................................................................. 13 (三) 注意 .................................................................................... 13 九、生命周期 (14)(一) lazy-init/default-lazy-init ............................................................. 14 (二) init-method destroy-method 不要和prototype 一起用(了解) . (14)第六课:annotation 方式Spring (15)一、 开始使用annotation 配置Spring ............................................................... 15 二、@Autowired 、@Qualifier (15)(一) @Autowired .............................................................................. 15 (二) @Qualifier .............................................................................. 16 三、@Resource(重要、推荐) (16)(一) JSR-250 ................................................................................. 16 (二) @Resource . (16)四、 @Componet ................................................................................... 17 五、 @Scope 、@PostConstruct 、@PreDestroy .......................................................... 18 六、注解对应的jar 包 (18)第七课:AOP(面向切面编程) ..........................一、 AOP 概念 .............................二、 利用动态代理实现面向切面编程 19第八课:Spring AOP 配置选项 ........................一、 AOP 配置annotation 方式 ..............(一) 搭建annotation 开发环境 20(二)aspectJ 类库 .....................(三) AOP 的annotation 实例 ............(四)AspectJ 的专业术语 ...............Spring –SSH 整合 学习笔记---wjt276[2010-05-14](五) 织入点语法 (22)(六) Advice (23)(七) Pointcut (25)(八) annotatin方式的AOP实例 (25)二、AOP配置xml方式 (26)三、AOP实现动态代理注意 (27)第九课:DataSource (27)一、Sping配置数据源: (27)二、注入使用 (28)三、dbcp.BasicDataSource (28)第十课 Spring整合Hiberante3 (29)一、Spring配置hibernate3的SessionFactory (29)(一) xml形式的SessionFactory (29)(二) annotation注解方式的SessionFactory (29)二、引入hibernate所需要使用的jar (30)(一) 基本jar (30)(二) 加入annotation功能的jar包 (30)(三) 搭建日志环境并配置显示DDL语句jar包 (30)三、Spring整合hibernate3事务 (30)(一) Annotation注解方式配置事务管理 (30)(二) Spring事务选项 (34)(三) XML文件形式配置Spring事务管理 (36)四、HibernateTemplate (37)(一) HibernateTemplate (37)(二) HibernateDaoSupport (38)第十一课:Spring整合-SSH (39)一、第一步:加入jar包(需要的jar包列表) (39)二、第二步:首先整合Spring + Hibernate (40)三、第三步:再来整合Struts2 (40)四、struts的读常量: (42)第十二课:DTO、VO (42)一、DTO (42)二、VO (42)第十二课:SSH整合存在的问题 (42)一、Jsp中访问Session时,Session已经关闭 (42)二、如果不配置事务,openSessionView出现异常 (43)三、中文乱码问题: (43)第十三课:SSH整合的jar包 (44)一、Struts2 (44)二、Hibernate3.3.2 (44)三、Spring (45)第一课:面向抽象编程原来什么类都是写死的,现在是先建立一个大的标准,然后再各个实体类来实现他们的功能,然后在调用的时候,使用这个标准调用,这样,你们那个来都可以被调用。
马 士兵_J2SE第 三章_面 向对象编 程_个人学习笔记
第三章. 第四章. 第五章. 第六章. 第七章. 面向对象编程一、 面向对象编程思想:从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式面向对象更加强调运用人类在日常的思维逻辑中经常才赢的思想方法与原则,如抽象分类,继承,聚合,多态二、 对象和类的概念1. 对象用计算机语言对问题域中食物的描述,对象通过“属性(attribute)”和“方法(method)”来分别对应事物所具有的静态属性和动态属性对象是属性(成员变量)和方法的集合。
{一类事物的具体的某一个东西(符合这类事物的具体特征的某个东西)叫对象}2. 类是同种对象的集合与抽象,类中定义了这一类对象所应具有的静态和动态属性。
关系:类可以看成一类对象的模板,对象可以看成该类的一个具体实例,瓶子是一个类,某个瓶子就是对象三、 面向对象设计思想和步骤:(1) 分析问题中有哪些类那些对象(2) 分析这些对象中应该具有的属性和方法 (3) 分析类与类之间的关系 四、 Java 与面向对象1. 对象是Java 程序的核心,在java 程序中“万事万物皆对象”。
2. 对象可以看成静态属性(成员变量)和动态属性(方法)的封装体3. 类是用来创建统一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法4.J2SDK提供了很多类供编程人员使用,编程人员也可以自定义自己的类五、Java类的定义类的定义主要由成员变量和方法组成例如:public int getAge( ) { return age ;}public class Person {int id;int age = 20;void Person(int _id, int _age) {id = _id;age = _age;}public static void main(String[] args) {Person tom = new Person();tom.Person(1, 25);//Person jerry = new Person();Point p = new Point();}}class Point {Point() {}int x;int y;}六、成员变量成员变量可以使用java语言中任何一种数据类型(包括基本类型和引用类型),作用范围为整个类体注意: 局部变量必须赋初试值才可以使用成员变量不用初始化,java系统会给你赋初始值Byte,short,int----->0Long ----->0Lchar ----->’\u0000’float ----->0.0Fdouble ----->0.0Dbloolean ----->false所有引用类型----->Null七、引用类型(C中的指针,占两块内存)除了java语言中基本类型以外的变量类型Java中的对象是通过引用对其操作的内存值/* 声明string类型的引用变量,但是没使它指向一个对象*/String s null/* 使用new语句创建一个String类型的对象并用S 指向它,以后可以通过S 完成对其的操作*/ S = new String (“hello world!”); 0X3a123b如何在内存中区分类和对象? 类是静态的概念,代码区独享是new 出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存 八、 对象的创建和使用1. 必须使用new 关键字创建对象2. 使用:对象(引用) .队员变量 来引用对象的成员变量3. 使用:对象(引用).方法(参数列表)来调用对象的方法4. 同一对象的每个对象有不同的成员变变量存储空间5. 同一类的每个对象共享该类的方法 九、 Java 的方法定义[修饰符1 修饰符2 …..] 返回值类型 方法名( 形式参数列表 ){Java 语句;… … … }1.形式参数:在方法被调用时用于接收外界输入的数据。
spring笔记
客户端发起请求→中央控制器(DispatcherServlet)→控制类→返回model(不一定指model)到中央控制器→
view→返回到中央控制器→响应客户端
六、Spring Web MVC框架的有那些特点?
1.清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command object)、表单对象
(form object)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、 处理器映射
(handler mapping)、视图解析器(view resolver)等等. 每一个角色都可以由一个专门的对象来实现.
2.强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,
2、读取bean的配置并且实例化
3、注入
常用的3种方式获得Spring容器:
1.ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息.
2.FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息.
4.可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类.
5.可定制的绑定(binding)和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错
误的值.再比如本地化的日期和数字绑定等等.在其他某些框架中,你只能使用字符串表单对象, 需要手动解析
Spring Core:Spring的基石,提供了Spring的最主要的核心机制:控制反转和依赖注入
Spring学习笔记
Spring学习笔记Java相关课程系列笔记之十五笔记内容说明Spring(梁建全老师主讲,占笔记内容100%);目录一、Spring概述 (1)1.1 Spring框架的作用 (1)1.2 Spring框架的优点 (1)1.3 Spring框架的容器 (1)二、Spring容器的基本应用 (2)2.1如何将一个Bean组件交给Spring容器 (2)2.2如何获取Spring容器对象和Bean对象 (2)2.3如何控制对象创建的模式 (2)2.4 Bean对象创建的时机 (2)2.5为Bean对象执行初始化和销毁方法 (2)2.6案例:Spring框架的使用以及 2.1节-2.5节整合测试 (3)三、Spring框架IoC特性 (5)3.1 IoC概念 (5)3.2 DI概念 (5)3.3案例:测试IoC(set注入) (5)3.4案例:测试IoC(构造注入) (6)3.5案例:不用JDBC访问数据库,而是采用Hibernate访问 (6)四、Spring中各种类型的数据注入 (7)4.1 Bean对象注入 (7)4.2基本数据的注入 (7)4.3集合的注入 (7)4.4案例:各类数据注入 (7)五、AOP概念 (10)5.1什么是AOP (10)5.2 AOP和OOP的区别 (10)5.3 AOP相关术语 (10)5.4案例:AOP的使用,模拟某些组件需要记录日志的功能 (11)5.5通知类型 (11)5.6切入点 (12)5.7案例:环绕通知,修改 5.4案例使之动态显示所执行的操作 (12)5.8案例:利用AOP实现异常处理,将异常信息写入文件 (13)六、Log4j日志记录工具 (14)6.1 Log4j介绍 (14)6.2 Log4j的使用 (14)6.3案例:修改 5.8案例,使用Log4j记录日志 (15)七、Spring注解配置 (16)7.1组件扫描功能 (16)7.2组件扫描的使用方法 (16)7.3注入注解标记使用方法 (17)7.4 AOP注解标记使用方法 (17)八、Spring对数据访问技术的支持 (19)8.1 Spring提供了统一的异常处理类型 (19)8.2 Spring提供了编写DAO的支持类 (19)8.3 Spring提供了声明式事务管理方法 (19)8.4 Spring框架如何使用JDBC技术 (19)8.5连接池优点 (22)8.6 Spring框架如何使用Hibernate技术 (22)8.7 Spring+Hibernate如何使用Session、Query等对象 (25)8.8 Spring框架和Struts2整合应用 (25)8.9案例:采用SSH结构重构资费管理模块 (27)九、整合开发包 struts-spring-plugin.jar (32)9.1 Struts2创建对象的方式 (32)9.2 struts-spring-pligin.jar创建对象的方式 (32)9.3 struts-spring-plugin.jar的内部实现 (32)9.4原理图 1 (32)9.5原理图 2 (33)9.6注意事项 (33)9.7注入规则 (33)十、Spring的事务管理 (34)10.1声明式事务管理(基于配置方式实现事务控制) (34)10.2编程式事务管理(基于Java编程实现事务控制),不推荐用! (35)10.3 Spring中常用的事务类型 (35)十一、Spring的MVC (37)11.1 Spring MVC的体系结构 (37)11.2 Spring MVC的工作流程 (37)11.3案例:简易登录(基于XML配置,不推荐使用) (37)11.4案例:修改11.3案例(基于注解配置,推荐使用) (39)十二、其他注意事项 (41)12.1 Spring的核心模块 (41)12.2表单中action属性的相对、绝对路径问题 (41)12.3用SSH重构NetCTOSS项目模块的步骤 (41)一、Spring概述我们学习Spring框架的最终目的是用它整合Struts2、Hibernate框架(SSH)。
Spring笔记
Spring 学习笔记1.Spring的技术核心?。
Spring 是一个开源的:控制反转(Inversion of control )IOC ,依赖注入(Dependency Injection )和面向切面(Aop)的框架,它主要的目的是简化企业的开发。
2.控制反转?所谓控制反转就是:应用本身不负责依赖对象的创建与维护,依赖对象的创建与维护是有外部容器负责的。
这样控制权就有应用转向了外部容器,控制权的转移就是所谓的控制反转。
3.依赖注入?所谓依赖注入就是指:在运行期由外部容器动态的将依赖对象注入到组件中。
4 .为什么要使用Spring 呢?<a>可以降低组件之间的耦合度,实现软件各层之间的解耦;Control----→Service----→DAO<b>使用Spring 容器可以使用它提供的众多服务:事务管理服务,JMS服务,Spring Core服务,持久化服务,其它......事务管理:不需要手工控制事物<c>容器提供单利模式支持;<d>容器提供了AOP技术,利用它很容易实现如:权限拦截,运行期监控等功能。
<e>容器提供了很多的辅助类,使用这些类能够加快应用的开发,如:Jdbc Template,Hibernate Template 。
<f>Spring对主流的应用框架提供了支持如:Hibernate ,JPA , Struts.等。
4.实例化Spring 容器?两种方式A : 在类路径下寻找配置文件来实例化Spring容器。
ApplicationContext ctx = new ClassPathXmlApplicationContext(“config-path”);B:在文件系统路径下寻找配置文件来实例化Spring 容器;ApplicationContext ctx = new FileSystemXmlApplicationContext(“d:\\bean.xml”);注:第二种方式通常在本地测试时用,因为每个应用的配置在不同机器上会不同。
Spring学习笔记
第一章 Spring概述1、轻量级框架1)框架:Hibernate、Struts、Spring1. Struts:web层的框架2. Hibernate:持久层的框架3. Spring:综合框架;2)SSH:Struts + Spring + Hibernate 三个框架的集成2、EJB1)使用EJB的好处:1. 分布式处理2. 对象的生命周期都是由EJB容器来管理的3. 可以通过声明的方式使用容器提供的服务(比如事务服务)Spring可以提供声明型事务,引用了EJB的事务特性。
2)EJB3.0的思想:1. IOC:依赖注入2. AOP:拦截器、FilterSpring也具有这两大思想。
3、Sping的主要内容:1)IOC(Inversion of Control,控制反转):提供依赖注入。
2)AOP(Aspect-Oriented Programming,面向方面编程):解决非业务逻辑功能的实现。
3)事务和数据访问4)SSH4、Sping提供了一个轻量级容器:IOC容器1)管理javabean对象的生命周期2)维护对象跟对象之间的依赖关系 ===> 依赖注入重量级容器与轻量级容器的比较:1. 重量级容器通常可以独立运行;轻量级容器通常不能独立运行,必须依赖其他容器。
2. 重量级容器包含的服务大而全,所有应用的服务都必须购买;轻量级容器包含的服务可以由开发人员自己选择。
3. 重量级容器直接管理线程调度;轻量级容器不关注线程调度问题。
5、为什么使用Sping?1)提供依赖注入(通过依赖注入的方式组装对象),使得开发的系统中的组件之间的耦合性降低(松耦合);2)不使用J2EE中的技术,也可以通过声明的方式来获得一些服务;3)spring是一个扩展性非常强的框架,很容易跟其他的框架进行集成,而且可以简化被集成的框架的使用。
6、Spring的特点:1)在spring框架中,把checked类型的异常全部转变为unchecked类型;2)spring框架包含了很多的模块,我们可以只使用spring提供的一个或者几个模块;3)采用spring开发的应用扩展性非常的好,而且开发出来的类都是可重用的。
最全面的Spring学习笔记
最全⾯的Spring学习笔记致⼒于提供⼀种⽅法管理你的业务对象。
在⼤量Java EE的应⽤中,随处可见Spring。
今天我将简单的介绍⼀下Spring这个框架。
本⽂适合读者:想学Spring的Java开发者刚⽤Spring不久的⼈Why为什么要使⽤Spring?Spring主要两个有功能为我们的业务对象管理提供了⾮常便捷的⽅法:DI(Dependency Injection,依赖注⼊)AOP(Aspect Oriented Programming,⾯向切⾯编程)Java Bean每⼀个类实现了Bean的规范才可以由Spring来接管,那么Bean的规范是什么呢?必须是个公有(public)类有⽆参构造函数⽤公共⽅法暴露内部成员属性(getter,setter)实现这样规范的类,被称为Java Bean。
即是⼀种可重⽤的组件。
DI-依赖注⼊简单来说,⼀个系统中可能会有成千上万个对象。
如果要⼿⼯维护它们之间的关系,这是不可想象的。
我们可以在Spring的XML⽂件描述它们之间的关系,由Spring⾃动来注⼊它们——⽐如A类的实例需要B类的实例作为参数set进去。
AOP-⾯向切⾯编程就以⽇志系统为例。
在执⾏某个操作前后都需要输出⽇志,如果⼿⼯加代码,那简直太可怕了。
⽽且等代码庞⼤起来,也是⾮常难维护的⼀种情况。
这⾥就需要⾯向切⾯来编程How关于BeanBean的⽣命周期如你所见,在bean准备就绪之前,bean⼯⼚执⾏了若⼲启动步骤。
我们对图进⾏详细描述:1. Spring对bean进⾏实例化;2. Spring将值和bean的引⽤注⼊到bean对应的属性中;3. 如果bean实现了BeanNameAware接⼝,Spring将bean的ID传递给setBean-Name()⽅法;4. 如果bean实现了BeanFactoryAware接⼝,Spring将调⽤setBeanFactory()⽅法,将BeanFactory容器实例传⼊;5. 如果bean实现了ApplicationContextAware接⼝,Spring将调⽤setApplicationContext()⽅法,将bean所在的应⽤上下⽂的引⽤传⼊进来;6. 如果bean实现了BeanPostProcessor接⼝,Spring将调⽤它们的post-ProcessBeforeInitialization()⽅法;7. 如果bean实现了InitializingBean接⼝,Spring将调⽤它们的after-PropertiesSet()⽅法。
(价值3000元)Java自学之路—马士兵
Java自学之路-马士兵老师 2011年09月19日尚学堂java培训作者:马士兵老师JAVA自学之路一:学会选择为了就业,不少同学参加各种各样的培训。
决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机、嵌入式、游戏、3G、测试等。
那么究竟应该选择什么方向呢?我的意见是,不要太过相信各种培训机构或是抢手文章的说法(包括我),当你要走向社会的时候,就不要再把自己当成学生,不要把自己的将来交给别人,学会运用自己的眼睛去观察,去了解这个世界吧。
每个培训机构都会宣传自己的好处,并不能说明大的趋势。
一些新闻文章很有可能是枪手写的,不必太过相信。
国外背景的教师和课程,未必适合你。
那么怎么才能确定自己将来的方向?如何才能从纷繁复杂、或真或假的数据世界中挖出一条路?我讲一个通过招聘网站的观察方法。
可以到各种招聘的网站上查询信息(可以到google上查询招聘的网站),例如:以及csdn的招聘频道等还有一个网站也不错,,综合了各大招聘网站的数据。
这些数据都是最真实不掺假的原始数据,你可以每隔一段时间搜索一次,一些规律就会被总结出来了。
比如说我在中搜索java,全国大概提供了3万个职位。
然后要多翻几页,这样不仅能够看清楚大概有多少是有效的职位,而且还可以看清楚用人单位最关心的技能是什么,这个很重要,决定着你将来要花多少时间和精力在特定的知识点上,比如说swing,搜了一下,全国只有700个左右的职位,仔细读了一下,也并非全是有效的职位,花太多时间和精力在这个上面就不值得了,当然自己感兴趣或者为了研究的话另当别论。
不过如果是为了快速的就业,把太多时间和精力花在很多职业生涯的前一、二年用不到的知识上就太可惜了。
同时,并非某一个行业的职位数目少,就不能当作一个方向进行选择,比如.NET,我搜索到的职位数是1.6万左右,比java少,是不是就选java了呢?不一定,因为java职位虽然多,但是可能竞争者可能也多,有些方向虽然职位数不多,但是和你竞争这些职位的人数量也少,不见得就不能选择。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
马士兵Spring学习笔记2011目录课程内容 (1)面向接口编程(面向抽象编程) (2)什么是IOC(DI),有什么好处 (2)Spring简介 (2)Spring IOC配置与应用 (2)什么是AOP (4)Spring AOP配置与应用 (4)Spring整合Hibernate (7)Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2 (11)课程内容1.面向接口(抽象)编程的概念与好处2.IOC/DI的概念与好处a)inversion of controlb)dependency injection3.AOP的概念与好处4.Spring简介5.Spring应用IOC/DI(重要)a)xmlb)annotation6.Spring应用AOP(重要)a)xmlb)annotation7.Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)a)opensessionInviewfilter(记住,解决什么问题,怎么解决)8.Spring JDBC面向接口编程(面向抽象编程)1.场景:用户添加2.Spring_0100_AbstractOrientedProgramminga)不是AOP:Aspect Oriented Programming3.好处:灵活什么是IOC(DI),有什么好处1.把自己new的东西改为由容器提供a)初始化具体值b)装配2.好处:灵活装配Spring简介1.项目名称:Spring_0200_IOC_Introduction2.环境搭建a)只用IOCi.spring.jar , jarkata-commons/commons-loggin.jar3.IOC容器a)实例化具体beanb)动态装配4.AOP支持a)安全检查b)管理transactionSpring IOC配置与应用1.FAQ:不给提示:a)window – preferences – myeclipse – xml – xml catalogb)User Specified Entries – addi.Location:D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\spring-beans-2.5.xsdii.URI:file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-beans-2.5.xsd iii.Key Type: Schema Locationiv.Key: /schema/beans/spring-beans-2.5.xsd2.注入类型a)Spring_0300_IOC_Injection_Typeb)setter(重要)c)构造方法(可以忘记)d)接口注入(可以忘记)3.id vs. namea)Spring_0400_IOC_Id_Nameb)name可以用特殊字符4.简单属性的注入a)Spring_0500_IOC_SimplePropertyb)<property name=… value=….>5.<bean 中的scope属性a)Spring_0600_IOC_Bean_Scopeb)singleton 单例c)proptotype 每次创建新的对象6.集合注入a)Spring_0700_IOC_Collectionsb)很少用,不重要!参考程序7.自动装配a)Spring_0800_IOC_AutoWireb)byNamec)byTyped)如果所有的bean都用同一种,可以使用beans的属性:default-autowire8.生命周期a)Spring_0900_IOC_Life_Cycleb)lazy-init (不重要)c)init-method destroy-methd 不要和prototype一起用(了解)9.Annotation第一步:a)修改xml文件,参考文档<context:annotation-config />10.@Autowireda)默认按类型by typeb)如果想用byName,使用@Qulifierc)写在private field(第三种注入形式)(不建议,破坏封装)d)如果写在set上,@qualifier需要写在参数上11.@Resource(重要)a)加入:j2ee/common-annotations.jarb)默认按名称,名称找不到,按类型c)可以指定特定名称d)推荐使用e)不足:如果没有源码,就无法运用annotation,只能使用xml12.@Component @Service @Controller @Repositorya)初始化的名字默认为类名首字母小写b)可以指定初始化bean的名字13.@Scope14.@PostConstruct = init-method; @PreDestroy = destroy-method; 什么是AOP1.面向切面编程Aspect-Oriented-Programminga)是对面向对象的思维方式的有力补充2.Spring_1400_AOP_Introduction3.好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码a)Filterb)Struts2的interceptor4.概念:a)JoinPoint 释意:切面与原方法交接点即切入点b)PointCut 释意:切入点集合c)Aspect(切面)释意:可理解为代理类前说明d)Advice 释意:可理解为代理方法前说明例如@Beforee)Target 释意:被代理对象被织入对象f)Weave 释意:织入Spring AOP配置与应用1.两种方式:a)使用Annotationb)使用xml2.Annotationa)加上对应的xsd文件spring-aop.xsdb)beans.xml <aop:aspectj-autoproxy />c)此时就可以解析对应的Annotation了d)建立我们的拦截类e)用@Aspect注解这个类f)建立处理方法g)用@Before来注解方法h)写明白切入点(execution …….)i)让spring对我们的拦截器类进行管理@Component3.常见的Annotation:a)@Pointcut 切入点声明以供其他方法使用, 例子如下:@Aspect@Componentpublic class LogInterceptor {@Pointcut("execution(public * com.bjsxt.dao..*.*(..))")public void myMethod(){}@Around("myMethod()")public void before(ProceedingJoinPoint pjp) throws Throwable{System.out.println("method before");pjp.proceed();}@AfterReturning("myMethod()")public void afterReturning() throws Throwable{System.out.println("method afterReturning");}@After("myMethod()")public void afterFinily() throws Throwable{System.out.println("method end");}}b)@Before 发放执行之前织入c)@AfterReturning 方法正常执行完返回之后织入(无异常)d)@AfterThrowing 方法抛出异常后织入e)@After 类似异常的finallyf)@Around 环绕类似filter , 如需继续往下执行则需要像filter中执行FilterChain.doFilter(..)对象一样执行ProceedingJoinPoint.proceed()方可,例子如下:@Around("execution(* com.bjsxt.dao..*.*(..))")public void before(ProceedingJoinPoint pjp) throws Throwable{System.out.println("method start");pjp.proceed();//类似FilterChain.doFilter(..)告诉jvm继续向下执行}4.织入点语法a)void !voidb)参考文档(* ..)如果execution(* com.bjsxt.dao..*.*(..))中声明的方法不是接口实现则无法使用AOP实现动态代理,此时可引入包” cglib-nodep-2.1_3.jar”后有spring自动将普通类在jvm中编译为接口实现类,从而打到可正常使用AOP的目的.5.xml配置AOPa)把interceptor对象初始化b)<aop:configi.<aop:aspect …..1.<aop:pointcut2.<aop:before例子:<bean id="logInterceptor" class="com.bjsxt.aop.LogInterceptor"></bean><aop:config><!-- 配置一个切面 --><aop:aspect id="point" ref="logInterceptor"><!-- 配置切入点,指定切入点表达式 --><!-- 此句也可放到 aop:aspect标签外依然有效--><aop:pointcutexpression="execution(public * com.bjsxt.service..*.*(..))"id="myMethod" /><!-- 应用前置通知 --><aop:before method="before" pointcut-ref="myMethod" /><!-- 应用环绕通知需指定向下进行 --><aop:around method="around" pointcut-ref="myMethod" /><!-- 应用后通知 --><aop:after-returning method="afterReturning"pointcut-ref="myMethod" /><!-- 应用抛出异常后通知 --><aop:after-throwing method="afterThrowing"pointcut-ref="myMethod" /><!-- 应用最终通知 --><aop:after method="afterFinily"pointcut="execution(public * om.bjsxt.service..*.*(..))" /> </aop:aspect></aop:config>Spring整合Hibernate1.Spring 指定datasourcea)参考文档,找dbcp.BasicDataSourcei.c3p0ii.dbcpiii.proxoolb)在DAO或者Service中注入dataSourcec)在Spring中可以使用PropertyPlaceHolderConfigure来读取Properties文件的内容2.Spring整合Hibernatea)<bean .. AnnotationSessionFactoryBean>i.<property dataSourceii.<annotatedClassesb)引入hibernate 系列jar包c)User上加Annotationd)UserDAO或者UserServie 注入SessionFactorye)jar包问题一个一个解决3.声明式的事务管理a)事务加在DAO层还是Service层?b)annotationi.加入annotation.xsdii.加入txManager beaniii.<tx:annotation-driven例如: <bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><tx:annotation-driven transaction-manager="transactionManager"/>iv.在需要事务的方法上加:@Transactionalv.需要注意,Hibernate获得session时要使用SessionFactory.getCurrentSession 不能使用OpenSessionc)@Transactional详解i.什么时候rollback1.运行期异常,非运行期异常不会触发rollback2.必须uncheck (没有catch)3.不管什么异常,只要你catch了,spring就会放弃管理4.事务传播特性:propagation_required例如: @Transactional(propagation=Propagation.REQUIRED)等同于(@Transactional)作用,一个方法声明了@Transactional事务后,其内再调用的方法不需要再声明@Transactional.5.read_only例如: @Transactional(propagation=Propagation.REQUIRED,readOnly=true)当方法声明readOnly=true时,该方法及其调用的方法内都不执行insert update等d)xml(推荐,可以同时配置好多方法)i.<bean txmanagerii.<aop:config1.<aop:pointcut2.<aop:advisor pointcut-ref advice-refiii.<tx:advice: id transaction-manager =iv.<property name="packagesToScan"> 可定义扫描目标包下所有实体类例如: <bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop><prop key="hibernate.show_sql">true</prop></props></property><!--<property name="annotatedClasses"><list><value>com.bjsxt.model.TestUser</value><value>com.bjsxt.model.Log</value></list></property>--><!-- 将参数名称设为packagesToScan 可定义扫描目标包下所有实体类--><property name="packagesToScan"><list><value>com.bjsxt.model</value></list></property></bean><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><aop:config><aop:pointcutexpression="execution(public * com.bjsxt.service..*.*(..))"id="myServiceMethod" /><aop:advisor pointcut-ref="myServiceMethod" advice-ref="txAdvice"/> </aop:config><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="save*" propagation="REQUIRED" /><tx:method name="add*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="del*" propagation="REQUIRED" /><tx:method name="cancel*" propagation="REQUIRED" /><tx:method name="*" read-only="true" /></tx:attributes></tx:advice>e)HibernateTemplate、HibernateCallback、HibernateDaoSupport(不重要)介绍i.设计模式:Template Method(模板方法)ii.Callback:回调/钩子函数iii.第一种:(建议)1.在spring中初始化HibernateTemplate,注入sessionFactory<bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory" /></bean>2.DAO里注入HibernateTemplateprivate HibernateTemplate hibernateTemplate;@Resourcepublic void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate;}3.save写getHibernateTemplate.save();public void save(TestUser testUser) {hibernateTemplate.save(testUser);}iv.第二种:1.从HibernateDaoSupport继承(此方法不好用可忽略)2.必须写在xml文件中,无法使用Annotation,因为set方法在父类中,而且是final的例如:首先,新建SuperDAOImpl类(使用Annotation注入--@Component):@Componentpublic class SuperDAOImpl {private HibernateTemplate hibernateTemplate; //此处定义由spring注入管理public HibernateTemplate getHibernateTemplate() {return hibernateTemplate;}@Resourcepublic void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate;}}此时,xml中必须要有:<bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory" /></bean>或者,SuperDAOImpl类写成下面代码:@Componentpublic class SuperDAOImpl extends HibernateDaoSupport {@Resource(name="sessionFactory")public void setSuperHibernateTemplate(SessionFactory sessionFactory) {super.setSessionFactory(sessionFactory);}}对应的xml中则可省略<bean id="hibernateTemplate"………部分只要包含<bean id="sessionFactory"……..部分即可最后,其他类继承SuperDaoImpl类后便可直接使用HibernateTemplate@Component("u")public class UserDAOImpl extends SuperDAOImpl implements UserDAO {public void save(TestUser testUser) {this.getHibernateTemplate().save(testUser);}}f)spring整合hibernate的时候使用packagesToScan属性,可以让spring自动扫描对应包下面的实体类Struts2.1.6 + Spring2.5.6 + Hibernate3.3.21.需要的jar包列表2.BestPractice:a)将这些所有的jar包保存到一个位置,使用的时候直接copy3.步骤a)加入jar包b)首先整合Spring + Hibernatei.建立对应的package1.dao / dao.impl / model / service / service.impl/ testii.建立对应的接口与类框架1.S2SH_01iii.建立spring的配置文件(建议自己保留一份经常使用的配置文件,以后用到的时候直接copy改)iv.建立数据库v.加入Hibernate注解1.在实体类上加相应注解@Entity @Id等在字段属性的get方法上加--@Column(name = "表字段名")2.在beans配置文件配置对应的实体类,使之受管vi.写dao service的实现vii.加入Spring注解1.在对应Service及DAO实现中加入@Component,让spring对其初始化2.在Service上加入@Transactional或者使用xml方式(此处建议后者,因为更简单)3.在DAO中注入sessionFactory4.在Service中注入DAO5.写DAO与Service的实现viii.写测试c)整合Struts2i.结合点:Struts2的Action由Spring产生ii.步骤:1.修改web.xml加入struts的filter如下:<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>2.再加入spring的listener,这样的话,webapp一旦启动,spring容器就初始化了如下:<!-- 指定由spring初始化加载xml配置文件spring与struts结合必备--><listener><listener-class>org.springframework.web.context.ContextLoaderListener<!-- 默认寻找xml路径:WEB-INF/applicationContext.xml --></listener-class></listener><!--整个应用的参数服务启动时读取.可指定spring初始化文件路径位置--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring/*applicationContext.xml</param-value></context-param>3.规划struts的action和jsp展现4.加入struts.xmla)修改配置,由spring替代struts产生Action对象5.修改action配置a)把类名改为bean对象的名称,这个时候就可以使用首字母小写了b)@Scope(―prototype‖)不要忘记iii.struts的读常量:1.struts-default.xml2.struts-plugin.xml3.struts.xml4.struts.properties5.web.xmliv.中文问题:1.Struts2.1.8已经修正,只需要改i18n.encoding = gbk2.使用spring的characterencoding例:<!-- 过滤器相关配置======== 字符编码过滤======== --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter>3.需要严格注意filter的顺序4.需要加到Struts2的filter前面zyInitializationException1.OpenSessionInViewFilter2.需要严格顺序问题3.需要加到struts2的filter前面附:1.@Autowired 与@Resource 都可以用来装配bean. 都可以写在属性定义上,或写在set方法上@Autowired (srping提供的) 默认按类型装配@Resource ( j2ee提供的) 默认按名称装配,当找不到(不写name属性)名称匹配的bean再按类型装配. 可以通过@Resource(name="beanName") 指定被注入的bean的名称, 要是指定了name属性, 就用字段名去做name属性值,一般不用写name属性.@Resource(name="beanName")指定了name属性,按名称注入但没找到bean, 就不会再按类型装配了.@Autowired 与@Resource可作用在属性定义上, 就不用写set方法了(此方法不提倡);2.a.Action类前加@Component,则Action可由spring来管理,例子如下:Action中写:@Component("u") //spring管理注解@Scope("prototype") //多态public class UserAction extends ActionSupport implements ModelDriven{//内部属性需要有get/set方法且需要set方法前加@Resource或@Autowired }Struts2配置文件中写<action name="u" class="u">Jsp中<form method="post" action="u.do" >b.Action中也可不加@Component,Action由struts2-spring-plugin管理。