Java中的常见注解

Spring和Spring MVC是两个紧密相关但又不同的框架,它们都使用一系列注解来简化开发。以下是Spring和Spring MVC中一些常用的注解:

一. Spring 注解:

1. @Component

@Component 注解是 Spring Framework 中的一个核心注解,用于标识一个类作为 Spring 容器管理的组件。被 @Component 注解标记的类将被 Spring 自动扫描并注册为 Spring 应用上下文中的一个 Bean,从而可以在应用中进行依赖注入和其他 Spring 功能的使用。

@Component 注解通常用于标识普通的 Java 类,用于表示该类是一个 Spring 组件,需要由 Spring 进行管理。这样的类通常包括业务逻辑组件、数据访问组件、工具类等。

除了 @Component 注解之外,Spring 还提供了一系列其他的注解,如 @Service@Repository@Controller 等,它们都是 @Component 的扩展,用于在特定的场景下提供更具体的语义。

@Component
public class MyComponent {

    public void doSomething() {
        System.out.println("MyComponent is doing something...");
    }
}

在这个示例中,MyComponent 类被 @Component 注解标记,表示它是一个 Spring 组件,将由 Spring 容器进行管理。Spring 在扫描到这个类时,会自动创建一个 MyComponent 的实例,并将其注册为一个 Bean,可以在应用中使用 @Autowired 或其他方式进行注入或调用。

总之,@Component 注解用于标识一个类作为 Spring 容器管理的组件,使得该类可以被 Spring 自动发现、创建和管理,并可以在应用中进行依赖注入和其他 Spring 功能的使用。

2. @Autowired:

@Autowired 是 Spring Framework 中的一个注解,用于实现自动装配(Autowired)功能,可以自动将标记的字段、方法或构造函数与对应类型的 Bean 进行关联。这样,在需要依赖注入的地方,Spring 会自动查找匹配的 Bean,并将其注入到标记了 @Autowired 的地方。

@Autowired 注解可以标记在字段、构造函数、Setter 方法等地方,通常与 @Component@Service@Repository 等注解一起使用,以实现依赖注入。

用于进行依赖注入,将一个bean注入到另一个bean中。

字段注入:

构造函数注入:

@Component
public class MyComponent {

    private final MyDependency dependency;

    @Autowired
    public MyComponent(MyDependency dependency) {
        this.dependency = dependency;
    }
}
 

Setter 方法注入:

@Component
public class MyComponent {

    private MyDependency dependency;

    @Autowired
    public void setDependency(MyDependency dependency) {
        this.dependency = dependency;
    }

    // 省略其他代码
}

总之,@Autowired 注解用于实现自动装配,可以将依赖注入到标记了 @Autowired 的字段、构造函数、方法等地方,从而简化了 Spring 应用中 Bean 的配置和管理。

3. @Configuration:

@Configuration 是 Spring Framework 中的一个注解,用于标识一个类作为配置类,通常与其他注解一起使用,用于配置 Spring 容器和应用上下文中的 Bean。

在 Spring 应用中,通常会有一些需要配置的 Bean,比如数据源、事务管理器、消息队列连接工厂等。使用 @Configuration 注解的类可以提供这些 Bean 的配置信息,并将它们注册到 Spring 容器中。

用于定义配置类,替代XML配置文件。
   
   ```java
   @Configuration
   public class AppConfig {

       @Bean
       public MyService myService() {
           return new MyService();
       }
   }
   ```

@Configuration 注解通常与以下几种注解一起使用:

@Bean: 用于定义一个 Bean,并将其注册到 Spring 容器中。在 @Configuration 注解的类中,可以使用 @Bean 注解定义各种 Bean。

@Configuration
public class AppConfig {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}
 

@ComponentScan: 用于自动扫描指定包及其子包中的组件,并将其注册到 Spring 容器中。通常与 @Configuration 注解一起使用,可以在配置类中启用自动扫描。

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // 省略其他配置
}
 

@Import: 用于导入其他配置类,将其配置信息合并到当前配置类中。可以通过 @Import 注解将多个配置类组合在一起。

@Configuration
@Import({DataConfig.class, SecurityConfig.class})
public class AppConfig {
    // 省略其他配置
}
 

4. `@Value`:

