分享人:鲁伯良
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
元注解就是注解的注解,当我们要自定义注解时用
1.@Retention: 定义注解的保留策略
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
2.@Target用来声明注解范围(枚举ElementType),ElementType可选值:
源码为:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
}
3.@Inherited
声明子类可以继承此注解,如果一个类A使用此注解,则类A的子类也继承此注解
4.@声明注解能够被javadoc等识别
定义自定义注解使用@interface 关键字
public @interface 注解名 {定义体}
一旦在自定义注解里面定义了成员变量之后,在使用该注解是就应该为该注解的成员变量指定值
如果只有一个参数成员,最好把参数名称设为"value",后加小括号。
也可以在自定义注解的成员变量的时候为其制定初始值,.(默认值)
注解的使用场景
1.类属性自动赋值。
2验证对象属性完整性。
3代替配置文件功能,像spring基于注解的配置。
4可以生成文档,像java代码注释中的@see,@param等
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:
1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多
2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率
为了解决这两个问题,Spring引入了注解,通过”@XXX”的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。
@Controller, @Service, @Component, @Repository
刨析
其中@Component是一种通用名称,泛指任意可以通过Spring来管理的组件,@Controller, @Service, @Repository则是一种特定的组件,通常用来表示某种特定场合下的组件,比如@Repository用来表示仓库(数据层,DAO),并且Spring 框架会根据这种应用场景做些定制,比如@Repository同时具备了自动化的异常转换。类似的, @Service则用来表示服务层相关的类, @Controller则用来表示展示层(presentation)的类。
为什么要分层
所有这些分层方式都是为了解决应用从小项目成长为大项目时可能遇到的隐患,代价是在项目还小时,增加了项目的复杂度,往往一句代码就能搞定的事情,却要拆到三个类中去。但是太多的实际例子表明,如果没有好的架构,当小项目膨胀到一定程度时,往往是无法维护的,只能全部推倒重写。
参考:
互联网
感谢大家观看
BY : 鲁伯良