精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

這六個Spring高級開發技巧掌握了嗎?

開發 前端
如果在SpringWeb項目中,類型轉換功能通常是由框架內部自動處理的,尤其是在Spring MVC的Controller層,當請求參數需要綁定到方法的參數時。

環境:Spring5.3.33

1. Lifecycle接口

Lifecycle接口是一個定義啟動/停止生命周期控制方法的通用接口。它允許Bean對象和容器(通常是Spring的ApplicationContext本身)實現啟動和停止操作,接口定義:

public interface Lifecycle {
  // Spring容器啟動之前執行
  void start();
  // Spring容器在要關閉時執行
  void stop();
  // 判斷是否正在運行
  boolean isRunning();
}

注意,常規的org.springframework.context.Lifecycle接口是顯式啟動和停止通知的簡單約定,并不意味著在上下文刷新時自動啟動。為了細粒度地控制自動啟動和特定bean的優雅停止(包括啟動和停止階段),你應該實現org.springframework.context.SmartLifecycle接口。

如下示例:

public class PackLifecycle implements SmartLifecycle {
  private volatile boolean running ;
  @Override
  public void start() {
    this.running = true;
    System.out.println("lifecycle start ... ") ;
  }
  @Override
  public void stop() {
    this.running = false ;
    System.out.println("lifecycle stop ... ") ;
  }
  @Override
  public boolean isRunning() {
    return running ;
  }
}

start/stop執行時機

start方法執行

public abstract class AbstractApplicationContext {
  public void refresh() {
    // ...
    // 實例化單例bean
    finishBeanFactoryInitialization(beanFactory);
    // 完成上下文刷新操作最后一步執行
    finishRefresh();
  }
  protected void finishRefresh() {
    // 通過LifecycleProcessor#onRefresh方法執行Lifecycle#start方法
    getLifecycleProcessor().onRefresh();
  }
}

stop方法執行

public abstract class AbstractApplicationContext {
  // 當容器關閉時執行
  public void close() {
    doClose();
  }
  protected void doClose() {
    // 通過LifecycleProcessor#onClose方法執行Lifecycle#stop方法
    this.lifecycleProcessor.onClose();
  }
}

你可以通過自定義Lifecycle,在容器啟動完成時和容器關閉時做你需要的人和事。

2. FactoryBean接口

如果你想自定義完全控制bean的實例化,那么你可以通過實現FactoryBean接口。

FactoryBean<T>接口提供了三種方法:

  • T getObject():  返回此工廠創建的對象的實例。實例可能是共享的,這取決于此工廠返回的是單件還是原型。
  • boolean isSingleton():  如果此FactoryBean返回singletons,則返回true;否則返回false。此方法的默認實現返回true。
  • Class<?> getObjectType(): 返回getObject()方法返回的對象類型,如果類型事先未知,則返回null。

如下示例:

public class User {}
@Component("user")
public class UserFactoryBean implements FactoryBean<User> {
  @Override
  public User getObject() throws Exception {
    // 自定義對象實例化
    User user = new User() ;
    return user ;
  }
  @Override
  public Class<?> getObjectType() {
    return User.class;
  }
}

雖然我們定義的是FactoryBean實例,但是我們使用的時候還是可以按照User類型注入使用即可,如下示例:

@Resource
private User user;

那如何獲取UserFactoryBean這個對象呢?我們可以通過如下方式:

try (GenericApplicationContext context = new GenericApplicationContext()) {
  // ...
  System.out.println(context.getBean("&user")) ;
}

在beanName之前添加'&'符合即可獲取真實的UserFactoryBean對象。

3. 非web環境優雅關閉容器

如果在非web應用程序環境中(例如,在富客戶端桌面環境中)使用Spring的IoC容器,請向JVM注冊關閉掛鉤。這樣做可以確保正常關閉,并在單例bean上調用相關的destroy方法,從而釋放所有資源。通過容器對象ConfigurableApplicationContext#registerShutdownHook()方法注冊關閉鉤子。

public class User implements DisposableBean {
  @Override
  public void destroy() throws Exception {
    System.out.println("User Object destroy...") ;
  }
}


public static void main(String[] args) {
  GenericApplicationContext context = new GenericApplicationContext() ;
  context.registerBean(User.class) ;
  // 該方法會啟動一個線程,該線程會關閉onClose方法;這樣bean相關的生命周期方法都能被調用
  context.registerShutdownHook() ;
  context.refresh() ; 
}
// 控制臺輸出;如果沒有調用registerShutdownHook則不會有任何輸出
User Object destroy...

