日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Spring一個強大便捷的代理工廠類,你用過嗎?

來源: 責(zé)編: 時間:2024-04-30 08:42:23 306觀看
導(dǎo)讀環(huán)境:Spring6.1.21. 簡介在Spring框架中,AOP(面向切面編程)是一種強大的編程范式,它允許開發(fā)者在不修改原有代碼的情況下,為程序添加額外的功能,如日志記錄、事務(wù)管理、安全控制等。實際開發(fā)中常用實現(xiàn)AOP配置方式:基于XML在

環(huán)境:Spring6.1.2o8S28資訊網(wǎng)——每日最新資訊28at.com

1. 簡介

在Spring框架中,AOP(面向切面編程)是一種強大的編程范式,它允許開發(fā)者在不修改原有代碼的情況下,為程序添加額外的功能,如日志記錄、事務(wù)管理、安全控制等。o8S28資訊網(wǎng)——每日最新資訊28at.com

實際開發(fā)中常用實現(xiàn)AOP配置方式:o8S28資訊網(wǎng)——每日最新資訊28at.com

  • 基于XML

在早期的Spring版本中,開發(fā)者常常使用XML配置文件來定義切面、通知和目標(biāo)對象之間的關(guān)聯(lián)。通過配置<aop:config>、<aop:aspect>、<aop:before>等標(biāo)簽,可以輕松地實現(xiàn)AOP的各種功能。如下示例:o8S28資訊網(wǎng)——每日最新資訊28at.com

<aop:config>  <aop:aspect id="myAspect" ref="aBean">    <aop:pointcut id="businessService"      expression="execution(* com.pack.service.*.*(..))"/>    <aop:before pointcut-ref="businessService" method="monitor"/>  </aop:aspect></aop:config>
  • 基于注解

通過在切面類和方法上使用如@Aspect、@Before、@After等注解,可以更加簡潔地定義AOP的相關(guān)配置。這種方式不僅減少了XML配置的工作量,還使得代碼更加清晰易讀。如下示例:o8S28資訊網(wǎng)——每日最新資訊28at.com

@Component@Aspectpublic class LogAspect {  @Pointcut("execution(* save(..))")  private void logPc() {}  @Around("logPc()")  public Object process(ProceedingJoinPoint pjp) throws Throwable {    Object ret = null ;    System.out.println("before log...") ;    ret = pjp.proceed() ;    System.out.println("after log...") ;    return ret ;  }}

以上是Spring提供的2中方式來聲明AOP配置方式。但如果你需要一種更加靈活和可配置性,那么Spring還提供了一個非常方便強大的ProxyFactoryBean類,該類特別適合那些需要更多自定義和控制的場景,例如當(dāng)你需要為特定的Bean創(chuàng)建代理,或者需要在不修改原始代碼的情況下為現(xiàn)有類添加額外的功能時。o8S28資訊網(wǎng)——每日最新資訊28at.com

2. 實戰(zhàn)案例

ProxyFactoryBean與其他Spring FactoryBean實現(xiàn)一樣,引入了一個間接級別。如果定義了名為pack的ProxyFactoryBean,那么引用pack的對象看不到ProxyFactoryBean實例本身,而是由ProxyFactoryBean#getObject()方法實現(xiàn)創(chuàng)建的對象。此方法創(chuàng)建一個AOP代理,用于包裝目標(biāo)對象。o8S28資訊網(wǎng)——每日最新資訊28at.com

2.1 屬性配置

