spring學習筆記

課程內容
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),有什麼好處
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)  動態裝配
4.  AOP支持
a)  安全檢查
b)  管理transaction
Spring IOC配置與應用
1.  FAQ:不給提示:
a)  window – preferences – myeclipse – xmlxml 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
a)  把interceptor對象初始化
b)  <aop:config
i.  <aop:aspect …..
1.  <aop:pointcut
2.  <aop:before
Spring整合Hibernate
1.  Spring 指定datasource
a)  參考文檔,找dbcp.BasicDataSource
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
b)  引入hibernate 系列jar包
c)  User上加Annotation
d)  UserDAO或者UserServie 注入SessionFactory
e)  jar包問題一個一個解決
3.  聲明式的事務管理
a)  事務加在DAO層還是Service層?
b)  annotation
i.  加入annotation.xsd
ii. 加入txManager bean
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
5.  read_only
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();
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
i.  結合點:Struts2的Action由Spring產生
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前面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章