課程內容
1. 面向接口(抽象)編程的概念與好處
2. IOC/DI的概念與好處
a) inversion of control
b) dependency injection
3. AOP的概念與好處
4. Spring簡介
5. Spring應用IOC/DI(重要)
a) xml
b) annotation
6. Spring應用AOP(重要)
a) xml
b) annotation
7. Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)
a) opensessionInviewfilter(記住,解決什麼問題,怎麼解決)
8. Spring JDBC
面向接口編程(面向抽象編程)
1. 場景:用戶添加
2. Spring_0100_AbstractOrientedProgramming
a) 不是AOP:Aspect Oriented Programming
3. 好處:靈活
什麼是IOC(控制翻轉)(DI),有什麼好處Dependency Injection(依賴注入)
1. 把自己new的東西改爲由容器提供
a) 初始化具體值
b) 裝配
2. 好處:靈活裝配
Spring簡介
1. 項目名稱:Spring_0200_IOC_Introduction
2. 環境搭建
a) 只用IOC
i. spring.jar , jarkata-commons/commons-loggin.jar
3. IOC容器
a) 實例化具體bean
b) 動態把其它的bean裝到其中一個bean上
4. AOP支持
a) 安全檢查
b) 管理transaction
Spring IOC配置與應用
1. FAQ:不給提示:
a) window – preferences – myeclipse – xml – xml catalog
b) User Specified Entries – add
i. Location: D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\spring-beans-2.5.xsd
ii. URI: file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-beans-2.5.xsd
iii. Key Type: Schema Location
iv. Key: http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
2. 注入類型
a) Spring_0300_IOC_Injection_Type
b) setter(重要)
c) 構造方法(可以忘記)
d) 接口注入(可以忘記)
3. id vs. name
a) Spring_0400_IOC_Id_Name
b) name可以用特殊字符
4. 簡單屬性的注入
a) Spring_0500_IOC_SimpleProperty
b) <property name=… value=….>
5. <bean 中的scope屬性
a) Spring_0600_IOC_Bean_Scope
b) singleton 單例
c) proptotype 每次創建新的對象
6. 集合注入
a) Spring_0700_IOC_Collections
b) 很少用,不重要!參考程序
7. 自動裝配
a) Spring_0800_IOC_AutoWire
b) byName
c) byType
d) 如果所有的bean都用同一種,可以使用beans的屬性:default-autowire
8. 生命週期
a) Spring_0900_IOC_Life_Cycle
b) lazy-init (不重要)
c) init-method destroy-methd 不要和prototype一起用(瞭解)
9. Annotation第一步:
a) 修改xml文件,參考文檔<context:annotation-config />
10. @Autowired
a) 默認按類型by type
b) 如果想用byName,配合使用@Qulifier
c) 寫在private field(第三種注入形式)(不建議,破壞封裝)
d) 如果寫在set上,@qualifier需要寫在參數上
11. @Resource(重要)
a) 加入:j2ee/common-annotations.jar
b) 默認按名稱,首先找對應名稱,名稱找不到,按類型
c) 可以指定特定名稱
d) 推薦使用
e) 不足:如果沒有源碼,就無法運用annotation,只能使用xml
12. @Component @Service @Controller @Repository 目前沒區別
a) 初始化的名字默認爲類名首字母小寫
b) 可以指定初始化bean的名字
13. @Scope
14. @PostConstruct = init-method; @PreDestroy = destroy-method;
什麼是AOP
1. 面向切面編程Aspect-Oriented-Programming
a) 是對面向對象的思維方式的有力補充
2. Spring_1400_AOP_Introduction
3. 好處:可以動態的添加和刪除在切面上的邏輯而不影響原來的執行代碼
a) Filter
b) Struts2的interceptor
4. 概念:
a) JoinPoint 連接點
b) PointCut 連接點的集合
c) Aspect(切面)
d) Advice 切面的邏輯
e) Target 被代理對象
f) Weave 織入
Spring AOP配置與應用
1. 兩種方式:
a) 使用Annotation
b) 使用xml
2. Annotation
a) 加上對應的xsd文件spring-aop.xsd
b) beans.xml <aop:aspectj-autoproxy />
c) 此時就可以解析對應的Annotation了
d) 建立我們的攔截類
e) 用@Aspect註解這個類
f) 建立處理方法
g) 用@Before來註解方法
h) 寫明白切入點(execution …….)
i) 讓spring對我們的攔截器類進行管理@Component
3. 常見的Annotation:
a) @Pointcut
b) @Before
c) @AfterReturning
d) @AfterThrowing
e) @After
f) @Around
4. 織入點語法
a) void !void
b) 參考文檔(* ..)
5. xml配置AOP 用別人的切面類邏輯的時候只能用xml
a) 把interceptor對象初始化
b) <aop:config
i. <aop:aspect …..
1. <aop:pointcut
2. <aop:before
Spring整合Hibernate
1. Spring 指定datasource
a) 參考文檔,找dbcp.BasicDataSource database connection pool
i. c3p0
ii. dbcp
iii. proxool
b) 在DAO或者Service中注入dataSource
c) 在Spring中可以使用PropertyPlaceHolderConfigure來讀取Properties文件的內容
2. Spring整合Hibernate
a) <bean .. AnnotationSessionFactoryBean>
i. <property dataSource
ii. <annotatedClasses
iii. <property name=hibernateproperties> <props> <prop key=hibernate.dialect></prop> </props> </property>
b) 引入hibernate 系列jar包
c) User上加Annotation
d) UserDAO或者UserServie 注入SessionFactory
e) jar包問題一個一個解決
3. 聲明式的事務管理
a) 事務加在DAO層還是Service層?
b) annotation
i. 加入annotation.xsd
ii. 加入txManager bean 把sessionfactory注入給它
iii. <tx:annotation-driven
iv. 在需要事務的方法上加:@Transactional
v. 需要注意,使用SessionFactory.getCurrentSession 不要使用OpenSession
c) @Transactional詳解
i. 什麼時候rollback
1. 運行期異常,非運行期異常不會觸發rollback
2. 必須uncheck (沒有catch)
3. 不管什麼異常,只要你catch了,spring就會放棄管理
4. 事務傳播特性:propagation_required 默認值required別人調我的方法,如果說已經有了一個transaction了,就用原來那個,把自己作爲這個transaction的一部分加進去,如果沒有,就創建一個新的。
5. read_only readonly的transaction比其它的效率高,提高性能的
d) xml(推薦,可以同時配置好多方法)
i. <bean txmanager
ii. <aop:config
1. <aop:pointcut
2. <aop:advisor pointcut-ref advice-ref
iii. <tx:advice: id transaction-manager =
e) HibernateTemplate、HibernateCallback、HibernateDaoSupport(不重要)介紹
i. 設計模式:Template Method
ii. Callback:回調/鉤子函數
iii. 第一種:(建議)
1. 在spring中初始化HibernateTemplate,注入sessionFactory
2. DAO裏注入HibernateTemplate
3. save寫getHibernateTemplate.save(); 自己寫個surperdao 在它
裏面把hibernateTemplate注入進來,hibernatesupport不需要了
iv. 第二種:
1. 從HibernateDaoSupport繼承
2. 必須寫在xml文件中,無法使用Annotation,因爲set方法在父類中,而且是final的
f) spring整合hibernate的時候使用packagesToScan屬性,可以讓spring自動掃描對應包下面的實體類
Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2
1. 需要的jar包列表
jar包名稱
所在位置
說明
antlr-2.7.6.jar
hibernate/lib/required
解析HQL
aspectjrt
spring/lib/aspectj
AOP
aspectjweaver
..
AOP
cglib-nodep-2.1_3.jar
spring/lib/cglib
代理,二進制增強
common-annotations.jar
spring/lib/j2ee
@Resource
commons-collections-3.1.jar
hibernate/lib/required
集合框架
commons-fileupload-1.2.1.jar
struts/lib
struts
commons-io-1.3.2
struts/lib
struts
commons-logging-1.1.1
單獨下載,刪除1.0.4(struts/lib)
struts
spring
dom4j-1.6.1.jar
hibernate/required
解析xml
ejb3-persistence
hibernate-annotation/lib
@Entity
freemarker-2.3.13
struts/lib
struts
hibernate3.jar
hibernate
hibernate-annotations
hibernate-annotation/
hibernate-common-annotations
hibernate-annotation/lib
javassist-3.9.0.GA.jar
hiberante/lib/required
hibernate
jta-1.1.jar
..
hibernate transaction
junit4.5
mysql-
ognl-2.6.11.jar
struts/lib
slf4j-api-1.5.8.jar
hibernate/lib/required
hibernate-log
slf4j-nop-1.5.8.jar
hibernate/lib/required
spring.jar
spring/dist
struts2-core-2.1.6.jar
struts/lib
xwork-2.1.2.jar
struts/lib
struts2
commons-dbcp
spring/lib/jarkata-commons
commons-pool.jar
..
struts2-spring-plugin-2.1.6.jar
struts/lib
2. BestPractice:
a) 將這些所有的jar包保存到一個位置,使用的時候直接copy
3. 步驟
a) 加入jar包
b) 首先整合Spring + Hibernate
i. 建立對應的package
1. dao / dao.impl / model / service / service.impl/ test
ii. 建立對應的接口與類框架
1. S2SH_01
iii. 建立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中注入sessionFactory
4. 在Service中注入DAO
5. 寫DAO與Service的實現
viii. 寫測試
c) 整合Struts2
結合點:Struts2的Action由Spring產生需要在struts.xml 配class=“名字” 否則action完全由struts spring plugin插件完成 產生以後它會去到spring那邊容器找需要注入的內容。注意用spring產生的話千萬不要忘了@prototype
i.
ii. 步驟:
1. 修改web.xml加入 struts的filter
2. 再加入spring的listener,這樣的話,webapp一旦啓動,spring容器就初始化了
3. 規劃struts的action和jsp展現
4. 加入struts.xml
a) 修改配置,由spring替代struts產生Action對象
5. 修改action配置
a) 把類名改爲bean對象的名稱,這個時候就可以使用首字母小寫了
b) @Scope(“prototype”)不要忘記
iii. struts的讀常量:
1. struts-default.xml
2. struts-plugin.xml
3. struts.xml
4. struts.properties
5. web.xml
iv. 中文問題:
1. Struts2.1.8已經修正,只需要改i18n.encoding = gbk
2. 使用spring的characterencoding
3. 需要嚴格注意filter的順序
4. 需要加到Struts2的filter前面
v. LazyInitializationException
1. OpenSessionInViewFilter
2. 需要嚴格順序問題
3. 需要加到struts2的filter前面
Action的產生完全由struts spring plugin插件完成 產生以後它會去到spring那邊容器找需要注入的內容。
Struts default properties
學會spring下面的自動化測試框架 springtestcontext
opensessioninviewinterceptor
Spring筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.