×

java注解到底有什么用 f prin

java注解到底有什么用(Spring中的XML、注解、JavaConfig该如何选择你怎么看)

admin admin 发表于2023-09-17 03:13:42 浏览34 评论0

抢沙发发表评论

本文目录

Spring中的XML、注解、JavaConfig该如何选择你怎么看

首先注解,JavaConfig用起来方便实用,是趋势将会取代

.xml

的,应为xml有两个缺点:

1、如果所有内容都配置在.xml 文件中,会造成.xml文件十分庞大;文件很多,导致可读性和可维护性很低。2、开发中不断来回切换,太过麻烦,编译期间不容易发现错误

3、采用javaConfig配置代码简介方便管理和阅读。综上三点,注解Annotation和javaConfig将会取代xml

Java官方没有实现Servlet类,那在服务器运行过程中,Servlet类的代码是怎么起作用的

谢邀。

首先问题主一个问题,如果Servlet被实现了,那应该怎么实现?实现什么逻辑?你的业务代码又该写到哪里?

其次对于Servlet的执行,这里不直接给出答案,只从表象来引导思考,由题主自行去找到答案:

  • Servlet刚出来的时候是需要通过web.xml进行配置的,3.0开始支持基于注解的方式配置。这里需要的知识点有Java读取xml,Java注解(注解的执行原理,不是使用)。
  • 无论配置web.xml还是注解,都配置了url。作用是什么?
  • 通过url找到Servlet,怎么去执行,也就是题主关心的问题。涉及知识点:Java如何动态的执行一个类?

下面给个完整的大致流程(题主看之前最好先自己思考下):

  • 你访问服务地址,浏览器发送HTTP请求
  • 服务端接收到请求后,解析HTTP消息,根据web.xml的配置,或注解上面的配置找到URL对应的Servlet
  • 通过反射来执行Servlet
  • 结果组装为HTTP响应返回
  • 浏览器渲染响应,你看到了结果

怎样理解Java的注解并运用注解编程

一、什么是注解

注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,

用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。

一般常用的注解可以分为三类:

1、Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。

2、类为元注解,元注解是用于定义注解的注解,包括@Retention(标明注解被保留的阶段)、@Target(标明注解使用的范围)、@Inherited(标明注解可继承)、@Documented(标明是否生成javadoc文档)

3、类为自定义注解,可以根据自己的需求定义注解

二、注解的用途

在看注解的用途之前,有必要简单的介绍下XML和注解区别,

注解:是一种分散式的元数据,与源代码紧绑定。

xml:是一种集中式的元数据,与源代码无绑定

当然网上存在各种XML与注解的辩论哪个更好,这里不作评论和介绍,主要介绍一下注解的主要用途:

生成文档,通过代码里标识的元数据生成javadoc文档。

编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。

编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。

运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例

三、注解的实现原理

实现注解三要素:

1、注解声明

2、使用注解的元素

3、操作注解使其起作用(注解处理器)

注解声明

首先我们让看一下java中的元注解(也就是上面提到的注解的注解),总共有4个如下:

@Target,@Retention,@Documented,@Inherited这4个元注解都是在jdk的java.lang.annotation包下面,

@Target:Target说明的是Annotation所修饰的对象范围。@Retention:

定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,

而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。

使用这个元注解可以对 Annotation的“生命周期”限制。@Documented:@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员

@Inherited:@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,

则这个annotation将被用于该class的子类。

注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。

当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,

反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层。

java.lang.reflect.AnnotatedElement 接口是所有程序元素(Class、Method和Constructor)的父接口,所以程序通过反射获取了某个类的AnnotatedElement对象之后,程序就可以调用该对象的如下四个个方法来访问Annotation信息:

  方法1:《T extends Annotation》 T getAnnotation(Class《T》 annotationClass): 返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。

  方法2:Annotation getAnnotations():返回该程序元素上存在的所有注解。

  方法3:boolean is AnnotationPresent(Class《?extends Annotation》 annotationClass):判断该程序元素上是否

Java中的注解到底是如何工作的

