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