@Value 是 Spring Framework 中的一个注解,用于将外部配置文件中的属性值注入到 Spring 管理的 Bean 中。通过 @Value 注解,可以方便地将配置文件中的属性值注入到 Spring Bean 的字段、构造函数参数、Setter 方法参数等位置。

@Value 注解的语法格式为 @Value("${property.key}"),其中 ${property.key} 是配置文件中的属性键,Spring 会自动从配置文件中读取对应的属性值,并将其注入到标记了 @Value 注解的位置。

用于注入外部配置属性的值。
   
   ```java
   @Service
   public class MyService {

       @Value("${my.property}")
       private String myProperty;
   }
   ```

二.  Spring MVC 注解:

1. `@Controller`:

用于标记一个类作为Spring MVC的控制器。
   
   ```java
   @Controller
   public class MyController {

       @RequestMapping("/hello")
       public String sayHello() {
           return "hello";
       }
   }
   ```

2. `@RequestMapping`:

用于映射HTTP请求的URL到具体的控制器方法。

 `@RequestMapping`是最通用的映射注解,可以用于映射多个HTTP请求方法。可以用在类级别和方法级别。地位等同于@WebServlet
   - 可以通过`method`属性指定请求方法。

 ```java
   @Controller
   @RequestMapping("/example")
   public class ExampleController {

       @RequestMapping(value = "/path", method = RequestMethod.GET)
       public String handleGetRequest() {
           return "view";
       }

       @RequestMapping(value = "/path", method = RequestMethod.POST)
       public String handlePostRequest() {
           // Handle POST request
           return "view";
       }
   }
   ```

 `@RequestMapping`中的`consumes`和`produces`属性:

通过`consumes`属性指定接受的请求的`Content-Type`,通过`produces`属性指定产生的响应的`Content-Type`。
   
   ```java
   @Controller
   @RequestMapping(value = "/example", consumes = "application/json", produces = "application/json")
   public class ExampleController {

       @RequestMapping(value = "/path", method = RequestMethod.POST)
       public String handleJsonPostRequest(@RequestBody MyObject myObject) {
           // Handle JSON POST request
           return "view";
       }
   }

3. `@RequestParam`:

用于从请求中获取参数值。
   
   ```java
   @Controller
   public class MyController {

       @RequestMapping("/greet")
       public String greet(@RequestParam("name") String name) {
           return "Hello, " + name + "!";
       }
   }
   ```

4. `@ResponseBody`:

用于指示方法返回的对象应该被写入响应体。

通常用于RESTful风格的控制器方法,以返回JSON、XML等格式的数据。

   ```java
   @RequestMapping("/example")
   @ResponseBody
   public String example() {
       return "This is a response body.";
   }
   ```

   
   ```java
   @RestController
   public class MyRestController {

       @RequestMapping("/data")
       @ResponseBody
       public Map<String, String> getData() {
           Map<String, String> data = new HashMap<>();
           data.put("key", "value");
           return data;
       }
   }
   

在Spring MVC中,用于映射请求方法的注解有几种,具体选择取决于你希望处理的HTTP请求类型以及处理方式。以下是一些常见的请求方法注解:

5. `@GetMapping`、`@PostMapping`、`@PutMapping`、`@DeleteMapping`等:

这些是`@RequestMapping`的缩写形式,分别用于处理GET、POST、PUT、DELETE等HTTP请求方法。
   
   ```java
   @Controller
   @RequestMapping("/example")
   public class ExampleController {

       @GetMapping("/path")
       public String handleGetRequest() {
           return "view";
       }

       @PostMapping("/path")
       public String handlePostRequest() {
           // Handle POST request
           return "view";
       }
   }
   ```

