【项目】迄今为止遇到的问题及表面(即用法)学习

@Transaction
在类或方法上进行@Transactional注解,表明对该方法或类下所有方法进行事务处理。
只有对于public方法才有效!
几个比较重要的参数
事务嵌套时的传播属性 propagation() 即方法在被调用时,起事务的条件和方法。假设methodA是被@Transaction注解了的方法
PROPAGATION_REQUIRED:如果调用methodA的方法在事务中的话,则methodA加入那个事务中。如果不在,为自己分配一个事务。
PROPAGATION_REQUIRED_NEW:自立为王,两种情况methodA都会新起一个事务
PROPAGATION_SUPPORTS:随遇而安,调用methodA的方法开启了事务则加入,否则不开启事务

事务回滚设置 rollbackFor() 会导致事务回滚的异常类
noRobackFor 不会导致事务回滚的异常类


@Autowired和@Service
@Autowired 自动装配bean 简化依赖方的bean注解的设置,和类中对被依赖方getter和setter的书写
@Service 应用此注解的类 相当于在配置文件里进行了配置
所以这两个注解可以配合 减少依赖,简化代码

又在项目里看到了这样的写法

  private final BackgroundConfigRepo backgroundConfigRepo;
  
  @Autowired
  public BackgroundConfigServiceImpl(BackgroundConfigRepo backgroundConfigRepo) {
    this.backgroundConfigRepo = backgroundConfigRepo;
  }

查阅资料后,发现如果写成

  //这种写法是错的
  @Autowired
  private BackgroundConfigRepo backgroundConfigRepo;

  public BackgroundConfigServiceImpl(BackgroundConfigRepo backgroundConfigRepo) {
    this.backgroundConfigRepo = backgroundConfigRepo;
  }

是有问题的,因为变量加载顺序中,构造方法是先于@Autowired注解加载的
第一种方法还加了final,表明只会对它加载一次


JPA
实体DO(DataObject)类相关
@Entity @Id @Table @Column @GeneratedValue

@Entity标注某类为实体类,可在数据库中生成相应的表,表名默认为类名,且实体类必须进行@Entity标注
@Id标注某属性为Id,即在数据库表中为主键,也必须进行标注
@Table标注用来设置该类对应的表名
@Coulumn标注属性对应数据库表中的列的各种属性
@GeneratedValue标注字段生成的方式 如  @GeneratedValue(strategy = GenerationType.IDENTITY)表明按数据库自动增长方式

SecurityContextHolder和ResponseEntity
学长让我学一下Spring.Security 等详细看完再写一篇比较详细的吧

猜你喜欢

转载自blog.csdn.net/qq_36269372/article/details/83420739
今日推荐