IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?

关联任务:

任务五

直播时间:

2018-12-13 15:30:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

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

什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?     中品

辅导师兄 [西安|荣耀师兄]JAVA-郭靖


【修真院java小课堂】什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?

开场语:

大家好,我是IT修真院西安分院第4期的学员鲁伯良,一枚正直纯洁善良的java程序员,今天给大家分享一下,修真院官网java任务7,深度思考中的知识点——什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?

(1)背景介绍:

什么是注解?

        注解(Annotation),也叫元数据.一种代码级别的说明.它是jdk1.5及以后版本引入的一个特性<br>

与类,接口,枚举是在同一个层次.它可以声明在包、类、字段、方法、局部变量、方法参数等<br>

的前面,用来对元素说明注释。注解是以“@注解名”在代码中存在的。<br>

注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,

没有加,则等于没有任何标记,以后,javac编译器、开发工具和其他程序可以通过反射来了解你的

类及各种元素上有无何种标记,看你的程序有什么标记,就去干相应的事,标记可以加在包、类,属性、方法,方法

的参数以及局部变量上

(2)知识剖析:

元注解

四大元注解

@Retention、@Inherited、@Documented、@Target

@Retention

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",后加小括号。

也可以在自定义注解的成员变量的时候为其制定初始值,.(默认值),

(3)常见问题:

注解的使用场景

(4)解决方案:

  1. 类属性自动赋值。

  2. 验证对象属性完整性。

  3. 代替配置文件功能,像spring基于注解的配置。

  4. 可以生成文档,像java代码注释中的@see,@param等

(5)编码实战:


(6)拓展思考:

spring注解

传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:

1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多

2、在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率

为了解决这两个问题,Spring引入了注解,通过”@XXX”的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。

如何使用

再上下文文件中加入如下代码

扫描

<context:component-scan base-package="包" />

多个包逗号隔开。

常用注解

1、@Component

通用一般不推荐使用

2、@Controller

@Controller对应表现层的Bean

3、@ Service

@Service对应的是业务层Bean

4、@ Repository

@Repository对应数据访问层Bean

@Controller, @Service, @Component, @Repository

刨析

其中@Component是一种通用名称,泛指任意可以通过Spring来管理的组件,@Controller, @Service, @Repository则是一种特定的组件,通常用来表示某种特定场合下的组件,比如@Repository用来表示仓库(数据层,DAO),并且Spring 框架会根据这种应用场景做些定制,比如@Repository同时具备了自动化的异常转换。类似的, @Service则用来表示服务层相关的类, @Controller则用来表示展示层(presentation)的类。


(7)参考文献:



互联网

(8)更多讨论:

Q1::spring注解为什么要分层
A1::所有这些分层方式都是为了解决应用从小项目成长为大项目时可能遇到的隐患,代价是在项目还小时,增加了项目的复杂度,往往一句代码就能搞定的事情,却要拆到三个类中去。但是当项目特别大的时候会无法维护只能重写

Q2:@Compoent注解是可以通用的是吗?

A2:是的,不过为了层次分明我们不推荐这样使用?

Q3:什么情况下会用到自定义注解?

A3:自定义注解可以代替掉实体类的get set方法,验证对象的属性完整性.

(9)鸣谢:

 

(10)结束语:

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


评论

[西安|荣耀师兄]JAVA-郭靖 发表于 2018-12-18 12:42:40 #1

自定义注解的一些基础的知识都讲出来了。可以再深入了解一下自定义注解的应用场景和使用

回复

请您登录 后进行评论