Loading

Spring查缺补漏

学校在学Spring啥的,记录一些以前没有注意到的点,一旦发现就记过来。

使用注解注册Converter

今天讲到Converter,老师完全使用xml配置,但我懒得写xml,所以我需要一个用注解注册的办法。

然后找到了这篇文章:Guide to Spring Type Conversions

使用xml是这样写的:

<!-- 创建一个ConversionService Bean,然后向其中添加converters -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="converter.GoodsConverter"/>
        </list>
    </property>
</bean>
<!-- 添加conversion-service -->
<mvc:annotation-driven conversion-service="conversionService"/>

使用注解的话,你需要在你的某个实现自WebMvcConfigurer的类中重写默认方法addFormatters,然后通过参数FormatterRegistry来注册转换器:

@Configuration
@EnableWebMvc
@ComponentScan({"top.yudoge.springmvc.controller"})
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new DateConverter());
    }

}

在Spring中FormatterConverter没有什么继承关系,不知道为什么他们选择让开发者在addFormatters方法中注册Converter,这不是很让人迷惑吗??

使用注解配置静态资源

下面是使用xml配置的方式

注解,需要在实现自WebMvcConfigurer的配置类中重写如下方法:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/js/**").addResourceLocations("/js/");
}

也可以使用如下办法将静态资源的处理交给servlet(不被DispatcherServlet拦截):

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

注解配置拦截器

基于xml的配置

基于注解的配置

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new CustomInterceptor());
}

2.4以上的多环境配置

Spring具有多环境配置功能

我们的应用在生命周期的各个阶段,如开发、测试、生产时可能都运行在不同的环境下,它们所使用的数据库配置或者其它的什么东西可能不同。这种差异会通过profile来反应,比如我们可能在叫dev的profile中定义开发时程序具有的特定配置,在叫prod的profile下定义生产环境下程序具有的特定配置,下面定义了三个文件,它们其中定义了三种不同的profile

下面是application-dev.yml中的内容,它定义了三种数据库的地址,它其中的属性config.active.on-profile指明了当前编写的配置所描述的profile是dev

所以profile并不和某个yml文件绑定,不是说这个文件叫application-dev.xml,它就是在描述dev这个profile。实际上你可以在一个yml文件中通过分段定义很多个不同的profile

下面是application-prod.yml中的内容,它定义了这三种数据库在生产环境下的不同的地址:

下面是application.yml,它定义了一些与特定环境无关的(在任何环境下都相同的)配置,并且指定了默认情况下激活的profile为dev

如果你不加任何参数,直接运行程序,现在devprofile会被激活,application-dev.yml中定义的生产环境下的数据库起作用。你可以通过命令行参数来改变这个行为:

在命令行参数后面添加:--spring.profiles.active=prod,将激活prodprofile。

posted @ 2022-04-13 09:11  yudoge  阅读(22)  评论(0编辑  收藏  举报