Spring 框架是一个广泛使用的 Java 应用程序开发框架,它提供了一整套用于构建复杂应用的工具。Spring 使用了许多注解来简化配置和代码编写。下面是一些常用的 Spring 注解及其简要说明:

1. @Component, @Service, @Repository, @Controller

  • @Component: 是一个通用的组件注解,用来标记任何 Java 类为 Spring 中的 Bean。
  • @Service: 通常用于标记业务逻辑层(Service 层)的 Bean。
  • @Repository: 通常用于标记数据访问层(DAO 层)的 Bean。
  • @Controller: 用于标记 Web 控制器层的 Bean。

2. @Autowired

  • 用途: 自动装配 Bean 的依赖关系。可以放在字段、构造函数或方法上。
  • 示例:
1@Autowired
2private SomeService someService;

3. @Qualifier

  • 用途: 当使用 @Autowired 时,如果有多个相同类型的 Bean 可供选择,可以使用 @Qualifier 来指定具体的 Bean。
  • 示例:
1@Autowired
2@Qualifier("primaryDataSource")
3private DataSource dataSource;

4. @Configuration 和 @Bean

  • @Configuration: 标记类作为配置类,可以替代 XML 配置文件。
  • @Bean: 定义一个 Bean 到 Spring 容器中。
  • 示例:
1@Configuration
2public class AppConfig {
3    @Bean
4    public SomeService someService() {
5        return new SomeServiceImpl();
6    }
7}

5. @Profile

  • 用途: 根据当前环境配置不同的 Bean 实例。
  • 示例:
1@Profile("development")
2@Bean
3public DataSource developmentDataSource() {
4    return new EmbeddedDatabaseBuilder()
5        .setType(EmbeddedDatabaseType.HSQL)
6        .addScript("schema.sql")
7        .build();
8}

6. @EnableAutoConfiguration

  • 用途: 启用自动配置,通常用于启动类上。
  • 示例:
1@SpringBootApplication
2public class Application {
3    public static void main(String[] args) {
4        SpringApplication.run(Application.class, args);
5    }
6}
  • 这里 @SpringBootApplication 包含了 @EnableAutoConfiguration

7. @Conditional

  • 用途: 根据条件决定是否创建 Bean。
  • 示例:
1@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
2@Bean
3public Feature feature() {
4    return new FeatureImpl();
5}

8. @Scope

  • 用途: 定义 Bean 的作用域。
  • 示例:
1@Scope("prototype")
2@Bean
3public SomeService someService() {
4    return new SomeServiceImpl();
5}

9. @Aspect, @Before, @After, @Around, @Pointcut

  • AOP 相关注解:
  • @Aspect: 标记类为 AOP 切面。
  • @Before@After@Around: 定义在方法执行前、后或周围的增强。
  • @Pointcut: 定义切入点表达式。

 10.@Transactional

  • 用途: 用于方法或类上,指示该方法或类中的方法应该在事务中执行。
  • 示例:
1@Service
2public class UserService {
3    @Transactional
4    public void createUser(User user) {
5        // 创建用户逻辑
6    }
7}

@Transactional 参数

  • propagation: 指定事务的传播行为,默认值为 PROPAGATION_REQUIRED
  • isolation: 指定事务的隔离级别,默认值为 ISOLATION_DEFAULT
  • readOnly: 是否为只读事务,默认为 false
  • rollbackFor: 指定哪些类型的异常会导致事务回滚。
  • noRollbackFor: 指定哪些类型的异常不会导致事务回滚。

传播行为 (Propagation)

  • PROPAGATION_REQUIRED: 如果当前存在事务,则加入该事务;如果没有事务,则新建一个。
  • PROPAGATION_REQUIRES_NEW: 总是新建一个事务,并且如果当前存在事务,则挂起当前事务。
  • PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果没有事务,则以非事务方式执行。
  • PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果没有事务,则抛出异常。
  • PROPAGATION_NESTED: 如果当前存在事务,则在嵌套事务内执行;如果没有事务,则行为类似于 PROPAGATION_REQUIRED