注解开发

@SpringBootApplication

///@SpringBootApplication:标注这个类是一个springboot的应用
@SpringBootApplication
public class Springboot01HellowordApplication {}



@PropertySource

@PropertySource(value= "classpath:指定配置文件")
@PropertySource(value= "classpath:application.properties")
public class Person {
//独自使用SPEL表达式取出配置文件的值
@Value("${name}")
private String name;
}



@ConfigurationProperties

  • 读取配置文件的 对象
@Component
//@ConfigurationProperties(prefix = "yaml中的对象名称")
//@ConfigurationProperties(prefix = "spring.datasource")

@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
}



@ConditionalOnProperty

  • 读根据应用程序的配置属性来决定是否加载特定的bean或配置类
spring:
rabbitmq:
listener:
simple:
retry:
enabled: true #开启消费者失败重试
@Configuration
@ConditionalOnProperty(prefix = "spring.rabbitmq.listener.simple.retry",name = "enabled",havingValue = "true")
public class Error {
}



@Mapper

//这个注解表示这是一个 mybatis 的 mapper 类
@Mapper //其一
@Repository //其一
public interface UserMapper {}



@MapperScan

  • 扫描mapper包(不使用@Repository情况下,在启动器上加)
@SpringBootApplication
//扫描mapper包
//@MapperScan("com.chen.mapper")
public class Springboot05MybatisApplication {}



@Validated

  • 依赖:spring-boot-starter-validation
public class Person {
@Email //指定类型
@Email(message = "自定义格式错误提醒") //指定类型
private String name;
}



@Configuration

  • 配置类注解:这个也会被Spring容器中托管,注册搭配容器中,这本来就是一个@Component,@Configuration代表这是一个配置类,就和我们之前看的beans.xml
@Configuration
//@EnableWebMvc //导入类:DelegatingWebMvcConfiguration,从容器中获取所有webmvcconfig:自定义视图解析器
public class MyMvcConfiig implements WebMvcConfigurer {
}






@Bean

  • 注册bean:<bean id=”**方法名**” class-“**返回值**”/>
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}



@Qualifier

	//@Autowired 搭配@Qualifier(value="Srping容器中注册的id名称")  实现去容器中匹配该名称的bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager){}



@EnableWebSecurity

  • Spring Security(安全框架)
@EnableWebSecurity  //:开启WebSecurity模式
public class SecurityConfig extends WebSecurityConfigurerAdapter {}



@EnableSwagger2

  • Swagger
@Configuration
@EnableSwagger2 //开启Swagger
public class SwaggerConfig {
}



@API

  • 文档注释

实体类

  • 实体类上:@ApiModel(“注释”)
  • 属性上:@ApiModelProperty(“注释)
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}

接口

  • 接口上: @ApiOperation(“user接口”)
  • 属性上:@ApiParam(“字段”)
//放在方法上
@ApiOperation("user接口")
@PostMapping("/hello")
public User user(@ApiParam("用户名")String username){
return new User();
}



@Async

异步

  • 异步方法上
//告诉Spring这是一个异步的方法
@Async
public void hello(){
//业务
}

  • 启动器上注解开启异步
@EnableAsync  //开启异步注解功能



@Scheduled

  • 定时任务
//在特定的时间执行这个方法~Timer
//cron表达式(秒 分 时 日 月 周期:星期)
/*
?:不触发
30 15 10 * * ? :每天10点15分30 执行一次
30 0/5 10,18 * * ? :每天的10点和18点,每隔五分钟执行一次
0 15 10 ? * 1-6 :每个月的周一到周六10:15分钟执行一次
*/
@Scheduled(cron = "0 * * * * 0-7")//秒 分 时 日 月 周期(周一到周日的每天每次整0秒触发)
public void hello(){
}

  • 启动器上注解开启定时功能
@EnableScheduling//开启定时功能的注解



@CrossOrigin

  • 跨域
//当前controller支持跨域
@CrossOrigin
@RestController
public class UserContrller {}





Lombook

  1. @Getter@Setter:用于生成类的 getter 和 setter 方法。
  2. @ToString:生成 toString 方法,方便对象的字符串表示。
  3. @EqualsAndHashCode:生成 equalshashCode 方法。
  4. @NoArgsConstructor:生成无参构造方法
  5. @AllArgsConstructor:生成包含所有字段的构造方法
  6. @RequiredArgsConstructor:生成构造方法,包括带有 final 关键字的字段。
  7. @Data:生成 @Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor组合注解
  8. @Builder:生成建造者模式的构建器,用于创建不可变对象。
  9. @Value:与 @Data 类似,但生成不可变类。
  10. @Slf4j:生成一个 SLF4J 日志记录器,用于方便地记录日志。



@RequiredArgsConstructor

  • 自动生成final字段构造方法,以确保生成的构造方法参数只包括带有 final 关键字的字段
@RequiredArgsConstructor
public class User {
private final String username;
private final Address address;
}

