俩篇文章(一)带新手搞清楚 java 中 ——“ 注解 & 注释 ”的一切区别!!(重点在注解)

前言:

在新手学习java过程中,一定会遇到代码中间出现 注解 和 注释 的情况。这个不管现在学习还是以后从事企业级开发的规范来讲都是至关重要的。

那么就由小编带着大家彻底搞清楚这二者的区别是什么,具体如何使用,对于新手而言,做到什么程度就足够了!!开始之前,大家可不可以给小编一个免费的赞或者关注(我们一起进步啊!!!!)

概述:

注释 是为了帮助人类阅读代码,不会对程序的执行产生任何影响。注解 是为了给编译器或运行时环境提供额外的信息,可能会影响程序的编译或运行行为。

1)注解(Annotation)是从JDK5.0开始引入,以“@注解名”在代码中存在。

例如:

@Override@Deprecated@SuppressWarnings(value=”unchecked”)Annotation 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成 员变量、参数、局部变量的声明。还可以添加一些参数值,这些信息被保存在 Annotation 的 “name=value” 对中。 注解可以在类编译、运行时进行加载,体现不同的功能。

2)注解与注释:

注解也可以看做是一种注释,通过使用 Annotation,程序员可以在不改变原有 逻辑的情况下,在源文件中嵌入一些补充信息。

但是,注解,不同于单行注释 和多行注释。

对于单行注释和多行注释是给程序员看的。 而注解是可以被编译器或其他程序读取的。程序还可以根据注解的不同,做出相应的 处理。

大白话拆解和解释:

注释 (Comments)

想象一下你在写一本日记,有时候你可能会在旁边写下一些小贴士或者解释,告诉自己为什么这么做或记录下当时的想法。这些小贴士和解释就是“注释”。在Java代码里,注释也是类似的,它是给程序员看的,不是给计算机看的。计算机在编译代码时会忽略所有的注释。注释的作用是帮助程序员理解代码的意图和逻辑,特别是当代码被其他人阅读或维护的时候。

举个栗子:

// 这是一个单行注释

/*

这是一个多行注释,

可以跨越多行。

*/

注解 (Annotations)

你在日记旁边不仅写了小贴士,还贴了一些彩色标签,每个标签都有特殊的意义,比如红色标签表示重要事项,绿色标签表示待办事项等。这些标签就像Java中的“注解”。注解是给编译器或运行时环境(如JVM)看的,它们可以影响程序的行为。注解可以添加到包、类、方法、字段等上面,用来提供额外的信息或指示某些操作应该被执行。例如:

@Override:这是一个告诉编译器“我正在重写父类的方法”的注解。如果方法没有正确重写,编译器会给出错误提示。@Deprecated:这个注解是用来标记一个不再推荐使用的元素,比如方法或类。当你使用被标记为@Deprecated的元素时,编译器会警告你。@SuppressWarnings("unchecked"):这个注解告诉编译器忽略特定的警告信息,比如未检查的转换警告。

注解的重要性:

①在JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。②在JavaEE/Android 中注解占据了更重要的角色,例如用来配置应用程序的任何切 面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。③未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于 注解的,Hibernate3.x 以后也是基于注解的,Struts2有一部分也是基于注解的 了。注解是一种趋势,一定程度上可以说:框架 = 注解 + 反射 + 设计模式。

大白话拆解:

1. 简化配置:

你如果正在准备一顿丰盛的晚餐。现在你需要按照一本非常详细的菜谱一步一步来做,可能会花很多时间去翻阅和查找信息。但是,如果所有的步骤都被简化成一些简单的标签(比如“先加盐”、“煮10分钟”),那么做饭就会变得容易得多。

在JavaEE/Android中,注解就像是这些标签,它们简化了应用程序的配置。以前,开发者需要编写大量的XML文件来配置应用程序的行为,这就像按照复杂的菜谱一步步做。现在,通过使用注解,你可以直接在代码中添加配置信息,减少了繁杂的配置文件,使代码更加简洁易读。