ProxyFactoryBean提供了很多屬性,讓你可以靈活的配置代理對象。該對象繼承了ProxyConfig,一些關(guān)鍵的屬性是由ProxyConfig定義。o8S28資訊網(wǎng)——每日最新資訊28at.com

  • proxyTargetClass:如果要代理目標(biāo)類,而不是目標(biāo)類的接口,則為true。如果此屬性值設(shè)置為true,則會創(chuàng)建CGLIB代理。
  • optimize:控制是否對通過CGLIB創(chuàng)建的代理應(yīng)用積極的優(yōu)化。除非完全理解相關(guān)AOP代理如何處理優(yōu)化,否則不應(yīng)該輕松地使用此設(shè)置。目前僅用于CGLIB代理。它對JDK動態(tài)代理沒有影響。
  • frozen:如果代理配置被凍結(jié),則不再允許更改該配置。此屬性的默認(rèn)值為false,因此允許更改(例如添加額外的通知)。
  • exposeProxy:確定是否應(yīng)在ThreadLocal中公開當(dāng)前代理,以便目標(biāo)可以訪問它。如果目標(biāo)需要獲取代理,并且exposeProxy屬性設(shè)置為true,則該目標(biāo)可以使用AoPontext.currentProxy()方法獲取代理對象。
  • proxyInterface:字符串接口名稱的數(shù)組。
  • interceptorNames:要應(yīng)用的Advisor、攔截器或其他建議名稱的字符串?dāng)?shù)組。

接下來將從2方面介紹ProxyFactoryBean的使用,代理接口與代理類。2.2 代理接口o8S28資訊網(wǎng)——每日最新資訊28at.com

要通過ProxyFactoryBean創(chuàng)建代理,你至少需要涉及到下面幾點(類):o8S28資訊網(wǎng)——每日最新資訊28at.com

  • 需要被代理的目標(biāo)bean類。
  • 一個Advisor或者Advice,增強部分。
  • 指定要代理的接口。

如下示例:o8S28資訊網(wǎng)——每日最新資訊28at.com

