前言在使用spring的过程中,我们有没有发现它具有很强的扩展能力?由于这个优势的存在,spring的包容性很强,所以很多第三方应用或者框架都可以很容易的投入spring的怀抱。今天我们主要来学习Spring常用的11个扩展点。你用过几个?类型转换器如果接口中接收参数的实体对象中有字段类型为Date,但实际传递的参数是字符串类型:2022-12-1510:20:15,如何处理?Spring提供了一个扩展点,类型转换器TypeConverter,分为3类:Converter:将S类型的对象转换为T类型的对象ConverterFactory:将类型的对象转换StoR类型或其子类对象GenericConverter:支持各种源类型和目标类型的转换,也提供源类型和目标类型的上下文。此上下文允许您根据注释或属性信息执行类型转换。如果还是不明白,我们举个例子。定义一个用户对象@DatapublicclassUser{privateLongid;privateStringname;privateDateregisterDate;}复制代码实现Converter接口publicclassDateConverterimplementsConverter{privateSimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");@OverridepublicDateconvert(Stringsource){if(source!=null&&!"".equals(source)){try{simpleDateFormat.parse(source);}}catch(ParseExceptione){e.printStackTrace();}}returnnull;}}复制代码将新定义的类型转换器注入到Spring容器中@ConfigurationpublicclassWebConfigextendsWebMvcConfigurerAdapter{@OverridepublicvoidaddFormatters(FormatterRegistryregistry){registry.addConverter(newDateConverter());}}CopyCode调用接口测试@RequestMapping("/user")@RestControllerpublicclassUserController{@RequestMapping("/save")publicStringsave(@RequestBodyUseruser){return"success";}}重复在做代码请求接口的时候,前端传入的日期字符串会自动转换成Date类型来获取容器bean。在我们日常开发中,经常需要从Spring容器中获取bean,但是你知道如何获取Spring容器对象吗?2.1BeanFactoryAware@ServicepublicclassPersonServiceimplementsBeanFactoryAware{privateBeanFactorybeanFactory;@OverridepublicvoidsetBeanFactory(BeanFactorybeanFactory)throwsBeansException{this.");}}复制代码实现BeanFactoryAware接口,然后重写setBeanFactory方法,从方法中获取spring容器对象。2.2ApplicationContextAware@ServicepublicclassPersonService2implementsApplicationContextAware{privateApplicationContextapplicationContext;@OverridepublicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{this.applicationContext=applicationContext;}publicvoidadd(Personappperson){");}}复制代码实现ApplicationContextAware接口,然后重写setApplicationContext方法,同样可以用来获取spring容器目的。2.3ApplicationListener@ServicepublicclassPersonService3implementsApplicationListener{privateApplicationContextapplicationContext;@OverridepublicvoidonApplicationEvent(ContextRefreshedEventevent){applicationContext=event.getApplicationContext();}publicvoidadd(){Personperson=(Person)applicationContext.getBean("person");}}复制代码全局异常处理过去,我们在开发接口的时候,如果出现异常,我们要给用户一个更友好的提示,比如:@RequestMapping("/test")@RestControllerpublicclassTestController{@GetMapping("/add")publicStringadd(){inta=10/0;返回“苏”;}}