1. 程式人生 > >【專案】迄今為止遇到的問題及表面(即用法)學習

【專案】迄今為止遇到的問題及表面(即用法)學習

@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 等詳細看完再寫一篇比較詳細的吧