注意:在SpringBoot環境下,上面的registerShutdownHook是自動調用。

4. 資源注入

我們可以直接通過@Value注解注入資源,如下示例:

@Value("${pack.images:file:///d:/images/1.png}")
private Resource res ;
// 將上面注入的資源,將圖片直接輸出到瀏覽器、
@GetMapping("/res0")
public void res0(HttpServletResponse response) throws Exception {
  response.setContentType("image/png") ;
  StreamUtils.copy(res.getInputStream(), response.getOutputStream()) ;
}

也可以注入資源數組;

@Component
public class PackResource {
  private final Resource[] templates ;
  public PackResource(@Value("${pack.templates.path}") Resource[] templates) {
    this.templates = templates;
  }
}

資源路徑配置;

pack:
  templates:
    path: classpath*:com/pack/templates/*.ftl

ResourceLoaderAware接口

ResourceLoaderAware接口是一個特殊的回調接口,用于標識期望為其提供ResourceLoader引用的組件,如下示例:

@Component
public class PackResourceLoader implements ResourceLoaderAware {


  @Override
  public void setResourceLoader(ResourceLoader resourceLoader) {
    Resource resource = resourceLoader.getResource("classpath:com/pack/templates/1.txt") ;
    System.out.println(StreamUtils.copyToString(resource.getInputStream(), StandardCharsets.UTF_8)) ;
  }
}

注意:由于ApplicationContext是ResourceLoader,因此bean還可以實現ApplicationContextAware接口,并直接使用提供的應用程序上下文來加載資源。但是,一般來說,如果你只需要專用的ResourceLoader接口,那么最好使用該接口。代碼將只耦合到資源加載接口(可以被視為實用程序接口),而不耦合到整個Spring ApplicationContext接口。

5. 參數驗證

參數驗證一般都只是用在Controller請求方法上,如下示例:

@PostMapping("")
public Object save(@Validated @RequestBody User user, BindingResult errors) {
  // TODO
}

在SpringBoot環境下(SpringBoot當你引入了validation模塊后,會自動配置Validator),你可以在任意管理的Bean中使用參數驗證功能,如下示例:

private final Validator validator ;
public UserService(Validator validator) {
  this.validator = validator ;
}
public void save(User user) {
  Errors errors = ...
  this.validator.validate(user, errors) ;
  if (errors.hasErrors()) {
    // TODO
  }
}

如果你不在SpringBoot環境下,那么你可以手動注冊Validator

@Bean
public LocalValidatorFactoryBean validator() {
  return new LocalValidatorFactoryBean() ;
}

有關參數驗證的其它更加全面的知識,請查看下面這篇文章:

必讀!SpringBoot接口參數校驗N種實用技巧大揭秘

SpringBoot參數驗證@Validated和@Valid分清楚了嗎?這些驗證細節你知道嗎?

6. 類型轉換

如果在SpringWeb項目中,類型轉換功能通常是由框架內部自動處理的,尤其是在Spring MVC的Controller層,當請求參數需要綁定到方法的參數時。然而,在應用程序的其他部分,比如Service層或其他組件中,有時我們確實需要手動執行類型轉換。在這些情況下,我們可以利用Spring提供的ConversionService接口來完成數據類型之間的轉換。

在Spring Boot環境下,系統自動為我們配置了ConversionService可以被注入到任何Bean對象中,以便我們在需要的時候使用它。如下示例:

private final ConversionService conversionService ;
public PackComponent(ConversionService conversionService) {
  this.conversionService = conversionService ;
}
public Object convert(Object source, Class<?> targetType) {  
  // 檢查源對象和目標類型是否為null  
  if (source == null || targetType == null) {  
    throw new IllegalArgumentException("Source or target type cannot be null");  
  }  
  // 嘗試進行類型轉換  
  return conversionService.convert(source, targetType) ;  
}

非常方便的進行類型轉換。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2025-04-08 09:10:00

PillowPython圖像處理

2025-02-28 13:00:00

JavaScrip開發語言

2024-03-12 12:27:00

Vue 3前端開發

2023-09-24 13:55:42

Spring應用程序

2021-08-23 11:35:00

工具yyds開源

2021-09-03 09:57:13

開源技術 項目

2025-05-06 09:10:00

Python路徑處理os.path

2018-05-20 16:17:50

物聯網互聯產品成熟度模型

2024-09-20 15:37:02

2024-03-06 10:50:30

云計算云實例云提供商

2016-12-15 09:53:07

自學編程技巧

2022-04-29 17:03:37

WordPress開發者網站安全

2025-01-07 08:21:03

2024-01-30 08:43:26

IF 語句JavaScripJS

2023-02-08 17:00:07

IF 語句技巧代碼

2024-07-15 08:10:57

2023-10-10 18:24:46

PostgreSQL性能RDBMS

2015-07-30 14:43:04

導航欄iOS開發

2016-01-04 15:20:46

2016趨勢互聯網

2021-11-16 11:30:10

Linux命令運維
點贊
收藏

51CTO技術棧公眾號

最新中文字幕视频| www黄色av| 色欲av永久无码精品无码蜜桃| 欧美日韩国产一区精品一区| 欧美精品一区二区在线播放 | 波多野结衣中文字幕在线播放| 麻豆福利在线观看| 91麻豆6部合集magnet| 国产精品高潮粉嫩av| 777777国产7777777| 国产精品对白| 欧美人与禽zozo性伦| 久久久久久久香蕉| av在线播放免费| 国产精品一区二区免费不卡| 日韩av免费看网站| 亚洲色婷婷一区二区三区| 久久99免费视频| 日韩一区二区三区av| 日本男人操女人| 国产嫩草在线视频| 中文字幕在线不卡一区二区三区| 国产综合精品一区二区三区| 91中文字幕在线播放| 亚洲一区免费| 欧美大片在线看| 国产第一页精品| 亚洲ab电影| 精品国产一区久久| 亚洲黄色av片| 成人不卡视频| 欧美性xxxx在线播放| 久久精品在线免费视频| 91在线观看| 久久综合一区二区| 国产一区二区三区免费不卡| 国产乱叫456在线| 日韩1区2区日韩1区2区| 8090成年在线看片午夜| 人妻人人澡人人添人人爽| 第一会所sis001亚洲| 亚洲人成人99网站| 一起草在线视频| 久久精品色播| 亚洲精品在线免费观看视频| 国产精品偷伦视频免费观看了| 亚洲男人在线| 欧美日韩精品久久久| 国产视频在线视频| 成人免费福利| 91久久一区二区| 亚洲人成无码www久久久| aa视频在线观看| 亚洲国产一二三| av在线com| 欧美色图天堂| 亚洲国产视频一区二区| 97久久国产亚洲精品超碰热| caopon在线免费视频| 亚洲色图制服丝袜| 日韩video| 在线āv视频| 亚洲va天堂va国产va久| 久久久久久www| 999精品网| 色综合久久综合中文综合网| 一本色道无码道dvd在线观看| 日韩大尺度黄色| 欧美日韩亚洲国产综合| 亚洲综合20p| 成人高潮视频| 亚洲精品国产品国语在线| 亚洲成av人片在线观看无| 欧美交a欧美精品喷水| 亚洲女同性videos| 超碰人人干人人| 香蕉视频国产精品 | caoprom在线| 欧美日韩国产综合视频在线观看中文| 日日碰狠狠添天天爽超碰97| 都市激情综合| 欧美福利视频一区| 亚洲国产精品狼友在线观看| 婷婷五月色综合香五月| 中文国产亚洲喷潮| 特一级黄色录像| 日韩午夜一区| 国产精品视频99| 国产成人毛毛毛片| 91色在线porny| 亚洲欧洲三级| 24小时免费看片在线观看 | 一本到在线视频| 国产大陆精品国产| 欧美欧美一区二区| 激情在线小视频| 精品久久久久久久久久久| 亚洲视频在线a| 最新精品在线| 一区二区三区国产视频| 欧美日韩一级在线观看| 男人的天堂亚洲| 91免费视频国产| 三级视频在线| 亚洲免费伊人电影| 欧美伦理视频在线观看| 日韩高清二区| 正在播放欧美视频| 九九热精品在线观看| 日韩有码一区二区三区| 99久re热视频这里只有精品6| 可以在线观看的av网站| 一区二区久久久| 色婷婷一区二区三区av免费看| 91在线一区| 色悠悠久久久久| 亚洲欧美一区二区三区在线观看| 国产成人免费在线视频| 一本一道久久a久久综合精品| 99爱在线视频| 日韩欧美在线网站| 无码人中文字幕| 亚洲一区网站| 国产精品 日韩| 国产原创在线观看| 欧美日韩免费观看一区三区| 国产一级伦理片| 欧美久久视频| 91精品国产综合久久香蕉最新版 | 国产熟女一区二区三区四区| 国产日韩欧美精品电影三级在线| 人妻久久久一区二区三区| 麻豆国产一区二区三区四区| 最近日韩中文字幕中文| 在线观看免费av片| 91在线小视频| 国产一区二区四区| 日韩不卡在线视频| 欧美成在线视频| 国产又爽又黄又嫩又猛又粗| 国产精品热久久久久夜色精品三区| 亚洲色成人一区二区三区小说| 丁香五月缴情综合网| 欧美精品在线播放| 精品黑人一区二区三区国语馆| 日韩毛片视频在线看| 亚洲欧美日韩三级| 天天影视欧美综合在线观看| 国产欧美日韩高清| 淫片在线观看| 在线不卡中文字幕| 免费在线观看黄色小视频| 麻豆精品视频在线观看免费| 手机在线观看国产精品| 日本中文字幕一区二区| 自拍偷拍免费精品| 一级特黄aaaaaa大片| 综合久久久久久| 91日韩精品视频| 91精品电影| 亚洲xxx视频| 午夜小视频福利在线观看| 精品国精品国产| 国产成人在线播放视频| 26uuu久久综合| 久久国产色av免费观看| 清纯唯美日韩| 成人动漫网站在线观看| 在线观看男女av免费网址| 精品欧美乱码久久久久久| 日韩美女一级片| 久久综合久久综合久久综合| 日本久久精品一区二区| 欧美a级成人淫片免费看| 亚洲综合日韩在线| av伦理在线| 国产午夜一区二区| 国产有码在线观看| 洋洋av久久久久久久一区| 自拍视频一区二区| 蜜桃视频在线一区| 992tv快乐视频| 欧美成人一区在线观看| 国产精品久久久久久久久影视| 97caopron在线视频| 亚洲第一精品夜夜躁人人躁| 一级黄色av片| 亚洲激情自拍视频| 亚洲天堂成人av| 麻豆成人免费电影| 精品一二三四五区| 男男gay无套免费视频欧美| 91九色单男在线观看| 97蜜桃久久| 中文字幕在线观看亚洲| 蜜桃视频久久一区免费观看入口| 91九色02白丝porn| 男人的天堂久久久| 国产午夜精品久久久久久免费视| 亚洲一区二区偷拍| 亚洲一卡久久| 9色视频在线观看| 国产影视精品一区二区三区| 2019国产精品视频| 亚洲高清黄色| 欧美大片在线看| 在线看的av网站| 亚洲精品狠狠操| 国产三级视频在线播放| 色妞www精品视频| 国产一级视频在线| 中文成人av在线| 无码人妻精品一区二区三区温州| 国内精品久久久久影院色| 欧美女人性生活视频| 欧美午夜不卡| 亚洲精品一区二区三区蜜桃久| 女同另类激情重口| 91香蕉国产在线观看| 久久人体大尺度| 久久久久久久电影一区| 国内精品久久久久久野外| 亚洲三级 欧美三级| 日本激情一区二区| 欧美一区二区免费视频| 又色又爽又黄无遮挡的免费视频| 一本色道久久加勒比精品| 国产在线视频你懂的| 亚洲乱码精品一二三四区日韩在线| 亚洲av熟女国产一区二区性色| 99riav久久精品riav| 国产伦理在线观看| 国内久久精品视频| 日韩在线一区视频| 日本视频在线一区| 黄色国产精品视频| 麻豆久久精品| 欧美一区二区三区爽大粗免费| 亚洲精品免费观看| 国产九色porny| 午夜日韩激情| 国产亚洲精品久久久久久久| 91精品国偷自产在线电影| 日韩精品一区二区三区丰满| 久久97视频| 免费在线观看91| 亚洲图区在线| 日韩电影天堂视频一区二区| 欧美激情在线精品一区二区三区| 久久国产精品-国产精品| 国产女人18毛片水真多18精品| 国产富婆一区二区三区| 国产精品对白久久久久粗| 国产美女99p| 日本妇女一区| 久久综合给合久久狠狠色| 色天下一区二区三区| 欧美激情www| 欧美日韩老妇| 影音先锋欧美在线| 在线成人直播| 男人日女人逼逼| 视频一区二区欧美| 我要看一级黄色大片| 久久精品久久久精品美女| 婷婷激情小说网| 懂色一区二区三区免费观看| 亚洲视频在线播放免费| 91免费在线看| 香蕉久久久久久久| 一区二区三区在线视频免费观看| 久久精品国产亚洲AV无码男同| 粉嫩av一区二区三区免费野| 五月天激情四射| 欧美丰满少妇xxxbbb| 亚洲精品视频91| 亚洲日本aⅴ片在线观看香蕉| 成全电影播放在线观看国语| 久久精品久久久久久国产 免费| 国产理论电影在线| 日本一本a高清免费不卡| 国产原创一区| 国产精品视频入口| 精品国产乱码久久久| 国产高清免费在线| 亚洲精品乱码| 国产原创精品在线| 成人小视频在线| www.日本高清视频| 亚洲一区二区在线免费观看视频 | 国产精品二区在线| 免费观看久久av| 国风产精品一区二区| 亚洲综合99| 性生活在线视频| 久久毛片高清国产| 一级黄色录像视频| 色综合天天综合网天天狠天天 | 男人皇宫亚洲男人2020| 成人综合网网址| 最新精品国偷自产在线| 毛片av在线播放| 免费观看日韩电影| 网站免费在线观看| ●精品国产综合乱码久久久久 | 国产精品夜夜夜| 奇米777在线视频| 中文字幕欧美激情| 日本少妇久久久| 在线播放中文字幕一区| 欧美欧美欧美| 欧美—级高清免费播放| 日日狠狠久久| 欧美最大成人综合网| 在线精品一区| 毛毛毛毛毛毛毛片123| 国产欧美日韩在线| 中国一级特黄毛片| 欧美mv日韩mv国产网站app| 日本免费视频在线观看| 国产91在线播放精品91| 任你弄精品视频免费观看| 永久免费网站视频在线观看| 日本午夜精品一区二区三区电影| www.超碰97| 午夜精品在线看| 亚洲av无码乱码国产麻豆| 色多多国产成人永久免费网站| 日本综合字幕| 狠狠久久综合婷婷不卡| 欧美日本一区二区视频在线观看 | 久久精品国产亚洲精品2020| 另类中文字幕国产精品| 欧美日韩国产综合在线| av成人天堂| 日本一卡二卡在线| 亚洲一区二区三区在线| 亚洲第一视频在线| 欧美精品亚州精品| 日韩精品一区国产| 2021国产视频| 国产精品一区二区黑丝| 九九热最新地址| 日韩片之四级片| 欧美亚洲天堂| 国模一区二区三区私拍视频| 91久久综合| 性欧美丰满熟妇xxxx性久久久| 午夜电影网亚洲视频| 特级丰满少妇一级aaaa爱毛片| 韩日精品中文字幕| 噜噜噜天天躁狠狠躁夜夜精品| 久久99中文字幕| 91日韩精品一区| 中文字幕一区二区三区四区欧美| 亚洲香蕉成视频在线观看| 婷婷激情一区| 一区二区三区四区欧美| 韩国成人精品a∨在线观看| 国模无码国产精品视频| 日韩一级片网站| 99thz桃花论族在线播放| 久久婷婷开心| 日本不卡一区二区三区高清视频| 999福利视频| 日韩一区国产二区欧美三区| 欧美人与禽性xxxxx杂性| 国产精品视频免费一区| 久久综合婷婷| 老司机深夜福利网站| 日韩精品一区二区在线| 亚洲妇女成熟| 亚洲电影一二三区| 国产一区二区影院| 国产无遮挡又黄又爽| 亚洲色图美腿丝袜| 亚洲伦理久久| 国产av人人夜夜澡人人爽麻豆 | 我要看黄色一级片| 亚洲精品一区二区三区福利| 625成人欧美午夜电影| 亚洲欧美成人一区| 国产精品一区二区在线观看不卡| 国产精品第108页| 亚洲夜晚福利在线观看| 国产乱码精品一区二区三区亚洲人| 欧美美女黄色网| 国产午夜精品美女毛片视频| 国产成人三级一区二区在线观看一 | 四虎永久免费影院| 欧美丰满美乳xxx高潮www| 超黄网站在线观看| 婷婷久久五月天| 成人免费毛片app| 日韩黄色一级视频| 欧美激情第一页xxx| 精品成人影院| 99riav国产精品视频| 欧美三级在线视频| 美女的胸无遮挡在线观看|