【專案】迄今為止遇到的問題及表面(即用法)學習
阿新 • • 發佈:2018-11-21
@Transaction
在類或方法上進行@Transactional註解,表明對該方法或類下所有方法進行事務處理。
只有對於public方法才有效!
幾個比較重要的引數:
事務巢狀時的傳播屬性 propagation() 即方法在被呼叫時,起事務的條件和方法。假設methodA是被@Transaction註解了的方法
PROPAGATION_REQUIRED:如果呼叫methodA的方法在事務中的話,則methodA加入那個事務中。如果不在,為自己分配一個事務。
PROPAGATION_REQUIRED_NEW:自立為王,兩種情況methodA都會新起一個事務
PROPAGATION_SUPPORTS
事務回滾設定 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 等詳細看完再寫一篇比較詳細的吧