注解是用来描述Java类的,可以自定义注解,然后通过反射获取注解执行指定的动作。

举个简单的例子

这样就可以通过反射来获取到一些元信息了,相当于配置和业务逻辑实现了分离。

当然这个自定义注解还需要依赖一些特定的注解,我们称为元注解。一共有5种:

@Retention:存活的周期

RetentionPolicy.SOURCE

保留在源码阶段

RetentionPolicy.CLASS

编译

RetentionPolicy,RUNTIME 运行阶段

@Documented 将注解中的元素包含到JavaDoc中

@Target 注解可以用到的地方 有类、方法、属性等

@Inherited 继承

@Repeatable 可重复

Java开发中使用Spring框架带来的好处是什么

spring可以说是在JAVA开发者中最鼎鼎大名的框架了,很多人从来没有看过jdk源码,却对spring中的一切津津乐道,可以说spring从jdk中诞生,但是却无限增加了JAVA的魅力!

spring诞生背景是什么?

以前的JAVA对象,无论是在方法中使用,或者注入都需要new出来,由应用程序或者直接说开发者中进行管理,不仅会创建大量对象,还难属于强耦合,spring凭借着IOC(控制反转)的理念将对象的创建与维护都使用spring容器来做,通过依赖注入实现对象的在运行期的注入使用!

spring有什么好处?

除了上面说到的控制反转,管理对象以外,spring还集成了诸多优秀的功能!!

1,解耦:用对代码的低侵入性消除了原本对象之间的强依赖关系!

2,spring aop:面向切面编程,可以让我们把类似于日志辅助,安全验证,拦截等等这种非业务代码抽象出来,实现与业务代码的解耦!

3,spring提供了方便的组件插拔,能让开发者快速的集成诸如缓存,数据库连接,消息等更为丰富的组件!

4,spring支持事务处理,通过简单的注解就可以开启事务!

5,spring家族的springboot可以用来当做微服务基础架构,springcloud更是只需要很少的配置和代码编写便能获得一个稳定的服务架构!

spring可以说是好处多多,很多人把spring当做JAVA圣经,不仅获得良好的使用体验,从spring源码学到编程技巧,设计模式等!

关于spring,还有更多话要说,以后会逐步分享,敬请关注。。。

java中注解方式是否是侵入

一个非常好的问题。我是工作多年的Web应用架构师,来回答一下这个问题。欢迎关注我,了解更多IT专业知识。

Java注解不是代码侵入,只是在源文件中嵌入“附加”信息,不改变原程序的运行。获取注解信息时通过反射机制读取。


一,Java注解用途

Java从5.0开始支持注解,Spring框架也从2.5开始舍弃xml配置,使用注解。

Java Annotation注解也叫元数据,不改变程序的运行,在编译、加载、运行时被读取,可以被很多工具使用,比如代码扫描工具、开发工具和部署工具等。

Java注解用途广泛,熟练使用它们有助于提高代码质量和开发效率,也是工程师水平高低的一个反映。


二,Java注解保留策略

声明注解时,指定不同的保留策略RetentionPolicy,比如@Override在编译时就被丢弃了,@Bean注解一直保留到运行时。


三,Java注解分类

Java注解很多,应用于多种功能场景,可以声明在package包、类、方法、成员变量、局部变量、形参等前面,用来对这些元素进行说明和注释。我们在实际开发工作中,会经常使用到一些注解,比如@Override, @Test,还有一些Spring注解,比如@Service, @Autowired, @SpringBootApplication

Java + Spring Boot开发时,用到的注解按照来源可以分类为:Java内置注解、Spring注解、Web注解、自定义注解,等等。


四,如何读取注解?

Package、Class、Constructor、Method、Field都实现了接口AnnotatedElement,该接口位于反射包java.lang.reflect中,调用功能函数获取注解信息:

比如声明一个HelloAnnotation注解,创建一个HelloClass类,然后增加注解。代码运行读取注解信息时,调用Class实现的AnnotatedElement反射接口函数,示例代码如下: