在Java中,`final` 关键字用于修饰变量、方法或类,表示"最终的"、"不可改变的"。
对于实例变量,`final` 的含义是:
1. **不可重新赋值**:一旦被初始化后,就不能再改变引用
2. **必须初始化**:必须在声明时或构造函数中进行初始化
在你的代码中:
```java
private final RolePermissionMapper rolePermissionMapper;
```
这意味着:
- `rolePermissionMapper` 变量一旦被赋值后就不能再指向其他对象
- 必须通过构造函数注入来初始化(配合 `@RequiredArgsConstructor` 注解)
**为什么在Spring中使用 `final`?**
1. **不可变性**:确保依赖注入后不会被意外修改
2. **线程安全**:final 字段在多线程环境下是安全的
3. **构造函数注入**:配合 Lombok 的 `@RequiredArgsConstructor` 自动生成构造函数
4. **最佳实践**:Spring 官方推荐使用构造函数注入而非字段注入
等效的传统写法:
```java
@Service
public class RolePermissionServiceImpl implements IRolePermissionService {
private final RolePermissionMapper rolePermissionMapper;
public RolePermissionServiceImpl(RolePermissionMapper rolePermissionMapper) {
this.rolePermissionMapper = rolePermissionMapper;
}
}
```
使用 `final` + `@RequiredArgsConstructor` 让代码更简洁且更安全。