举个栗子:

传统方式(使用XML配置)

现在有一个简单的Spring MVC控制器,用于处理HTTP请求。在早期版本的Spring中,你可能需要在XML文件中定义这个控制器的bean,并设置它的URL映射。

XML配置 (spring-config.xml):

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd">

控制器类 (MyController.java):

package com.example;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

public class MyController {

@RequestMapping(value = "/hello", method = RequestMethod.GET)

public String sayHello() {

return "Hello, World!";

}

}

现代方式(使用注解)

随着Spring框架的发展,现在可以完全依赖注解来完成同样的配置,不再需要额外的XML文件。

控制器类 (MyController.java) with annotations:

package com.example;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

@Configuration

@ComponentScan(basePackages = "com.example")

public class AppConfig {

// 配置类可以包含其他Bean定义或配置

}

@RestController

@RequestMapping("/api")

public class MyController {

@GetMapping("/hello")

public String sayHello() {

return "Hello, World!";

}

}

代码解释和总结:

@Configuration 和 @ComponentScan 注解用来替代XML中的bean定义和组件扫描。@RestController 和 @RequestMapping 注解直接在控制器类上指定这是个RESTful Web服务控制器,并指定了基础的URL路径。@GetMapping 是 @RequestMapping(method = RequestMethod.GET) 的简写,它进一步简化了HTTP GET请求的映射。通过这种方式,所有配置信息都集中到了Java代码中,避免了XML文件的繁琐,同时也让代码更加紧凑、易读。此外,由于IDE通常能更好地支持注解,开发者可以获得更好的代码补全和错误检查功能。

2. 提高开发效率:

继续沿用做饭的例子,现在有一个智能厨房助手,它能自动识别你贴在食材上的标签,并告诉你接下来该做什么。这样你就不用再反复查看菜谱了,做饭的速度会快很多。

在编程中,注解就像这些智能标签。它们可以让框架(如Spring、Hibernate等)自动完成一些常见的任务,比如对象创建、依赖注入、事务管理等。这大大提高了开发者的效率,因为很多重复性的任务都可以由框架自动处理。

举个栗子:

传统方式(使用XML配置)

我们有一个简单的服务类 UserService,它依赖于一个数据访问对象 UserDAO。在传统的Spring应用中,你可能需要在XML文件中定义这些bean,并设置它们之间的依赖关系。

XML配置 (spring-config.xml):

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

Service类 (UserService.java):

package com.example;

public class UserService {

private UserDAO userDAO;

public void setUserDAO(UserDAO userDAO) {

this.userDAO = userDAO;

}

public void createUser(String username) {

userDAO.save(username);

}

}

DAO类 (UserDAO.java):

package com.example;

public class UserDAO {

public void save(String username) {

// 保存用户到数据库的逻辑

System.out.println("Saving user: " + username);

}

}

现代方式(使用注解)

通过使用注解,我们可以让Spring框架自动完成依赖注入,而不需要额外的XML配置。Service类 (UserService.java) with annotations:

package com.example;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

@Service

public class UserService {

private final UserDAO userDAO;

@Autowired

public UserService(UserDAO userDAO) {

this.userDAO = userDAO;

}

public void createUser(String username) {

userDAO.save(username);

}

}

DAO类 (UserDAO.java) with annotations:

package com.example;

import org.springframework.stereotype.Repository;

@Repository

public class UserDAO {

public void save(String username) {

// 保存用户到数据库的逻辑

System.out.println("Saving user: " + username);

}

}

代码总结和解释;

@Service 和 @Repository 注解分别标记了 UserService 和 UserDAO 类为Spring管理的bean。@Autowired 注解用于构造函数,使得Spring能够自动将 UserDAO 的实例注入到 UserService 中。开发者不再需要编写繁琐的XML配置文件,也不用手动管理依赖关系,Spring框架会自动处理这些任务。这不仅提高了代码的简洁性,还大大提升了开发效率。

随便看看