public interface ICommonDAO {  void save() ;}@Component("commonDAOTarget")public class CommonDAOImpl implements ICommonDAO {  @Override  public void save() {    System.out.println("save operator...") ;  }}@Componentpublic class LogInterceptor implements MethodInterceptor {  @Override  public Object invoke(MethodInvocation invocation) throws Throwable {    System.out.println("before log...") ;    Object ret = invocation.proceed() ;    System.out.println("after  log...") ;    return ret ;  }}@Configurationpublic class AppConfig {  @Bean  // 由于上面已經(jīng)定義了CommonDAOImpl,而這里的FactoryBean#getObject返回的  // 也是一個實現(xiàn)了ICommonDAO接口的對象,所以需要加上@Primary  @Primary  ProxyFactoryBean commonDAO(@Qualifier("commonDAOTarget") CommonDAOImpl commonDAOTarget) throws Exception {    ProxyFactoryBean proxy = new ProxyFactoryBean() ;    proxy.setProxyInterfaces(new Class<?>[] {ICommonDAO.class}) ;    proxy.setTarget(commonDAOTarget) ;    proxy.setInterceptorNames("logInterceptor") ;    return proxy ;  }}

測試o8S28資訊網(wǎng)——每日最新資訊28at.com

ICommonDAO dao = context.getBean(ICommonDAO.class) ;dao.save() ;// 輸出before log...save operator...after  log...

2.3 代理類

如果我們的目標(biāo)沒有實現(xiàn)接口,那么我們只能通過CGLIB進(jìn)行代理,通過設(shè)置proxyTargetClass屬性為true。CGLIB代理通過在運行時生成目標(biāo)類的子類來工作。Spring將這個生成的子類配置為將方法調(diào)用委托給原始目標(biāo)。如下示例:o8S28資訊網(wǎng)——每日最新資訊28at.com

@Component("commonDAOTarget")public class CommonDAO {  public void save() {    System.out.println("save operator...") ;  }}@Bean@PrimaryProxyFactoryBean commonDAO(@Qualifier("commonDAOTarget") CommonDAO commonDAOTarget) throws Exception {  ProxyFactoryBean proxy = new ProxyFactoryBean() ;  proxy.setTarget(commonDAOTarget) ;  proxy.setInterceptorNames("logInterceptor") ;  // 代理類,可以不設(shè)置  proxy.setProxyTargetClass(true) ;  return proxy ;}

查看最終的CommonDAO是否是通過CGLIB代理o8S28資訊網(wǎng)——每日最新資訊28at.com

CommonDAO dao = context.getBean(CommonDAO.class) ;System.out.println(dao.getClass()) ;

輸出結(jié)果o8S28資訊網(wǎng)——每日最新資訊28at.com

class com.pack.aop.create.ProxyFactoryBeanTest2$CommonDAO$$SpringCGLIB$$1

CGLIB代理通過在運行時生成目標(biāo)類的子類來工作。但需要注意以下事項:o8S28資訊網(wǎng)——每日最新資訊28at.com

  • final 類不能被代理,因為它們不能被擴展。
  • final方法無法提供增強,因為它們不能被覆蓋。
  • 不能增強private方法,因為它們不能被重寫。
  • 不可見的方法,通常是來自不同包的父類中的包私有方法,不能被增強,因為它們實際上是私有的。

2.4 模糊匹配攔截器

在上面配置攔截器時,我們都是指定的具體攔截器,其實我們還可以使用通配符,指定攔截器。如下示例:o8S28資訊網(wǎng)——每日最新資訊28at.com

@Component("global_log")public class LogInterceptor implements MethodInterceptor {}@Component("global_auth")public class AuthInterceptor implements MethodInterceptor {}// ProxyFactoryBena配置ProxyFactoryBean commonDAO() throws Exception {  ProxyFactoryBean proxy = new ProxyFactoryBean() ;  // 注意:這里的通配符必須是最后,你不能放到其它位置  proxy.setInterceptorNames("global_*") ;  return proxy ;}

以上ProxyFactoryBean在初始化時,會自動查找容器中beanName以global_開頭的所有Bean對象。o8S28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-86683-0.htmlSpring一個強大便捷的代理工廠類,你用過嗎?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: HTTP 協(xié)議是怎么來的?最開始是什么樣子?又是如何一步步發(fā)展 HTTP3

下一篇: 一種避免寫大量CRUD方法的新思路

標(biāo)簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产原创一区二区| 欧美一区二区三区视频在线观看 | 激情小说另类小说亚洲欧美 | 午夜精品一区二区三区在线播放| 日韩网站在线观看| 亚洲一区二区免费在线| 亚洲综合色在线| 久久久久一区二区三区| 美女久久网站| 欧美色大人视频| 国产性猛交xxxx免费看久久| 在线精品国产成人综合| 亚洲精品国产精品乱码不99按摩| 99国产精品久久久| 西西裸体人体做爰大胆久久久| 久久久国产一区二区| 欧美aaa级| 国产日韩精品一区二区浪潮av| 在线观看91久久久久久| 99热在这里有精品免费| 欧美在线观看视频在线| 欧美—级a级欧美特级ar全黄| 国产精品www网站| 亚洲福利视频网| 欧美自拍偷拍午夜视频| 欧美激情在线| 一区二区三区在线视频播放| 在线视频免费在线观看一区二区| 久久精品91久久香蕉加勒比| 韩国一区二区在线观看| 亚洲网站在线| 欧美日韩亚洲另类| 亚洲国产日韩在线| 久久影院午夜论| 国内精品一区二区三区| 亚洲先锋成人| 欧美日韩色一区| 亚洲日本成人| 欧美国产一区二区在线观看 | 久久丁香综合五月国产三级网站| 欧美精品大片| 91久久久久| 欧美国产一区在线| 亚洲国产高清自拍| 欧美h视频在线| 亚洲国产精品小视频| 久久综合九色综合网站| 精品成人免费| 你懂的网址国产 欧美| 在线免费一区三区| 欧美69wwwcom| 亚洲精品一区二区三区av| 欧美电影免费网站| 一本久久青青| 国产精品免费观看视频| 欧美一区二区三区在线| 国产视频在线观看一区二区| 欧美专区一区二区三区| 激情懂色av一区av二区av| 久久综合久久综合久久| 亚洲人成亚洲人成在线观看| 欧美三区在线视频| 午夜久久久久久久久久一区二区| 国产日韩欧美一区在线| 久久中文字幕导航| 日韩一级大片| 国产亚洲欧美日韩精品| 你懂的一区二区| 亚洲一区999| 韩日精品视频| 欧美日韩中文| 久久婷婷久久| 亚洲小视频在线观看| 激情综合激情| 国产精品高潮呻吟久久av无限 | 国产精品国产精品| 国产欧美精品| 欧美高清在线| 久久福利影视| 国产精品99久久久久久久久久久久 | 久久一区二区三区国产精品| 一本大道av伊人久久综合| 国产欧美日韩91| 欧美乱妇高清无乱码| 久久久精品性| 欧美中文字幕在线视频| 国产精品午夜在线| 免费一级欧美片在线播放| 国产精品va在线播放| 一本色道久久综合狠狠躁篇的优点| 久久国产精品99国产| 欧美精品一区二| 国产日韩欧美在线视频观看| 一本色道久久综合亚洲精品按摩| 久久亚洲国产成人| 国产亚洲成av人在线观看导航 | 在线亚洲电影| 亚洲国产日韩欧美一区二区三区| 国产欧美精品一区二区色综合| 欧美激情欧美激情在线五月| 欧美一区亚洲一区| 亚洲男人的天堂在线| 亚洲视屏一区| 宅男精品视频| 伊人久久亚洲热| 欧美日韩精品在线观看| 欧美国产高清| 欧美+亚洲+精品+三区| 午夜在线视频一区二区区别| 亚洲尤物在线| 欧美一区2区三区4区公司二百| 亚洲天堂成人在线观看| 中国日韩欧美久久久久久久久| 日韩一区二区福利| 在线亚洲自拍| 亚洲免费视频网站| 欧美一区视频在线| 久热这里只精品99re8久| 欧美a级片网| 欧美色另类天堂2015| 国产精品家教| 狠狠88综合久久久久综合网| 依依成人综合视频| 在线免费精品视频| 亚洲人成网站在线播| 日韩五码在线| 亚洲欧美不卡| 欧美一区二区视频在线观看2020| 欧美在线中文字幕| 久久久亚洲午夜电影| 欧美激情影院| 国产精品网曝门| 国产精品videossex久久发布| 欧美日韩在线视频观看| 欧美大胆成人| 国产精品黄视频| 国内偷自视频区视频综合| 亚洲国产一成人久久精品| 中文一区二区在线观看| 欧美一区二区三区男人的天堂| 欧美xx视频| 国产精品嫩草99av在线| 在线免费观看日本一区| 在线视频亚洲一区| 久久综合伊人77777蜜臀| 国产精品美腿一区在线看| 91久久精品国产91久久性色tv| 亚洲免费综合| 欧美日韩中文字幕综合视频| 国产精品男人爽免费视频1| 亚洲国产日韩一级| 欧美专区中文字幕| 国产精品免费福利| 一区二区欧美在线观看| 欧美粗暴jizz性欧美20| 在线播放日韩欧美| 久久精品一区二区三区不卡| 国产精品国产三级国产aⅴ9色| 亚洲国产天堂久久综合网| 久久久久久久久岛国免费| 国产精品久久看| 亚洲视频香蕉人妖| 欧美视频在线播放| 夜夜爽99久久国产综合精品女不卡| 久久久蜜桃精品| 伊大人香蕉综合8在线视| 久久激情中文| 国内精品久久久久久久影视麻豆 | 欧美性色视频在线| 亚洲淫性视频| 国产精品欧美一区二区三区奶水| 在线亚洲高清视频| 欧美日韩第一页| 日韩视频在线永久播放| 欧美日韩国产影片| 亚洲一区二区毛片| 亚洲在线免费观看| 老司机午夜免费精品视频| 影音先锋在线一区| 欧美激情亚洲一区| 亚洲一区日韩| 黑丝一区二区三区| 欧美成人资源| 亚洲欧美日韩精品综合在线观看| 国产精品卡一卡二卡三| 久久精品麻豆| 99国产精品久久久久老师| 国产精品美女在线观看| 久久久精品五月天| 夜夜嗨av色一区二区不卡| 国产伦精品一区二区三区四区免费 | 伊人蜜桃色噜噜激情综合| 欧美丝袜一区二区三区| 亚洲国产专区校园欧美| 亚洲视频一区二区在线观看| 久久久亚洲欧洲日产国码αv| 欧美黄色一区| 激情六月综合| 久久免费偷拍视频| 黄色av日韩| 久久一区欧美| 亚洲国产成人av在线| 午夜精品区一区二区三| 欧美小视频在线|