我是不是可以這樣理解??
老師這節(jié)講的內(nèi)容就是為了讓我們理解注解的使用,而實(shí)際上這節(jié)的實(shí)現(xiàn)功能完全由反射就可以實(shí)現(xiàn),不就是用反射實(shí)現(xiàn)獲取類的信息嗎,然后硬是加了個(gè)通過(guò)注解來(lái)實(shí)現(xiàn),,而且老師最后在用反射調(diào)用字段的get方法時(shí)根本沒(méi)有用到column注解的信息。不知道大家是否贊同我的觀點(diǎn)
老師這節(jié)講的內(nèi)容就是為了讓我們理解注解的使用,而實(shí)際上這節(jié)的實(shí)現(xiàn)功能完全由反射就可以實(shí)現(xiàn),不就是用反射實(shí)現(xiàn)獲取類的信息嗎,然后硬是加了個(gè)通過(guò)注解來(lái)實(shí)現(xiàn),,而且老師最后在用反射調(diào)用字段的get方法時(shí)根本沒(méi)有用到column注解的信息。不知道大家是否贊同我的觀點(diǎn)
2016-06-17
舉報(bào)
2016-06-18
針對(duì)老師代碼來(lái)說(shuō):
單從老師的代碼上確實(shí)和你說(shuō)的差不多!
其實(shí)不知道你有沒(méi)有發(fā)現(xiàn),老師的本意是Column注解的值,是表示數(shù)據(jù)庫(kù)中表的字段的,如果數(shù)據(jù)庫(kù)中的表按照這個(gè)意思來(lái)創(chuàng)建的,那么最后生成的sql語(yǔ)句是有問(wèn)題的。如:userName的用@Column("user_name")意味著數(shù)據(jù)庫(kù)表中字段名應(yīng)該是user_name。
如果我們做一個(gè)假設(shè),需要做映射的類滿足java類名 ==(或者做固定的轉(zhuǎn)換,如首字母小寫(xiě)) 數(shù)據(jù)庫(kù)中表名,?java字段名 ==(或者做固定的轉(zhuǎn)換,如首字母小寫(xiě),在駝峰字母轉(zhuǎn)成“_ ”+ "小寫(xiě)字母") 數(shù)據(jù)庫(kù)中表的字段名,那完全是可以用反射實(shí)現(xiàn)的,這樣是所謂的約定。
但是我們學(xué)習(xí),還是不要只局限于此,需要自己多思考!
針對(duì)注解的作用來(lái)說(shuō):
注解的作用主要在于標(biāo)記、統(tǒng)一處理(如AOP面向切面編程)、去配置化(也可以認(rèn)為將配置轉(zhuǎn)成了代碼)。
要讓注解最后起作用的話,不同類型的注解需要借助不同的東西。這里主要說(shuō)說(shuō)運(yùn)行時(shí)注解!運(yùn)行時(shí)注解如果要起作用的話,是需要借助java的反射機(jī)制。大致思路:通過(guò)反射獲取相應(yīng)的注解信息(含注解的成員值),根據(jù)注解的值進(jìn)行相對(duì)應(yīng)的業(yè)務(wù)處理(實(shí)際業(yè)務(wù)需求,視情況而定)。如:定義一個(gè)@log注解(作用于方法),有一個(gè)參數(shù)logTime(有after和before兩個(gè)值),那么通過(guò)反射機(jī)制獲取包含@log注解后,判斷l(xiāng)ogTime是before則在方法調(diào)用前輸出日志,如果是after則在方法調(diào)用完成后輸出日志!這其實(shí)應(yīng)該是老師代碼的本意,只不過(guò)可能一時(shí)疏忽,搞錯(cuò)了!