中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

用v9做的網(wǎng)站上傳服務(wù)器杭州seo整站優(yōu)化

用v9做的網(wǎng)站上傳服務(wù)器,杭州seo整站優(yōu)化,手機(jī)網(wǎng)站描述,php網(wǎng)站開發(fā)技巧文章目錄 一、日志處理二、事務(wù)控制三、參數(shù)校驗(yàn)四、自定義注解五、AOP 方法失效問題1. ApplicationContext2. AopContext3. 注入自身 六、附錄1. 示例代碼 AOP 提供了一種面向切面操作的擴(kuò)展機(jī)制,通常這些操作是與業(yè)務(wù)無關(guān)的,在實(shí)際應(yīng)用中,可…

文章目錄

    • 一、日志處理
    • 二、事務(wù)控制
    • 三、參數(shù)校驗(yàn)
    • 四、自定義注解
    • 五、AOP 方法失效問題
      • 1. ApplicationContext
      • 2. AopContext
      • 3. 注入自身
    • 六、附錄
      • 1. 示例代碼

AOP 提供了一種面向切面操作的擴(kuò)展機(jī)制,通常這些操作是與業(yè)務(wù)無關(guān)的,在實(shí)際應(yīng)用中,可以實(shí)現(xiàn):日志處理、事務(wù)控制、參數(shù)校驗(yàn)和自定義注解等功能。

Spring AOP 的原理參閱:《Spring中的AOP和動(dòng)態(tài)代理》

一、日志處理

在調(diào)試程序時(shí),如果需要在執(zhí)行方法前打印方法參數(shù),或者在執(zhí)行方法后打印方法返回結(jié)果,可以使用切面來實(shí)現(xiàn)。

@Slf4j
@Aspect
@Component
public class LoggerAspect {@Around("execution(* cn.codeartist.spring.aop.sample.*.*(..))")public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {// 方法執(zhí)行前日志log.info("Method args: {}", joinPoint.getArgs());Object proceed = joinPoint.proceed();// 方法執(zhí)行后日志log.info("Method result: {}", proceed);return proceed;}
}

二、事務(wù)控制

Spring 提供的聲明式事務(wù)也是基于 AOP 來實(shí)現(xiàn)的,在需要添加事務(wù)的方法上面使用 @Transactional 注解。

@Service
public class DemoService {@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 帶事務(wù)控制的業(yè)務(wù)操作}
}

三、參數(shù)校驗(yàn)

如果需要在方法執(zhí)行前對(duì)方法參數(shù)進(jìn)行校驗(yàn)時(shí),可以使用前置通知來獲取切入點(diǎn)方法的參數(shù),然后進(jìn)行校驗(yàn)。

@Slf4j
@Aspect
@Component
public class ValidatorAspect {@Before("execution(* cn.codeartist.spring.aop.sample.*.*(..))")public void doBefore(JoinPoint joinPoint) {// 方法執(zhí)行前校驗(yàn)參數(shù)Object[] args = joinPoint.getArgs();}
}

四、自定義注解

因?yàn)?AOP 可以攔截到切入點(diǎn)方法,Spring 也支持通過注解的方式來定義切點(diǎn)表達(dá)式,所以可以通過 AOP 來實(shí)現(xiàn)自定義注解的功能。

例如,自定義一個(gè)注解來實(shí)現(xiàn)聲明式緩存,把方法的返回值進(jìn)行緩存。

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Cacheable {/*** 緩的Key*/String key();/*** 緩存過期時(shí)間*/long timeout() default 0L;/*** 緩存過期時(shí)間單位(默認(rèn):毫秒)*/TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
}

然后定義一個(gè)切片來實(shí)現(xiàn)常規(guī)的緩存操作,先讀緩存,緩存不存在時(shí)執(zhí)行方法,然后把方法的返回結(jié)果進(jìn)行緩存。

@Aspect
@Component
public class AnnotationAspect {@Around("@annotation(cacheable)")public Object doAround(ProceedingJoinPoint joinPoint, Cacheable cacheable) throws Throwable {// 自定義緩存邏輯return joinPoint.proceed();}
}

五、AOP 方法失效問題

Spring AOP 的原理是在原有方法外面增加一層代理,所以在當(dāng)前類調(diào)用 AOP 方法時(shí),因?yàn)?this 指向的是當(dāng)前對(duì)象,而不是代理對(duì)象,所以 AOP 會(huì)失效。

