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

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

SpringBoot項目開發(fā)中常用的一些技巧總結(jié)

來源: 責(zé)編: 時間:2024-02-01 12:51:32 259觀看
導(dǎo)讀環(huán)境:SpringBoot2.7.161. Bean初始化及銷毀如你希望Bean對象被創(chuàng)建過程中執(zhí)行以下初始化動作,你可以通過實(shí)現(xiàn)InitializingBean接口或者使用@PostConstruct注解。@Componentpublic class InitDataToRedis implements Ini

環(huán)境:SpringBoot2.7.16hPX28資訊網(wǎng)——每日最新資訊28at.com

1. Bean初始化及銷毀

如你希望Bean對象被創(chuàng)建過程中執(zhí)行以下初始化動作,你可以通過實(shí)現(xiàn)InitializingBean接口或者使用@PostConstruct注解。hPX28資訊網(wǎng)——每日最新資訊28at.com

@Componentpublic class InitDataToRedis implements InitializingBean {  public void afterPropertiesSet() throws Exception {    // 初始化  }}@Componentpublic class PersonService {  @PostConstruct  public void init() {    // 初始化  }}

如希望在容器關(guān)閉時執(zhí)行資源釋放或者其它一些動作可以實(shí)現(xiàn)DisposableBean接口或者使用@PreDestroy注解。hPX28資訊網(wǎng)——每日最新資訊28at.com

public class Person implements DisposableBean {  public void destroy() {    // 銷毀動作  }}@Componentpublic class PersonService {  @PreDestroy  public void destroy() {    // 銷毀  }}

2. 單例Bean注入多例Bean

// 多例Bean@Component@Scope("prototype")public class PersonService {}// 默認(rèn)單例Bean@Controllerpublic class PersonController {}

如上如何在PersonController中注入PersonService呢?通過如下方法hPX28資訊網(wǎng)——每日最新資訊28at.com

方法1:hPX28資訊網(wǎng)——每日最新資訊28at.com

@Lazyprivate PersonService personService ;

方法2:hPX28資訊網(wǎng)——每日最新資訊28at.com

@Component@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)public class PersonService {}

方法3:hPX28資訊網(wǎng)——每日最新資訊28at.com

public class PersonController {  @Resource  private ApplicationContext context ;    public Object index() {    PersonService ps = this.context.getBean(PersonService.class) ;  }}

3. BeanPostProcessor接口

如需要Bean在初始化前后執(zhí)行相關(guān)的動作,可以通過實(shí)現(xiàn)該接口。hPX28資訊網(wǎng)——每日最新資訊28at.com

public class PackBeanPostProcessor implements BeanPostProcessor {  @Override  public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {    // 初始化前執(zhí)行  }  @Override  public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {    // 初始化后執(zhí)行  }}

4. BeanFactoryPostProcessor接口

如你希望在創(chuàng)建Bean對象之前修改BeanDefinition的相關(guān)屬性可以通過實(shí)現(xiàn)該接口hPX28資訊網(wǎng)——每日最新資訊28at.com

public PackBeanFactoryPostProcessor implements BeanFactoryPostProcessor {  @Override  public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {    BeanDefinition definition = beanFactory.getBeanDefinition("person") ;    // 修改了作用域    definition.setScope("prototype") ;  }  }

5. 動態(tài)注冊Bean

如需要根據(jù)添加動態(tài)注冊Bean,比如通過掃描包下的類符合條件的類注冊為Bean對象,則可以通過如下的方式。hPX28資訊網(wǎng)——每日最新資訊28at.com

public class RepositoryBeanDefinitionRegister implements BeanDefinitionRegistryPostProcessor {  @Override  public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {    // 動態(tài)注冊person    registry.registerBeanDefinition("person", BeanDefinitionBuilder.genericBeanDefinition(Person.class).getBeanDefinition());  }}

6.導(dǎo)入配置類

詳細(xì)查看《想成為Spring專家?了解@Import注解的三種用法是必備的!》hPX28資訊網(wǎng)——每日最新資訊28at.com

7. *Runner接口

如需要在應(yīng)用程序成功啟動以后,執(zhí)行一些任務(wù),可以通過實(shí)現(xiàn)ApplicationRunner或者CommandLineRunner接口。hPX28資訊網(wǎng)——每日最新資訊28at.com

public class App implements CommandLineRunner {  public void run(String... args) throws Exception {    // 執(zhí)行任務(wù)  }}// 或public class App implements ApplicationRunner {  public void run(ApplicationArguments args) throws Exception {    // 執(zhí)行任務(wù)  }}

8. 全局異常處理

當(dāng)應(yīng)用發(fā)生異常時可以通過注冊全局異常處理,統(tǒng)一處理異常信息hPX28資訊網(wǎng)——每日最新資訊28at.com

@RestControllerAdvicepublic class GlobalControllerAdvice {  @ExceptionHandler({Exception.class})  public Object handle(Exception e) {    // 其它處理    return R.failure(R.ResultCode.FAILURE, e.getMessage()) ;  }  }

10 全局類型轉(zhuǎn)換

自定義類型轉(zhuǎn)換hPX28資訊網(wǎng)——每日最新資訊28at.com

public class CustomGenericConverter implements GenericConverter {  @Override  public Set<ConvertiblePair> getConvertibleTypes() {    ConvertiblePair teacherPair = new ConvertiblePair(String.class, Teacher.class) ;    ConvertiblePair studentPair = new ConvertiblePair(String.class, Student.class) ;    Set<ConvertiblePair> pairs = new HashSet<>() ;    pairs.add(teacherPair) ;    pairs.add(studentPair) ;    return pairs ;  }  @Override  public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {    String str = null ;    if (sourceType.getObjectType() == String.class) {      str = (String) source ;     }    if (targetType.getObjectType() == Teacher.class) {      String[] t = str.split("http://|") ;      return new Teacher(t[0], Integer.valueOf(t[1])) ;    }    if (targetType.getObjectType() == Student.class) {      String[] t = str.split("http://|") ;      return new Student(t[0], t[1]) ;    }    return null ;  }}

注冊類型轉(zhuǎn)換器hPX28資訊網(wǎng)——每日最新資訊28at.com

@Componentpublic class WebConfig implements WebMvcConfigurer {  @Override  public void addFormatters(FormatterRegistry registry) {    registry.addConverter(new CustomGenericConverter()) ;  }  }

以上示例注冊了一個,將字符串轉(zhuǎn)換為Teacher和Student。hPX28資訊網(wǎng)——每日最新資訊28at.com

11. 獲取BeanFactory對象

如果你希望在Bean中獲取BeanFactory,可以通過實(shí)現(xiàn)BeanFactoryAware接口hPX28資訊網(wǎng)——每日最新資訊28at.com

@Servicepublic class PersonService implements BeanFactoryAware {  private BeanFactory beanFactory;  @Override  public void setBeanFactory(BeanFactory beanFactory) throws BeansException {      this.beanFactory = beanFactory;  }}

相關(guān)的*Aware接口,還有很多,如:ApplicationContextAware,ServletContextAware,BeanNameAware,EnvironmentAware等。hPX28資訊網(wǎng)——每日最新資訊28at.com

12. Web攔截器

如你需要對某些接口進(jìn)行鑒權(quán)或者其它一些處理,你可以注冊自定義攔截器hPX28資訊網(wǎng)——每日最新資訊28at.com

@Componentpublic class WebConfig implements WebMvcConfigurer {    @Override    public void addInterceptors(InterceptorRegistry registry) {      registry.addInterceptor(new HandlerInterceptor() {        @Override        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)            throws Exception {          System.out.println("preHandle method invoke...") ;          return true;        }        @Override        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,            ModelAndView modelAndView) throws Exception {          System.out.println("postHandle method invoke...") ;        }        @Override        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,            Exception ex) throws Exception {          System.out.println("afterCompletion method invoke...") ;        }      }).addPathPatterns("/**") ;    }  }}

13. 默認(rèn)AOP切面實(shí)現(xiàn)

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

@Beanpublic BeanNameAutoProxyCreator beanNameAutoProxyCreator() {  BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator();  beanNameAutoProxyCreator.setBeanNames("*Service") ;  beanNameAutoProxyCreator.setInterceptorNames("tokenInterceptor");  return beanNameAutoProxyCreator ;}

上面的BeanNameAutoProxyCreator 是處理器類,只要beanName的后綴是Service結(jié)尾的都會被創(chuàng)建代理,然后通過以tokenInterceptor為beanName的攔截器增強(qiáng)。hPX28資訊網(wǎng)——每日最新資訊28at.com

以上是在SpringBoot項目開發(fā)中常用的一些技巧,希望本文對你有幫助。hPX28資訊網(wǎng)——每日最新資訊28at.com

完畢?。?!hPX28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-70454-0.htmlSpringBoot項目開發(fā)中常用的一些技巧總結(jié)

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

上一篇: 在項目中如何避免Java中的內(nèi)存泄漏和解決內(nèi)存泄漏問題

下一篇: Java中的緩存技術(shù)及其使用場景

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • 一文看懂為蘋果Vision Pro開發(fā)應(yīng)用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現(xiàn)實(shí)(MR)頭戴設(shè)備。Vision Pro結(jié)合了虛擬現(xiàn)實(shí)(VR)和增強(qiáng)現(xiàn)實(shí)(AR)的沉浸感。其高分辨率顯示屏、先進(jìn)的傳感器和強(qiáng)大的處理能力
  • 學(xué)習(xí)JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當(dāng)你決心學(xué)習(xí)一門語言的時候,很難選擇到底應(yīng)該學(xué)習(xí)哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 之家push系統(tǒng)迭代之路

    前言在這個信息爆炸的互聯(lián)網(wǎng)時代,能夠及時準(zhǔn)確獲取信息是當(dāng)今社會要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動拉"獲取信息的方式已不能滿足用
  • 微信語音大揭秘:為什么禁止轉(zhuǎn)發(fā)?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉(zhuǎn)發(fā)?這是一個我們經(jīng)常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • WebRTC.Net庫開發(fā)進(jìn)階,教你實(shí)現(xiàn)屏幕共享和多路復(fù)用!

    WebRTC.Net庫:讓你的應(yīng)用更親民友好,實(shí)現(xiàn)視頻通話無痛接入! 除了基本用法外,還有一些進(jìn)階用法可以更好地利用該庫。自定義 STUN/TURN 服務(wù)器配置WebRTC.Net 默認(rèn)使用 Google 的
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁&ldquo;充值中心&rdquo;入口上線了本機(jī)生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • 三翼鳥智能家居亮相電博會,讓用戶體驗(yàn)更真實(shí)

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現(xiàn)場,成為了展會的一大看點(diǎn)。這也是三翼鳥繼9月9日發(fā)布了行業(yè)首個一站式定制智慧家平臺后的
  • 榮耀Magic4 至臻版 首創(chuàng)智慧隱私通話 強(qiáng)勁影音系統(tǒng)

    2022年第一季度臨近尾聲,在該季度內(nèi),許多品牌陸續(xù)發(fā)布自己的最新產(chǎn)品,讓大家從全新的角度來了解當(dāng)今的手機(jī)技術(shù)。手機(jī)是電子設(shè)備中,更新迭代十分迅速的一款產(chǎn)品,基
Top 主站蜘蛛池模板: 犍为县| 民丰县| 卢湾区| 正镶白旗| 兰溪市| 克山县| 积石山| 上思县| 德化县| 江油市| 齐齐哈尔市| 利川市| 社会| 浦江县| 陆丰市| 邢台市| 南昌县| 大方县| 沙田区| 民县| 防城港市| 射洪县| 德保县| 丽水市| 太康县| 古蔺县| 随州市| 罗山县| 南京市| 五常市| 开江县| 临潭县| 易门县| 宁波市| 宽甸| 东乡县| 故城县| 华阴市| 建湖县| 永州市| 中西区|