@Override、@Repository、@Service、@Autowired、@Controller、@RequestMapping
这些都是 Java 开发中常用的注解(Annotation),主要用于简化代码、实现特定功能或标记类 / 方法的作用,尤其在 Spring 框架中被广泛使用。以下是它们的详细说明:
1. @Override
- 核心作用:强制检查当前方法是否真的重写了父类(或接口)中的方法。
- 底层原理:
是 Java 自带的标记型注解(没有属性),仅在编译期生效。编译器会验证:- 父类中是否存在方法名、参数列表完全一致的方法(方法签名相同);
- 方法返回值类型是否兼容(协变返回类型除外);
- 访问修饰符是否合法(子类重写方法不能缩小父类方法的访问范围)。
- 使用场景:
重写任何父类方法时(如Object
类的toString()
、equals()
,或自定义父类 / 接口的方法)。 - 典型错误:
若方法名拼写错误(如toStrng()
),或参数列表与父类不一致,编译器会直接报错,避免运行时逻辑错误。 - 示例:
class Parent {
public void print() {}
}
class Child extends Parent {
@Override // 正确:重写父类print()
public void print() {}
// @Override 错误:父类中没有print(int)方法,编译报错
public void print(int a) {}
}
2. @Repository
- 核心作用:标记数据访问层(DAO)的实现类,是 Spring 的 ** stereotype 注解 **(用于标注组件类型)。
- 底层原理:
- 被
@Repository
标记的类会被 Spring 的ComponentScan
扫描到,并自动注册为容器中的 Bean(默认 Bean 名称为类名首字母小写,如UserDaoImpl
→userDaoImpl
)。 - 额外功能:Spring 会为该类织入 AOP 切面,自动将数据库相关异常(如
SQLException
)转换为 Spring 统一的DataAccessException
(方便异常统一处理)。
- 被
- 使用场景:
所有与数据库交互的类(如 MyBatis 的 Map