@Service
public class DemoService {public void insert() {// 該方法事務(wù)會(huì)失效insertBatch();}@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 帶事務(wù)控制的業(yè)務(wù)操作}
}

解決這個(gè)問題的常用方法有下面三種:

1. ApplicationContext

使用 ApplicationContext 來手動(dòng)獲取 Bean 對(duì)象,來調(diào)用 AOP 方法:

@Service
public class DemoService {@Autowiredprivate ApplicationContext applicationContext;public void insert() {DemoService demoService = applicationContext.getBean(DemoService.class);demoService.insertBatch();}@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 帶事務(wù)控制的業(yè)務(wù)操作}
}

2. AopContext

使用 AopContext 工具類來獲取當(dāng)前對(duì)象的代理對(duì)象。

@Service
public class DemoService {public void insert() {((DemoService) AopContext.currentProxy()).insertBatch();}@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 帶事務(wù)控制的業(yè)務(wù)操作}
}

3. 注入自身

使用 Spring 注入自身來調(diào)用 AOP 方法:

@Service
public class DemoService {@Autowiredprivate DemoService that;public void insert() {that.insertBatch();}@Transactional(rollbackFor = Exception.class)public void insertBatch() {// 帶事務(wù)控制的業(yè)務(wù)操作}
}

六、附錄

1. 示例代碼

Gitee 倉(cāng)庫(kù):https://gitee.com/code_artist/spring

在這里插入圖片描述

http://m.risenshineclean.com/news/60279.html

相關(guān)文章:

  • 做酒店網(wǎng)站營(yíng)銷策劃公司主要做些什么
  • 全國(guó)送花網(wǎng)站北京出大大事了
  • opencms做網(wǎng)站 誰(shuí)百度競(jìng)價(jià)是什么意思
  • 有了域名搭建網(wǎng)站詳細(xì)步驟搜索引擎seo優(yōu)化平臺(tái)
  • 網(wǎng)絡(luò)服務(wù)器租賃費(fèi)一般多少錢seo怎么做
  • 建立自己的網(wǎng)站步驟深圳公司網(wǎng)絡(luò)推廣該怎么做
  • 使用dw做門戶網(wǎng)站今天國(guó)際新聞
  • 品牌網(wǎng)站策劃書互聯(lián)網(wǎng)媒體廣告公司
  • 畢業(yè)論文網(wǎng)站鹽城seo優(yōu)化
  • 注冊(cè)網(wǎng)站入口西安百度關(guān)鍵詞優(yōu)化
  • 做淘客網(wǎng)站 備案煙臺(tái)seo快速排名
  • wordpress 汽車 模板下載蘇州搜索引擎優(yōu)化
  • html5 css3網(wǎng)站模板百度流量推廣項(xiàng)目
  • 鳥人 網(wǎng)站建設(shè)移動(dòng)網(wǎng)站推廣如何優(yōu)化
  • 建筑工程網(wǎng)上考試答案重慶seo黃智
  • 濰坊做網(wǎng)站的網(wǎng)絡(luò)公司品牌網(wǎng)絡(luò)推廣運(yùn)營(yíng)公司
  • 重慶企業(yè)網(wǎng)站優(yōu)化營(yíng)銷管理制度范本
  • 網(wǎng)站建設(shè)的淘寶模板南寧seo費(fèi)用服務(wù)
  • 圖片演示dw做網(wǎng)站手機(jī)如何創(chuàng)建網(wǎng)站
  • 網(wǎng)站ip訪問做圖表中國(guó)十大新聞網(wǎng)站排名
  • 石家莊網(wǎng)絡(luò)公司行業(yè)深圳百度seo怎么做
  • 微網(wǎng)站做的比較好搜索引擎營(yíng)銷的主要方式有
  • 南京網(wǎng)站網(wǎng)站建設(shè)學(xué)校如何發(fā)布一個(gè)網(wǎng)站
  • 做金融必看網(wǎng)站谷歌在線瀏覽器免費(fèi)入口
  • 網(wǎng)站建設(shè)欄目說明百度一下就知道官網(wǎng)
  • 企業(yè)網(wǎng)站建設(shè)的思路最優(yōu)化方法
  • 一些做的好的網(wǎng)站東營(yíng)百度推廣電話
  • 曲阜公司網(wǎng)站建設(shè)價(jià)格便宜ui設(shè)計(jì)培訓(xùn)班哪家好
  • 淘寶客網(wǎng)站還可以做嗎牛奶軟文廣告營(yíng)銷
  • 長(zhǎng)沙今天最新招聘信息臺(tái)州關(guān)鍵詞優(yōu)化平臺(tái)