//
Address userAddress = new Address("123 Main St", "City");
User user = new User("john_doe", userAddress);





事务


本地事务


@Transactional

  1. propagation(传播行为):指定事务的传播行为。常见的传播行为包括 REQUIREDREQUIRES_NEWSUPPORTSNOT_SUPPORTED 等。这参数定义了事务方法如何与现有事务进行交互。
  2. isolation(隔离级别):指定事务的隔离级别,用于控制多个事务之间的互相影响程度。常见的隔离级别包括 READ_COMMITTEDREAD_UNCOMMITTEDREPEATABLE_READSERIALIZABLE 等。
  3. timeout(超时时间):指定事务的超时时间,以秒为单位。如果事务在规定时间内未完成,它将被回滚。
  4. readOnly:指定事务是否为只读。如果设置为 true,事务只会读取数据而不会修改数据,可以优化性能。
  5. rollbackFornoRollbackFor:指定在哪些异常情况下事务应该回滚或不回滚。可以列出异常的类或类名。
  6. value:与 readOnly 等价,指定事务是否为只读。可以使用 valuereadOnly,二者等效。
  7. rollbackForClassNamenoRollbackForClassName:与 rollbackFornoRollbackFor 类似,但使用类名字符串而不是异常类。
  8. name:指定事务的名称。可以为事务指定一个名称以便在日志中识别。
  9. propagationBehavior:与 propagation 类似,但使用Propagation枚举来定义传播行为。
  10. isolationLevel:与 isolation 类似,但使用Isolation枚举来定义隔离级别。
  • 方法或类上都可
@Transactional(rollbackFor = Exception.class)	//无论任何异常都回滚



@EnableTransactionManagement

  • 通常用于配置类上,以启用Spring的事务管理功能。这个注解告诉Spring容器要扫描被 @Transactional 注解标记的类和方法,并配置相应的事务管理。
@Configuration
@EnableTransactionManagement
public class MyTransactionConfig {

@Bean
public DataSource dataSource() {
// 配置数据源
}

@Bean
public PlatformTransactionManager transactionManager() {
// 配置事务管理器
}
}



@TransactionManagementConfigurer

  • 可以在 Spring 应用中定义自己的事务管理器,事务属性源等,以满足特定需求。
@Configuration
@EnableTransactionManagement
public class MyTransactionConfig implements TransactionManagementConfigurer {

@Bean
public DataSource dataSource() {// 配置数据源}

@Bean
public PlatformTransactionManager transactionManager() {// 配置事务管理器}

@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return transactionManager(); // 返回自定义的事务管理器
}
}



分布式事务

@EnableGlobalMethodSecurity

Spring Security提供的注解,可用于控制方法级的安全性和事务管理。用于启用方法级的安全性控制。它通常用于配置和控制哪些方法需要进行安全验证,以及如何进行验证。这个注解的使用允许你在应用中声明性地控制方法的访问权限,以确保只有经过授权的用户能够执行这些方法

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true) // 启用方法级的安全性控制
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {

@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
return new DefaultMethodSecurityExpressionHandler();
}
}

需要指定一个或多个安全性配置类,这些配置类定义了具体的安全规则和策略。以下是一些常见的配置类,通常与 @EnableGlobalMethodSecurity 一起使用:

  1. @Secured:方法级的安全注解,允许你声明哪些角色可以访问方法。
  2. @RolesAllowed:允许你声明哪些角色可以访问方法。
  3. @PreAuthorize:使用SpEL表达式定义安全规则,允许更灵活的安全性控制。
  4. @PostAuthorize:在方法执行后进行安全性检查,也使用SpEL表达式。
  5. @PreFilter:允许你定义前置过滤器,用于过滤输入参数。
  6. @PostFilter:允许你定义后置过滤器,用于过滤方法返回的结果。



@GlobalTransactional

该注解通常与Seata分布式事务框架一起使用,以管理全局事务的状态。Seata是一个开源的分布式事务解决方案。

@Service
public class OrderService {

@Autowired
private AccountService accountService;

@GlobalTransactional
public void createOrderAndChargeAccount(Order order, double amount) {
// 扣除用户账户金额
accountService.chargeAccount(order.getUserId(), amount);
}
}




@TwoPhaseCommit

用于标记一个分布式事务的两阶段提交(2PC)。2PC是一种常见的分布式事务管理协议。




@XADataSource

允许多个资源管理器(如数据库、消息队列等)参与一个事务,以确保它们要么都成功提交,要么都回滚。在一个分布式环境中,使用XA协议的数据源能够保持数据的一致性。




@MessageListener

用于消息驱动的分布式事务处理,例如使用Apache Kafka或RabbitMQ等消息中间件。表示它是一个消息监听器,可以接收和处理特定消息。

  • 例如RabbitMQ:@MessageListener 的功能由Spring框架的 @RabbitListener 注解提供,用于监听队列
@RabbitListener(queues = "myQueue")
public void receiveMessage(String message) {}