注解开发
@SpringBootApplication
@SpringBootApplication public class Springboot01HellowordApplication {}
|
@PropertySource
@PropertySource(value= "classpath:指定配置文件") @PropertySource(value= "classpath:application.properties") public class Person { @Value("${name}") private String name; }
|
@ConfigurationProperties
@Component
@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
@Mapper @Repository public interface UserMapper {}
|
@MapperScan
- 扫描mapper包(不使用@Repository情况下,在启动器上加)
@SpringBootApplication
public class Springboot05MybatisApplication {}
|
@Validated
- 依赖:spring-boot-starter-validation
public class Person { @Email @Email(message = "自定义格式错误提醒") private String name; }
|
@Configuration
- 配置类注解:这个也会被Spring容器中托管,注册搭配容器中,这本来就是一个@Component,@Configuration代表这是一个配置类,就和我们之前看的beans.xml
@Configuration
public class MyMvcConfiig implements WebMvcConfigurer { }
|
@Bean
- 注册bean:<bean id=”**方法名**” class-“**返回值**”/>
@Bean public LocaleResolver localeResolver(){ return new MyLocaleResolver(); }
|
@Qualifier
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager){}
|
@EnableWebSecurity
@EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {}
|
@EnableSwagger2
@Configuration @EnableSwagger2 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
异步
@Async public void hello(){ }
|
@Scheduled
@Scheduled(cron = "0 * * * * 0-7") public void hello(){ }
|
@CrossOrigin
@CrossOrigin @RestController public class UserContrller {}
|
Lombook
@Getter
和 @Setter
:用于生成类的 getter 和 setter 方法。
@ToString
:生成 toString
方法,方便对象的字符串表示。
@EqualsAndHashCode
:生成 equals
和 hashCode
方法。
@NoArgsConstructor
:生成无参构造方法。
@AllArgsConstructor
:生成包含所有字段的构造方法。
@RequiredArgsConstructor
:生成构造方法,包括带有 final
关键字的字段。
@Data
:生成 @Getter
、@Setter
、@ToString
、@EqualsAndHashCode
和 @RequiredArgsConstructor
的组合注解。
@Builder
:生成建造者模式的构建器,用于创建不可变对象。
@Value
:与 @Data
类似,但生成不可变类。
@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
- propagation(传播行为):指定事务的传播行为。常见的传播行为包括
REQUIRED
、REQUIRES_NEW
、SUPPORTS
、NOT_SUPPORTED
等。这参数定义了事务方法如何与现有事务进行交互。
- isolation(隔离级别):指定事务的隔离级别,用于控制多个事务之间的互相影响程度。常见的隔离级别包括
READ_COMMITTED
、READ_UNCOMMITTED
、REPEATABLE_READ
、SERIALIZABLE
等。
- timeout(超时时间):指定事务的超时时间,以秒为单位。如果事务在规定时间内未完成,它将被回滚。
- readOnly:指定事务是否为只读。如果设置为
true
,事务只会读取数据而不会修改数据,可以优化性能。
- rollbackFor 和 noRollbackFor:指定在哪些异常情况下事务应该回滚或不回滚。可以列出异常的类或类名。
- value:与
readOnly
等价,指定事务是否为只读。可以使用 value
或 readOnly
,二者等效。
- rollbackForClassName 和 noRollbackForClassName:与
rollbackFor
和 noRollbackFor
类似,但使用类名字符串而不是异常类。
- name:指定事务的名称。可以为事务指定一个名称以便在日志中识别。
- propagationBehavior:与
propagation
类似,但使用Propagation
枚举来定义传播行为。
- 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
一起使用:
- @Secured:方法级的安全注解,允许你声明哪些角色可以访问方法。
- @RolesAllowed:允许你声明哪些角色可以访问方法。
- @PreAuthorize:使用SpEL表达式定义安全规则,允许更灵活的安全性控制。
- @PostAuthorize:在方法执行后进行安全性检查,也使用SpEL表达式。
- @PreFilter:允许你定义前置过滤器,用于过滤输入参数。
- @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) {}
|