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_deleted
或deleted
)的值来表示数据已被删除。
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是你想翻译的内容在翻译表中对应的字段名称