使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?

    大家好,我是IT修真院武汉分院第13期学员,一枚正直善良的Java程序员。

今天给大家分享一下,修真院官网task2任务中可能会使用到的知识点:

使用Annotation时需要有哪些配置?它的加载过程是怎样实现的?

1.背景介绍

java注解是在JDK5时引入的新特性,鉴于目前大部分框架(如Spring)都使用了注解简化代码并提高编码的效率,因此掌握并深入理解注解对于一个Java工程师是来说是很有必要的事。

2.知识剖析

(一)注解开发介绍
Annotation(注解),其实就是对类,方法,属性进行的一种标示,一种注释(注意,这个里注释不是为了让我们开发或维护人员阅读更方便,而是为JVM看呢),通过这些标示,Java虚拟机可以完成这些标示对应的功能。例如使用框架开发时,我们都是通过配置文件进行对象关系组合映射等功能,而通过注解我们可以完全代替配置文件的编写。

注解如同标签

回到博文开始的地方,之前某新闻客户端的评论有盖楼的习惯,于是 “乔布斯重新定义了手机、罗永浩重新定义了傻X” 就经常极为工整地出现在了评论楼层中,并且广大网友在相当长的一段时间内对于这种行为乐此不疲。这其实就是等同于贴标签的行为。

Annotation的作用:
编写文档:通过代码里标识的元数据生成文档。
代码分析:通过代码里标识的元数据对代码进行分析。
编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查。
JDK内置的几个常用注解:
(1)@Override:此注解能够实现编译时检查,当某方法前边添加此注解时,表示此方法为重写父类中的方法。如果此方法不是父类的方法,例如我们本来想重写toString呢,却写成了tostring,则编译无法通过,会提示错误。
(2)@Deprecated:此注解是对不应该,或者将要淘汰的方法进行标识,当编程人员使用时就会给予提示。
(3)@SuppressWanings:此注解表示去除一些警告,但是里边需要我们制定参数。
(4)@interface进行自定义注解的定义。我们可以像@SuppressWanings一样向里边添加参数。比如利用@Target注解来指定其使用范围;@Documented表示此注解是否文档化,就是当我们生成文档时,是否生成进去;@Inherited标注继承,控制此注释是否会影响到子类等等。


(二)Spring注解开发
Spring框架的核心功能IoC(Inversion of Control),也就是通过Spring容器进行对象的管理,以及对象之间组合关系的映射。通常情况下我们会在xml配置文件中进行action,service,dao等层的声明,然后并告知框架我们想要的注入方式,然后在类中声明要组合类的get,set方法。而通过Spring框架中注解的运用也就主要是解决这类问题的。而框架中另一个核心知识AOP,一种面向横切面的方法编程,在程序中一般都是进行一次设置就可以的,所以都还放在配置文件中。例如声明式事物的设置,一次设置,后边就不用管了,所以这个没有必要使用注解进行简化。
1.首先需要在配置文件中增加命名空间的和约束文件
2.开启Spring的注解功能,这样Spring环境才会进行指定位置的扫描,进行类之间的关联组合
3.声明注解类,让Spring框架可以识别
(1)类的分层注解,由于我们后台开发都是分为三层进行开发的,所以Spring框架提供了三种对于不同层的注解方式:
控制层:@Controller
服务层:@Service
持久层:@Repository
默认情况下使用注解声明的Bean对象id名称为:类名称的首字母小写,一般不需要我们进行设置,如果想要设置时,例如我们指定的是实现类,而名字指向了接口,直接添加value属性即可:@Service(value="name"),当然value是可以省略的。
Spring框架还为我们提供了代替上边三个分层注解的通用注解:@Component.当然提倡大家使用分层注解更好一些,区分层次比较明确。
(2)自动装配功能的实现对象之间的组合关系,在属性前边指定下边的注解:
@Autowired : 采用类型的方式完成自动装配 : byType
@Resource : 采用名称+类型的方式完成自动装配 : byName +byType
另外Spring提供的两种注解的自动装配功能,属性不需要声明set,get方法也可以完成组合功能,这是非常方便的。

3.常见问题

在开发中我们应该选择使用配置文件开发,还是使用注解开发?

4.解决方案

(1)注解开发的优缺点
优点:1)开发速度快;2)编译期间容易发现错误的出处 。
缺点:1)管理分散,基本每个类上都有;2)扩展功能时,没有遵循OCP开发原则。
(2)配置文件开发的优缺点
优点:1)遵循OCP开发原则,修改配置文件即可进行功能扩展;2)集中管理对象和对象之间的组合关系,易于阅读。
缺点:1)开发速度相对较慢;2)编译时很难检查出错误,运行中的错误很难定位,调试难度较大。
如果客户需求不会频繁发生变化。那么使用注解非常好,开发效率快。
如果客户需求经常发生变化,那么采用配置文件的方式会好一些。有利于扩展。

5.编码实战


6.扩展思考

在使用框架开发中,如何利用注解帮助我们提高效率?

7.参考文献

文献一:http://blog.csdn.net/liujiahan629629/article/details/22325155
文献二:http://blog.csdn.net/liujiahan629629/article/details/22696031

文献三:https://blog.csdn.net/briblue/article/details/73824058


8.更多讨论

问:@Override有什么用:
@Override:此注解能够实现编译时检查,当某方法前边添加此注解时,表示此方法为重写父类中的方法。如果此方法不是父类的方法,例如我们本来想重写toString呢,却写成了tostring,则编译无法通过,会提示错误
问 :注解支持继承吗?
注解是不支持继承的,因此不能使用关键字extends来继承某个@interface,但注解在编译后,编译器会自动继承java.lang.annotation.Annotation接口,这里我们反编译前面定义的DBTable注解

问:注解中快捷方式是什么?

所谓的快捷方式就是注解中定义了名为value的元素,并且在使用该注解时,如果该元素是唯一需要赋值的一个元素,那么此时无需使用key=value的语法,而只需在括号内给出value元素所需的值即可。这可以应用于任何合法类型的元素,记住,这限制了元素名必须为value,



感谢大家观看!

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~


技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

我的邀请码:

23584099

,或者你可以直接点击此链接:http://www.jnshu.com/login/1/23584099


作者:idiot丶伟伟
链接:https://www.jianshu.com/p/1aa6d359fca7
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值