一、事務
在Spring Boot中,當我們使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依賴的時候,框架會自動默認分別注入DataSourceTransactionManager或JpaTransactionManager。
所以我們不需要任何額外配置就可以用@Transactional注解進行事務的使用。
spring Boot 使用事務非常簡單,首先使用注解 @EnableTransactionManagement 開啟事務支持后,然后在訪問數據庫的Service方法上添加注解 @Transactional 便可。如果在類上加@Transactional,則整個類都支持事務。
@Test @Transactional public void test() { Rdb r1 = rdbDao.findById("2"); Rdb r2 = rdbDao.findById("3"); r2.setAge(r2.getAge()+2); r1.setAge(r1.getAge()-2); rdbDao.save(r1); rdbDao.save(r2); }
二、AOP
SpringBoot提供了強大AOP支持,AOP切面主要是切方法,我們一般搞一些日志分析和事務操作,要用到切面,類似攔截器;
AOP主要注解
@Aspect注解是切面注解類
@Pointcut切點定義
@Before是方法執行前調用
@After是方法執行后調用
@AfterReturning方法執行返回值調用
@Aspect @Component public class AspectTest { @Pointcut("execution(public * top.ruandb.controller.*.*(..))") public void doTest() {} @Before("doTest()") public void doBefore() { System.out.println("do before"); ServletRequestAttributes sra=(ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request=sra.getRequest(); System.out.println("url:"+request.getRequestURI()); System.out.println("ip:"+request.getRemoteHost()); } @After("doTest()") public void doAfter() { System.out.println("do after"); } @AfterReturning("doTest()") public void doAfterReturning() { System.out.println("do AfterReturning"); } }
三、springboot注解小結
@RestController:相當與@Controller @ResponseBody一起使用
@RequestMapping:注解提供路由信息。
@Configuration:等價與原來XML中配置beans;用@Bean標注方法等價於XML中配置bean。
@SpringBootApplication:等同於@Configuration @EnableAutoConfiguration @ComponentScan