事務控制 及其 用動態代理增強功能

1)單例對象,如果多線程訪問的情況下,有線程安全的問題;

2)解決IOC依然有XML的問題;

3)config.SpringConfiguration,該類是一個配置類,其作用相當於bean.xml

4)@Bean: 用於把當前方法的返回值作爲bean對象存入spring的IOC容器中:
	屬性: 
		name: bean的id, 當不寫時,默認值是當前方法名稱

5)@Import(xxx.class): 用於導入其它的配置類;

class<?>... xxx: 可變參數

6)@PropertySource

7)Spring整合JUnit的配置:
	不能更改別人的class字節碼

8)@Runwith: 整合JUnit的, 替換Main函數的

9)事務的引入:
	(1)中間出現了異常,發現加和減對不上
		分析: 4次操作,有4個connection,每一個connection都會有一個事務.
		解決方案: 只用一個connecttion--》ThreadLocal對象的引入:
					使用ThreadLocalUI想baConnection和當前線程綁定,從而一個線程中只有一個能控制事務的對象

	(2)之前沒有問題的原因: 每次操作都會創建一個對象,每次數據庫操作,都會從連接池中拿出一個連接

	AOP優勢的引入:

10)ThreadLocal:
		連接的工具類,它用於從數據源中獲取一個連接,並且實現和線程的綁定;
		獲取當前線程上的連接;

11)連接池
	(1)web app在tomcat啓動時,創建出來連接, 在外部使用時,保證執行效率;

12)已經close的連接時歸還到連接池了,要和Threadlocal解綁

13)讓Service有事務的控制

14)保證方法間的獨立,不讓有方法間的這種耦合關係;

15)動態代理解決的問題:
	(1)生產廠家

	(2)--》經銷商/代理商(銷售、售後)

	(3)6999的電腦買到後, 經銷商還是6999嗎? 很可能是低很多,可能是4999, 另外2000可能是庫房、培訓等..

	(4)我們不能和生產廠家聯繫了, 生產廠家只是生產電腦


	代理實現了功能增強

16)認識接口
	(1)java中接口就是標準,你必須實現

17)動態代理:
	特點: 字節碼隨用隨創建,隨用隨加載;
	作用:在不修改源碼的基礎上對方法增強;
	分類: 基於接口的動態代理
			涉及的類: Proxy
			提供者: 官方

			如何創建代理對象:
				使用Proxy類中的newProxyInstance方法:
					參數:
						ClassLoader: 類加載器(固定寫法)
							用於加載代理對象字節碼的,寫的是: 和被代理對象使用相同的類加載器;

						Class[]: 字節碼數組(固定寫法)
							它是用於讓代理對象和被代理對象有相同的方法。


						InvocationHandler: 用於提供增強的代碼
							它是讓我們寫如何代理,我們一般都是寫一個該接口的實現類,通常情況下都是匿名內部類(非必須)

							作用: 執行被代理兌現改的任何接口都會經過該方法.

							proxy: 代理對象的引用
							method: 當前執行的方法
							args: 當前執行方法所需的參數
							return: 和被代理對象有相同的返回值

								// 提供增強的代碼
								1.獲取參數 args[0]

								2.判斷當前方法是不是銷售 method.getName()


								return method.invoke(producer, args)



			要求: 被代理類至少實現一個接口,沒有則不能使用. 因此問題也是: 不識閒任何接口,則不可以用.	


		  基於子類的動態代理(cglib)
		  	涉及的類: Enchancer
		  	提供者: 第三方cglib

		  	如何創建對象:
		  		使用Enhancer的create方法:
		  			Class

		  			Callback
		  				MethodInterceptor:
		  					intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy)


		  	Enchaner.create(producer.getClass())

18)使用:
	加回到池子裏
	亂碼方法的增強

19)1個實現類,一個實現動態代理的
  @Autowired
    @Qualifier("proxyAccountService")
    private  IAccountService as;

11)配置中變得繁瑣了,那麼如何簡化配置呢? AOP來啦!!!
	

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章