spring 個人小心得
1 spring容器相當於一個工廠,這個工廠創造並控制了beans。同時解耦beans之間的控制權,使程式結構更加優化。
2 Bean物件建立的時機,預設是隨著容器建立,可以使用lazy-init=true(在呼叫getBean建立)延遲建立。
3 Spring容器預設是通過單例模式建立Bean物件的,也就是說, 預設情況下,通過呼叫ac.getBean("mybean")方法獲得的物件都是同一個bean物件。
使用單例模式有風險,風險在於多執行緒併發訪問時會有一些狀況。在配置檔案加該屬性scope="prototype",會new一個。
4 IOC 註解注入:首先需要在applicationContext.xml中新增<context:component-scan/> 元件自動掃描。
bean元件註解
@Service 用於Service業務元件@Control 用於Action控制組件@Respository 用於DAO資料訪問元件
@Component 用於其他元件
依賴注入的註解標記
@Resource 按名稱@Resource(name="id名")
@AutoWired 按名稱
@Autowired
無 論使用@Resource還是@Autowried,我們不用再寫set方法的。
其他註解:@Scope 等價於<bean scope="">
5 AOP相關概念 *
1) Aspect切面(方面)
指的是共通業務處理,可以切入到多個目標物件,可多次使用
2) JoinPoint連線點
指的是切面元件在目標物件上作用的位置, 例如:方法上戒者發生異常。
3) Pointcut切入點
切入點是連線點的集合,採用表示式指定
4) Target Object目標物件
5) Advice通知
指的是切面元件在連線點上執行的勱作。 例如:在方法呼叫前、方法呼叫後、方法呼叫前後等。
6) AutoProxy勱態代理
採用了AOP
a. 目標物件有介面採用JDK代理、
b. 目標物件沒有介面採用CGLIB代理
這5種類型的通知,在內部呼叫時這樣組織
try{ 呼叫前置通知 環繞前置處理 呼叫目標物件方法 環繞後置處理 呼叫後置通知 }
catch(Exception e)
{ 呼叫異常通知 }
finally
{ 呼叫最終通知 }
AOP在applicationContecx檔案中的配置如下:
<aop:config>
<aop:pointcut expression="within(tarena.service..*)" id="servicePointcut"/>
<aop:aspect id="optLoggerAspect" ref="optLogger">
<aop:around method="logger" pointcut-ref="servicePointcut"/>
</aop:aspect>
</aop:config>
使用註解如下:
6 整合hibernate
a. 使用的API
HibernateDaoSupport
提供編寫DAO元件的支援
HibernateTemplate
提供了增刪改查操作
save():儲存
update():更新
delete():刪除
find():查詢
如果需要分頁查詢,可以使用HibernateDaoSupport提供的
this.getSession()方法獲取Session物件。
b. XML配置
首先配置連線池dataSource
其次配置SessionFactory
最後將SessionFactory注入給所有DAO元件