1. @Controller
说明:该注解标记一个类作为Spring MVC控制器,用于处理HTTP请求和响应。
适用场景:在使用Spring MVC进行Web开发时,需要使用@Controller注解来标记Controller类,让Spring识别。
案例:
@Controller
@RequestMapping("/user")
public class UserController {
...
}
2. @RequestMapping
说明:该注解用于定义一个请求映射到控制器的方法或类。
适用场景:在Spring MVC中使用@RequestMapping注解,可以将HTTP请求映射到相应的处理方法或类上。
案例:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET, path = "/{id}")
public User getUserById(@PathVariable("id") Long id) {
...
}
}
3. @Autowired
说明:该注解可以自动装配依赖对象,省去手动编写构造器或setter方法的繁琐过程。
适用场景:通常在Spring容器中装配Bean时,需要使用@Autowired注解来实现自动装配。
案例:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
...
}
4. @Service
说明:该注解标记一个类作为Spring的业务逻辑组件(Service层)。
适用场景:在使用Spring进行业务逻辑开发时,需要使用@Service注解来标记服务类,让Spring识别。
案例:
@Service
public class UserServiceImpl implements UserService {
...
}
5. @Repository
说明:该注解标记一个类作为Spring的DAO组件(Repository层)。
适用场景:在使用Spring进行数据访问开发时,需要使用@Repository注解来标记数据访问对象(DAO),让Spring识别。
案例:
@Repository
public interface UserDao {
User getById(Long id);
...
}
6. @Transactional
说明:该注解标记一个方法或类需要事务支持,实现了基于注解的声明式事务管理。
适用场景:在开发中需要使用事务进行多个操作的原子性保证,使用@Transactional注解可以简单地实现事务的控制。
案例:
@Service
public class UserServiceImpl implements UserService {
@Transactional
public void saveUser(User user) {
userDao.save(user);
...
}
}
7. @Component
说明:该注解标记一个类为Spring的组件,是最常见的注解之一。
适用场景:在使用Spring进行组件开发时,通常会使用@Component注解标记组件类,以便让Spring自动扫描并装配Bean。
案例:
@Component
public class User {
...
}
8. @Aspect
说明:该注解标记一个类为Aspect切面,实现了AOP切面的功能。
适用场景:在开发过程中需要使用AOP实现类似日志记录、权限校验等通用功能,使用@Aspect注解可以定义切面类并指定相应的切入点表达式。
案例:
@Aspect
@Component
public class LogAspect {
@Before("execution(* com.example.service..*.*(..))")
public void logBefore(JoinPoint joinPoint) {
...
}
}
9. @Pointcut
说明:该注解用于定义一个切入点,即切面要拦截到的方法或类。
适用场景:在使用AOP开发时,需要使用@Pointcut注解定义切入点表达式,以便后面的@Before、@After等注解可重用。
案例:
@Pointcut("execution(* com.example.service..*.*(..))")
private void serviceLog() {}
10. @Before/@AfterReturning/@AfterThrowing/@Around
说明:这些注解用于定义切面的具体功能代码,实现了AOP中的前置通知、后置通知、异常通知和环绕通知等功能。
适用场景:在使用AOP开发时,为了实现特定的通知功能,可以使用@Before、@AfterReturning、@AfterThrowing、@Around等注解进行定义。
案例:
@Before("serviceLog()")
public void logBefore(JoinPoint joinPoint) {}
@AfterReturning("serviceLog()")
public void logAfterReturning(JoinPoint joinPoint, Object result) {}
@AfterThrowing("serviceLog()")
public void logAfterThrowing(JoinPoint joinPoint, Throwable throwable) {}
@Around("serviceLog()")
public void logAround(ProceedingJoinPoint pjp) {}
11. @Configuration
说明:该注解标记一个类为Spring的配置类,通常会包含@Bean和@Value等注解。
适用场景:在使用Spring进行配置时,可以使用@Configuration注解定义配置类,定义Bean以及读取属性文件或环境变量等。
案例:
@Configuration
public class AppConfig {
@Bean
public User user() {
...
}
@Value("${app.name}")
private String appName;
}
12. @Bean
说明:该注解用于将方法返回的对象注入到Spring容器中。
适用场景:在使用Java代码配置Bean时,需要使用@Bean注解将方法返回的对象注册到Spring容器中。
案例:
@Configuration
public class AppConfig {
@Bean
public User user() {
...
}
}
13. @Value
说明:该注解用于从属性文件或环境变量中读取值注入到字段或方法参数中。
适用场景:在使用Java代码配置属性时,使用@Value注解可以方便地读取配置文件或环境变量的值。
案例:
@Configuration
public class AppConfig {
@Value("${app.name}")
private String appName;
}
14. @Profile
说明:该注解标记一个bean为某个环境(如dev、test、prod)下使用的bean。
适用场景:在开发环境、测试环境和生产环境下需要使用不同的配置,可以使用@Profile注解定义不同环境下的Bean。
案例:
@Configuration
@Profile("dev")
public class DevConfig {
...
}
@Configuration
@Profile("prod")
public class ProdConfig {
...
}
15. @Conditional
说明:该注解根据指定条件决定是否创建bean。
适用场景:当Bean的创建条件比较复杂时,可以使用@Conditional注解来定义判断条件。
案例:
@Bean
@Conditional(DevEnvironmentCondition.class)
public UserService userService() {
...
}
16. @EnableAspectJAutoProxy
说明:该注解启用AspectJ注解驱动的自动代理功能,实现AOP的功能。
适用场景:在使用AOP开发时需要使用@EnableAspectJAutoProxy启用AspectJ注解驱动的自动代理功能。
案例:
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
...
}
17. @EnableTransactionManagement
说明:该注解启用事务管理功能,实现声明式事务的功能。
适用场景:在开发中需要使用事务进行多个操作的原子性保证,可以使用@EnableTransactionManagement注解启用事务管理功能。
案例:
@Configuration
@EnableTransactionManagement
public class AppConfig {
...
}