老师这节讲的内容就是为了让我们理解注解的使用,而实际上这节的实现功能完全由反射就可以实现,不就是用反射实现获取类的信息吗,然后硬是加了个通过注解来实现,,而且老师最后在用反射调用字段的get方法时根本没有用到column注解的信息。不知道大家是否赞同我的观点
针对老师代码来说:
单从老师的代码上确实和你说的差不多!
其实不知道你有没有发现,老师的本意是Column注解的值,是表示数据库中表的字段的,如果数据库中的表按照这个意思来创建的,那么最后生成的sql语句是有问题的。如:userName的用@Column("user_name")意味着数据库表中字段名应该是user_name。
如果我们做一个假设,需要做映射的类满足java类名 ==(或者做固定的转换,如首字母小写) 数据库中表名, java字段名 ==(或者做固定的转换,如首字母小写,在驼峰字母转成“_ ”+ "小写字母") 数据库中表的字段名,那完全是可以用反射实现的,这样是所谓的约定。
但是我们学习,还是不要只局限于此,需要自己多思考!
针对注解的作用来说:
注解的作用主要在于标记、统一处理(如AOP面向切面编程)、去配置化(也可以认为将配置转成了代码)。
要让注解最后起作用的话,不同类型的注解需要借助不同的东西。这里主要说说运行时注解!运行时注解如果要起作用的话,是需要借助java的反射机制。大致思路:通过反射获取相应的注解信息(含注解的成员值),根据注解的值进行相对应的业务处理(实际业务需求,视情况而定)。如:定义一个@log注解(作用于方法),有一个参数logTime(有after和before两个值),那么通过反射机制获取包含@log注解后,判断logTime是before则在方法调用前输出日志,如果是after则在方法调用完成后输出日志!这其实应该是老师代码的本意,只不过可能一时疏忽,搞错了!