6. `@RequestMapping`的缩写注解:

 `@GetMapping`、`@PostMapping`等都是`@RequestMapping`的缩写形式,用于简化代码。
   
   ```java
   @Controller
   @RequestMapping("/example")
   public class ExampleController {

       @GetMapping("/path")
       public String handleGetRequest() {
           return "view";
       }

       @PostMapping("/path")
       public String handlePostRequest() {
           // Handle POST request
           return "view";
       }
   }
   ``

在Spring MVC中,有一些用于注解响应类的注解,用于配置响应的一些属性。以下是一些常用的响应类注解:

7.@RequestBody:

@RequestBody 是 Spring Framework 中的一个注解,通常用于处理 HTTP 请求体中的数据,并将其绑定到方法参数上。

在 Spring MVC 或 Spring Boot 应用中,当客户端发送 HTTP POST 或 PUT 请求时,通常会携带一些数据,这些数据可以是 JSON、XML 或其他格式的数据。@RequestBody 注解告诉 Spring 框架将请求体中的数据转换为指定类型的对象,并将其作为方法的参数传递

@RestController
public class MyController {

    @PostMapping("/example")
    public String handleRequest(@RequestBody MyRequestObject requestObject) {
        // 处理请求体中的数据
        String data = requestObject.getData();
        // 执行业务逻辑
        // 返回响应
        return "Received data: " + data;
    }
}

class MyRequestObject {
    private String data;

    // 省略 getter 和 setter 方法
}

在这个示例中,handleReqeust() 方法使用 @PostMapping 注解将处理 POST 请求,并且使用 @RequestBody 注解将请求体中的数据绑定到 MyRequestObject 类型的参数上。这样,当客户端发送 POST 请求到 /example 路径时,Spring 框架会自动将请求体中的数据转换为 MyRequestObject 对象,并传递给 handleRequest() 方法进行处理。

总之,@RequestBody 注解用于将 HTTP 请求体中的数据转换为 Java 对象,并将其作为方法参数使用,以便在 Spring MVC 或 Spring Boot 应用中处理客户端发送的数据。

7. `@RestController`:

与`@Controller`相似,但它的每个方法都默认使用`@ResponseBody`注解。

适用于构建RESTful API。

   ```java
   @RestController
   @RequestMapping("/api")
   public class ExampleRestController {

       @RequestMapping("/data")
       public Map<String, String> getData() {
           Map<String, String> data = new HashMap<>();
           data.put("key", "value");
           return data;
       }
   }
   ```

8. `@ResponseStatus`:

用于指定控制器方法的响应状态码和原因短语。

   ```java
   @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Resource not found")
   public class ResourceNotFoundException extends RuntimeException {
       // ...
   }
   ```

9. `@ModelAttribute`:

@ModelAttribute 是 Spring MVC 中的一个注解,它用于绑定请求参数到模型对象。这个注解可以应用于方法参数或方法上。

当应用于方法参数时,Spring MVC 会尝试从请求参数、路径变量、请求体等中自动绑定数据到该参数对象。这常用于表单数据的绑定。

@PostMapping("/register")  
public String register(@ModelAttribute("user") User user) {  
    // 在这里,user 对象已经被自动填充了请求参数  
    userService.save(user);  
    return "redirect:/home";  
}

当应用于方法上时,该注解表示该方法的返回值应该添加到模型中,这样视图就可以访问这个对象了。

@ModelAttribute("user")  
public User populateUser() {  
    return new User("default", "defaultPassword");  
}  
  
@GetMapping("/form")  
public String showForm(@ModelAttribute("user") User user) {  
    // 这里 user 对象已经被 populateUser 方法填充了  
    return "form";  
}

三. Lombok注解

1.@Slf4j

@Slf4j 是 Lombok 库提供的一个注解,它用于简化日志记录。通过添加这个注解,Lombok 会自动生成一个 SLF4J(Simple Logging Facade for Java)的 Logger 实例,并将其命名为当前类的类名。这样,你就可以直接使用 log 对象来记录日志,而无需显式地创建 Logger 实例。

要使用 @Slf4j,你需要首先在你的项目中添加 Lombok 依赖,并在你的 IDE 中安装 Lombok 插件(对于大多数主流 IDE,如 IntelliJ IDEA 和 Eclipse,都有相应的 Lombok 插件)。

2.@ApiModel

@ApiModel 注解用于类上,以提供有关模型的额外信息。它通常用于标识 API 返回的响应对象或请求对象。

@ApiModel(description = "用户信息模型")  
public class User {  
    // ... 字段和方法 ...  
}

3.@ApiModelProperty

@ApiModelProperty 注解用于类的字段上,以提供有关字段的额外信息,例如描述、是否必填、数据类型等。

@ApiModel(description = "用户信息模型")  
public class User {  
  
    @ApiModelProperty(value = "用户ID", required = true)  
    private Long id;  
  
    @ApiModelProperty(value = "用户名", required = true, example = "john_doe")  
    private String username;  
  
    @ApiModelProperty(value = "用户邮箱", required = false)  
    private String email;  
  
    // ... getter 和 setter 方法 ...  
}

4.@Data

@Data是Lombok库提供的一个注解,它可以自动为Java类生成常用的方法,包括getter、setter、equals、hashCode和toString等。使用@Data注解可以简化代码,使代码更加简洁易读。

在类上添加@Data注解后,Lombok会自动为该类生成这些方法,而无需手动编写。这不仅可以减少样板代码的编写,提高开发效率,还可以确保生成的代码具有正确性和一致性。

@Data注解适用于大部分的Java类,特别是那些只包含属性和简单逻辑的POJO(Plain Old Java Object)类。通过封装数据和与数据有关的方法,@Data注解增强了数据的安全性和隐蔽性。

需要注意的是,由于@Data注解会自动生成大量的代码,如果类中包含大量字段,可能会影响编译速度。因此,在使用@Data注解时,需要根据实际情况进行权衡和选择。

总的来说,@Data注解是一个强大的工具,可以帮助开发人员简化Java类的编写,提高代码质量和开发效率。

四. MySQL PLUS的注解

1. @TableName

用于指定实体类对应的数据库表名。如果不使用这个注解,MyBatis-Plus默认会采用类名作为表名,驼峰命名规则也会被自动转换为下划线命名。

@TableName("user_info")  
public class UserInfo {  
    // ...  
}

2. @TableId

用于标识实体类的主键字段。它有多种属性,比如value(用于指定字段名)、type(用于指定主键类型,比如自增、UUID等)。

public class UserInfo {  
    @TableId(value = "id", type = IdType.AUTO)  
    private Long id;  
    // ...  
}

3. @TableField

用于标识实体类的非主键字段,并可以定义字段的填充策略、是否进行更新等。

public class UserInfo {  
    @TableField(fill = FieldFill.INSERT)  
    private Date createTime;  
    // ...  
}

4. @Version

用于实现乐观锁。通常与MyBatis-Plus的乐观锁插件一起使用,用于记录数据的版本信息,在更新数据时检查版本是否一致。

public class UserInfo {  
    @Version  
    private Integer version;  
    // ...  
}

5. @EnumValue

这个注解可能不是MyBatis-Plus的标准注解。但在一些场景中,它可以用于指定枚举类型字段的数据库存储值。这个注解的具体使用可能依赖于具体的实现或扩展库。

6. @TableLogic

用于标识逻辑删除字段。MyBatis-Plus支持逻辑删除,即数据不会被物理删除,而是通过修改某个字段(通常是is_deleteddeleted)的值来表示数据已被删除。

public class UserInfo {  
    @TableLogic  
    private Boolean deleted;  
    // ...  
}

8.@KeySequence

这个注解可能用于标识主键的生成策略,尤其是在使用序列(如Oracle数据库中的序列)生成主键时。但在MyBatis-Plus的标准文档中,这个注解并不常见,可能是特定版本或扩展库中的注解。

9.@OrderBy

这个注解通常用于标识排序字段,用于自定义排序规则。在MyBatis-Plus中,排序通常通过LambdaQueryWrapper等查询构造器实现,而不是通过注解。因此,这个注解可能不是MyBatis-Plus的标准注解,而是来自其他库或扩展。


五.jeecg boot 的注解

1.@Dict

@Dict 注解是 Jeecg Boot 中用于字典数据转换的一个注解。Jeecg Boot 是一个基于代码生成器的 Java 快速开发平台,它使用了很多自定义注解来简化开发流程,其中 @Dict 就是用于将数据库中的字典编码(通常是数字或字符串)转换为前端界面展示的文字描述的。

public class User {  
    private Long id;  
      
    @Dict(dicCode = "sex") // 这里假设“sex”是字典管理中定义的性别字典的编码  
    private String sexCode; // 这个字段存储的是数据库中的性别编码  
     
}

也可用于翻译别的表中的值

@Excel(name = "社区ID", width = 15,dictTable = "community_id")

@Dict(dicCode = "id",dicText = "depart_name",dictTable="sys_depart")

@ApiModelProperty(value = "社区ID")    

private java.lang.String communityId;
dictTable是翻译表的表名,dicCode是你存储的值在翻译表中对应的字段名称,dictText是你想翻译的内容在翻译表中对应的字段名称
 

六. Excel文件的注解

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值