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
。