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

當前位置:首頁 > 科技  > 軟件

SpringBoot項目開發中常用的一些技巧總結

來源: 責編: 時間:2024-02-01 12:51:32 227觀看
導讀環境:SpringBoot2.7.161. Bean初始化及銷毀如你希望Bean對象被創建過程中執行以下初始化動作,你可以通過實現InitializingBean接口或者使用@PostConstruct注解。@Componentpublic class InitDataToRedis implements Ini

環境:SpringBoot2.7.16DTC28資訊網——每日最新資訊28at.com

1. Bean初始化及銷毀

如你希望Bean對象被創建過程中執行以下初始化動作,你可以通過實現InitializingBean接口或者使用@PostConstruct注解。DTC28資訊網——每日最新資訊28at.com

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

如希望在容器關閉時執行資源釋放或者其它一些動作可以實現DisposableBean接口或者使用@PreDestroy注解。DTC28資訊網——每日最新資訊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 {}// 默認單例Bean@Controllerpublic class PersonController {}

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

方法1:DTC28資訊網——每日最新資訊28at.com

@Lazyprivate PersonService personService ;

方法2:DTC28資訊網——每日最新資訊28at.com

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

方法3:DTC28資訊網——每日最新資訊28at.com

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

3. BeanPostProcessor接口

如需要Bean在初始化前后執行相關的動作,可以通過實現該接口。DTC28資訊網——每日最新資訊28at.com

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

4. BeanFactoryPostProcessor接口

如你希望在創建Bean對象之前修改BeanDefinition的相關屬性可以通過實現該接口DTC28資訊網——每日最新資訊28at.com

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

5. 動態注冊Bean

如需要根據添加動態注冊Bean,比如通過掃描包下的類符合條件的類注冊為Bean對象,則可以通過如下的方式。DTC28資訊網——每日最新資訊28at.com

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

6.導入配置類

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

7. *Runner接口

如需要在應用程序成功啟動以后,執行一些任務,可以通過實現ApplicationRunner或者CommandLineRunner接口。DTC28資訊網——每日最新資訊28at.com

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

8. 全局異常處理

當應用發生異常時可以通過注冊全局異常處理,統一處理異常信息DTC28資訊網——每日最新資訊28at.com

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

10 全局類型轉換

自定義類型轉換DTC28資訊網——每日最新資訊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 ;  }}

注冊類型轉換器DTC28資訊網——每日最新資訊28at.com

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

以上示例注冊了一個,將字符串轉換為Teacher和Student。DTC28資訊網——每日最新資訊28at.com

11. 獲取BeanFactory對象

如果你希望在Bean中獲取BeanFactory,可以通過實現BeanFactoryAware接口DTC28資訊網——每日最新資訊28at.com

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

相關的*Aware接口,還有很多,如:ApplicationContextAware,ServletContextAware,BeanNameAware,EnvironmentAware等。DTC28資訊網——每日最新資訊28at.com

12. Web攔截器

如你需要對某些接口進行鑒權或者其它一些處理,你可以注冊自定義攔截器DTC28資訊網——每日最新資訊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. 默認AOP切面實現

BeanNameAutoProxyCreatorDTC28資訊網——每日最新資訊28at.com

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

上面的BeanNameAutoProxyCreator 是處理器類,只要beanName的后綴是Service結尾的都會被創建代理,然后通過以tokenInterceptor為beanName的攔截器增強。DTC28資訊網——每日最新資訊28at.com

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

完畢!!!DTC28資訊網——每日最新資訊28at.com

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

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

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

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

標簽:
  • 熱門焦點
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內上線了&ldquo;本地生活&rdquo;入口,位置較深,位于首頁的&ldquo;充值中心&rdquo;內,目前主要售賣美食相關的
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 小米MIX Fold 3配置細節曝光:搭載領先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 華為Mate60標準版細節曝光:經典星環相機模組回歸

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • iQOO Neo8 Pro即將開售:到手價3099元起 安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
Top 主站蜘蛛池模板: 原阳县| 温宿县| 分宜县| 鄂尔多斯市| 邯郸市| 荔波县| 北宁市| 巨鹿县| 古丈县| 松潘县| 合作市| 拜城县| 拉萨市| 申扎县| 达州市| 盐边县| 博湖县| 台东市| 彰化县| 桂林市| 沧州市| 锦州市| 靖西县| 卢龙县| 宁陕县| 佛教| 盐城市| 正阳县| 伊宁市| 栾城县| 永顺县| 平定县| 平谷区| 双桥区| 安顺市| 铜鼓县| 丰都县| 合山市| 田阳县| 鸡西市| 西城区|