Перейти к основному содержимому

Устаревшие классы весной

· 8 мин. чтения

1. Введение

В этом руководстве мы рассмотрим устаревшие классы в Spring и Spring Boot и объясним, чем они были заменены.

Мы рассмотрим классы, начиная с Spring 4 и Spring Boot 1.4.

2. Устаревшие классы в Spring

Для удобства чтения мы перечисляем классы и их замены на основе выпуска Spring. И внутри каждой группы классов мы отсортировали их по имени класса, независимо от пакета.

2.1. Весна 4.0.x

  • org.springframework.cache.interceptor.DefaultKeyGenerator заменен SimpleKeyGenerator или пользовательскими реализациями KeyGenerator на основе хэш-кодов
  • org.springframework.jdbc.support.lob.OracleLobHandler DefaultLobHandler для драйвера Oracle 10g и выше; мы должны рассматривать это даже в отношении базы данных Oracle 9i
  • org.springframework.test.AssertThrows вместо этого мы должны использовать поддержку JUnit 4 @Test(expected=…)
  • org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter AllEncompassingFormHttpMessageConverter

Следующий класс устарел в Spring 4.0.2 в пользу стратегии CGLIB 3.1 по умолчанию и был удален в Spring 4.1:

  • org.springframework.cglib.transform.impl.MemorySafeUndeclaredThrowableStrategy

Все устаревшие классы, а также устаревшие интерфейсы, поля, методы, конструкторы и константы enum для этой версии Spring можно найти на странице официальной документации .

2.2. Весна 4.1.х

  • org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper BeanPropertyRowMapper
  • org.springframework.jdbc.core.simple.ParameterizedSingleColumnRowMapper SingleColumnRowMapper

Мы можем найти полный список в Spring 4.1.x JavaDoc .

2.3. Весна 4.2.х

  • org.springframework.web.servlet.view.document.AbstractExcelView AbstractXlsView и его варианты AbstractXlsxView и AbstractXlsxStreamingView
  • org.springframework.format.number.CurrencyFormatter CurrencyStyleFormatter
  • org.springframework.messaging.simp.user.DefaultUserSessionRegistry мы должны использовать SimpUserRegistry в сочетании с ApplicationListener , прослушивающим события AbstractSubProtocolEvent .
  • org.springframework.messaging.handler.HandlerMethodSelector обобщенный и усовершенствованный MethodIntrospector
  • org.springframework.core.JdkVersion мы должны выполнять прямые проверки желаемых вариантов JDK API через отражение
  • org.springframework.format.number.NumberFormatter NumberStyleFormatter
  • org.springframework.format.number.PercentFormatter PercentStyleFormatter
  • org.springframework.test.context.transaction.TransactionConfigurationAttributes этот класс удален вместе с @TransactionConfiguration в Spring 5
  • org.springframework.oxm.xmlbeans.XmlBeansMarshaller после прекращения использования XMLBeans в Apache

Следующие классы устарели в пользу Apache Log4j 2:

  • org.springframework.web.util.Log4jConfigListener
  • org.springframework.util.Log4jConfigurer
  • org.springframework.web.filter.Log4jNestedDiagnosticContextFilter
  • org.springframework.web.context.request.Log4jNestedDiagnosticContextInterceptor
  • org.springframework.web.util.Log4jWebConfigurer

Более подробная информация доступна в Spring 4.2.x JavaDoc .

2.4. Весна 4.3.х

В этой версии Spring было много устаревших классов:

  • org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice этот класс удален в Spring Framework 5.1; вместо этого мы должны использовать CORS
  • org.springframework.oxm.castor.CastorMarshaller устарел из-за отсутствия активности в проекте Castor.
  • org.springframework.web.servlet.mvc.method.annotation.CompletionStageReturnValueHandler DeferredResultMethodReturnValueHandler , который теперь поддерживает возвращаемые значения CompletionStage через механизм адаптера.
  • org.springframework.jdbc.support.incrementer.DB2MainframeSequenceMaxValueIncrementer переименован в Db2MainframeMaxValueIncrementer
  • org.springframework.jdbc.support.incrementer.DB2SequenceMaxValueIncrementer переименован в Db2LuwMaxValueIncrementer
  • org.springframework.core.GenericCollectionTypeResolver устарел в пользу прямого использования ResolvableType
  • org.springframework.web.servlet.mvc.method.annotation.ListenableFutureReturnValueHandler DeferredResultMethodReturnValueHandler , который теперь поддерживает возвращаемые значения ListenableFuture через механизм адаптера
  • org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer вместо этого мы должны использовать PostgresSequenceMaxValueIncrementer
  • org.springframework.web.servlet.ResourceServlet ResourceHttpRequestHandler

Эти классы устарели в пользу инфраструктуры MVC на основе HandlerMethod :

  • org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
  • org.springframework.web.bind.annotation.support.HandlerMethodInvoker
  • org.springframework.web.bind.annotation.support.HandlerMethodResolver

Некоторые классы устарели в пользу методов обработчиков, управляемых аннотациями:

  • org.springframework.web.servlet.mvc.support.AbstractControllerUrlHandlerMapping
  • org.springframework.web.servlet.mvc.multiaction.AbstractUrlMethodNameResolver
  • org.springframework.web.servlet.mvc.support.ControllerBeanNameHandlerMapping
  • org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver
  • org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver
  • org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver

Есть также много классов из Spring, которые мы должны заменить их эквивалентами Hibernate 4.x/5.x:

  • org.springframework.orm.hibernate3.support.AbstractLobType
  • org.springframework.orm.hibernate3.AbstractSessionFactoryBean
  • org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
  • org.springframework.orm.hibernate3.support.BlobByteArrayType
  • org.springframework.orm.hibernate3.support.BlobSerializableType
  • org.springframework.orm.hibernate3.support.BlobStringType
  • org.springframework.orm.hibernate3.support.ClobStringType
  • org.springframework.orm.hibernate3.FilterDefinitionFactoryBean
  • org.springframework.orm.hibernate3.HibernateAccessor
  • org.springframework.orm.hibernate3.support.HibernateDaoSupport
  • org.springframework.orm.hibernate3.HibernateExceptionTranslator
  • org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean
  • org.springframework.orm.hibernate3.HibernateTemplate
  • org.springframework.orm.hibernate3.HibernateTransactionManager
  • org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener
  • org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider
  • org.springframework.orm.hibernate3.LocalJtaDataSourceConnectionProvider
  • org.springframework.orm.hibernate3.LocalRegionFactoryProxy
  • org.springframework.orm.hibernate3.LocalSessionFactoryBean
  • org.springframework.orm.hibernate3.LocalTransactionManagerLookup
  • org.springframework.orm.hibernate3.support.OpenSessionInterceptor
  • org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  • org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor
  • org.springframework.orm.hibernate3.support.ScopedBeanInterceptor
  • org.springframework.orm.hibernate3.SessionFactoryUtils
  • org.springframework.orm.hibernate3.SessionHolder
  • org.springframework.orm.hibernate3.SpringSessionContext
  • org.springframework.orm.hibernate3.SpringTransactionFactory
  • org.springframework.orm.hibernate3.TransactionAwareDataSourceConnectionProvider
  • org.springframework.orm.hibernate3.TypeDefinitionBean

Несколько классов устарели в пользу FreeMarker :

  • org.springframework.web.servlet.view.velocity.VelocityConfigurer
  • org.springframework.ui.velocity.VelocityEngineFactory
  • org.springframework.ui.velocity.VelocityEngineFactoryBean
  • org.springframework.ui.velocity.VelocityEngineUtils
  • org.springframework.web.servlet.view.velocity.VelocityLayoutView
  • org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver
  • org.springframework.web.servlet.view.velocity.VelocityToolboxView
  • org.springframework.web.servlet.view.velocity.VelocityView
  • org.springframework.web.servlet.view.velocity.VelocityViewResolver

Эти классы удалены в Spring Framework 5.1, и вместо них мы должны использовать другие транспорты:

  • org.springframework.web.socket.sockjs.transport.handler.JsonpPollingTransportHandler
  • org.springframework.web.socket.sockjs.transport.handler.JsonpReceiveTransportHandler

Наконец, есть еще пара классов без подходящей замены:

  • org.springframework.core.ControlFlowFactory
  • org.springframework.util.WeakReferenceMonitor

Как обычно, Spring 4.3.x JavaDoc содержит полный список.

2.5. Весна 5.0.x

  • org.springframework.web.reactive.support.AbstractAnnotationConfigDispatcherHandlerInitializer устарел в пользу AbstractReactiveWebInitializer
  • org.springframework.web.util.AbstractUriTemplateHandler DefaultUriBuilderFactory
  • org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer устарел в пользу простого использования WebSocketMessageBrokerConfigurer , который имеет методы по умолчанию, что стало возможным благодаря базовой линии Java 8.
  • org.springframework.web.client.AsyncRestTemplate — веб- клиент
  • org.springframework.web.context.request.async.CallableProcessingInterceptorAdapter устарел, поскольку CallableProcessingInterceptor имеет методы по умолчанию.
  • org.springframework.messaging.support.ChannelInterceptorAdapter устарел, поскольку ChannelInterceptor имеет методы по умолчанию (что стало возможным благодаря базовой линии Java 8) и может быть реализован напрямую без необходимости в этом адаптере без операции.
  • org.springframework.util.comparator.CompoundComparator устарел в пользу стандартного JDK 8 Comparator.thenComparing(Comparator)
  • org.springframework.web.util.DefaultUriTemplateHandler DefaultUriBuilderFactory ; мы должны отметить, что DefaultUriBuilderFactory имеет другое значение по умолчанию для свойства parsePath (изменено с false на true )
  • org.springframework.web.context.request.async.DeferredResultProcessingInterceptorAdapter поскольку у DeferredResultProcessingInterceptor есть методы по умолчанию
  • org.springframework.util.comparator.InvertibleComparator устарел в пользу стандартного JDK 8 Comparator.reversed()
  • org.springframework.http.client.Netty4ClientHttpRequestFactory устарел в пользу ReactorClientHttpConnector
  • org.apache.commons.logging.impl.SimpleLog перемещен в spring-jcl (фактически эквивалентен NoOpLog )
  • org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter WebMvcConfigurer имеет методы по умолчанию (что стало возможным благодаря базовой линии Java 8) и может быть реализован напрямую без необходимости в этом адаптере.
  • org.springframework.beans.factory.config.YamlProcessor.StrictMapAppenderConstructor заменен собственной обработкой повторяющихся ключей SnakeYAML

У нас есть два класса, которые устарели в пользу AbstractReactiveWebInitializer :

  • org.springframework.web.reactive.support.AbstractDispatcherHandlerInitializer
  • org.springframework.web.reactive.support.AbstractServletHttpHandlerAdapterInitializer

И следующие классы не имеют замен:

  • org.springframework.http.client.support.AsyncHttpAccessor
  • org.springframework.http.client.HttpComponentsAsyncClientHttpRequestFactory
  • org.springframework.http.client.InterceptingAsyncClientHttpRequestFactory
  • org.springframework.http.client.support.InterceptingAsyncHttpAccessor
  • org.springframework.mock.http.client.MockAsyncClientHttpRequest

Полный список доступен в Spring 5.0.x JavaDoc .

2.6. Весна 5.1.х

  • org.springframework.http.client.support.BasicAuthorizationInterceptor устарел в пользу BasicAuthenticationInterceptor , который повторно использует HttpHeaders.setBasicAuth(java.lang.String, java.lang.String) и теперь использует кодировку по умолчанию ISO-8859-1 вместо используя UTF-8, как это было раньше
  • org.springframework.jdbc.core.BatchUpdateUtils больше не используется JdbcTemplate
  • org.springframework.web.reactive.function.client.ExchangeFilterFunctions.Credentials мы должны использовать метод HttpHeaders.setBasicAuth(String, String) при построении запроса
  • org.springframework.web.filter.reactive.ForwardedHeaderFilter этот фильтр устарел в пользу использования ForwardedHeaderTransformer , который может быть объявлен как bean-компонент с именем forwardedHeaderTransformer или явно зарегистрирован в WebHttpHandlerBuilder.
  • org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils больше не используется шаблоном NamedParameterJdbcTemplate.
  • org.springframework.core.io.PathResource FileSystemResource.FileSystemResource (путь)
  • org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor мы должны использовать внедрение конструктора для необходимых настроек (или пользовательскую реализацию InitializingBean )
  • org.springframework.remoting.caucho.SimpleHessianServiceExporter HessianServiceExporter
  • org.springframework.remoting.httpinvoker.SimpleHttpInvokerServiceExporter HttpInvokerServiceExporter
  • org.springframework.remoting.support.SimpleHttpServerFactoryBean встроенный Tomcat/Jetty/Undertow
  • org.springframework.remoting.jaxws.SimpleHttpServerJaxWsServiceExporter SimpleJaxWsServiceExporter

Они устарели в пользу EncodedResourceResolver :

  • org.springframework.web.reactive.resource.GzipResourceResolver
  • org.springframework.web.servlet.resource.GzipResourceResolver

Есть несколько классов, которые устарели в пользу DefaultManagedTaskScheduler из Java EE 7 :

  • org.springframework.scheduling.commonj.DelegatingTimerListener
  • org.springframework.scheduling.commonj.ScheduledTimerListener
  • org.springframework.scheduling.commonj.TimerManagerAccessor
  • org.springframework.scheduling.commonj.TimerManagerFactoryBean
  • org.springframework.scheduling.commonj.TimerManagerTaskScheduler

И некоторые из них устарели в пользу DefaultManagedTaskExecutor из Java EE 7 :

  • org.springframework.scheduling.commonj.DelegatingWork
  • org.springframework.scheduling.commonj.WorkManagerTaskExecutor

Наконец, один класс устарел без замены:

  • org.apache.commons.logging.LogFactoryService

Дополнительные сведения см. в официальном документе Spring 5.1.x JavaDoc по устаревшим классам .

3. Устаревшие классы в Spring Boot

Теперь давайте взглянем на устаревшие классы в Spring Boot до версии 1.4.

Здесь следует отметить, что для Spring Boot 1.4 и 1.5 большинство замещающих классов сохранили свои первоначальные имена, но были перемещены в другие пакеты . Поэтому мы используем полные имена классов в следующих двух подразделах как для устаревших, так и для замещающих классов.

3.1. Весенняя загрузка 1.4.x

  • org.springframework.boot.actuate.system.ApplicationPidFileWriter устарел в пользу org.springframework.boot.system.ApplicationPidFileWriter
  • org.springframework.boot.yaml.ArrayDocumentMatcher устарел в пользу точного сопоставления на основе строк
  • org.springframework.boot.test.ConfigFileApplicationContextInitializer org.springframework.boot.test.context.ConfigFileApplicationContextInitializer
  • org.springframework.boot.yaml.DefaultProfileDocumentMatcher больше не используется
  • org.springframework.boot.context.embedded.DelegatingFilterProxyRegistrationBean org.springframework.boot.web.servlet.DelegatingFilterProxyRegistrationBean
  • org.springframework.boot.actuate.system.EmbeddedServerPortFileWriter org.springframework.boot.system.EmbeddedServerPortFileWriter
  • org.springframework.boot.test.EnvironmentTestUtils org.springframework.boot.test.util.EnvironmentTestUtils
  • org.springframework.boot.context.embedded.ErrorPage org.springframework.boot.web.servlet.ErrorPage
  • org.springframework.boot.context.web.ErrorPageFilter org.springframework.boot.web.support.ErrorPageFilter
  • org.springframework.boot.context.embedded.FilterRegistrationBean org.springframework.boot.web.servlet.FilterRegistrationBean
  • org.springframework.boot.test.IntegrationTestPropertiesListener больше не используется @IntegrationTest
  • org.springframework.boot.context.embedded.MultipartConfigFactory org.springframework.boot.web.servlet.MultipartConfigFactory
  • org.springframework.boot.context.web.OrderedCharacterEncodingFilter org.springframework.boot.web.filter.OrderedCharacterEncodingFilter
  • org.springframework.boot.context.web.OrderedHiddenHttpMethodFilter org.springframework.boot.web.filter.OrderedHiddenHttpMethodFilter
  • org.springframework.boot.context.web.OrderedHttpPutFormContentFilter org.springframework.boot.web.filter.OrderedHttpPutFormContentFilter
  • org.springframework.boot.context.web.OrderedRequestContextFilter org.springframework.boot.web.filter.OrderedRequestContextFilter
  • org.springframework.boot.test.OutputCapture org.springframework.boot.test.rule.OutputCapture
  • org.springframework.boot.context.web.ServerPortInfoApplicationContextInitializer org.springframework.boot.context.embedded.ServerPortInfoApplicationContextInitializer
  • org.springframework.boot.context.web.ServletContextApplicationContextInitializer org.springframework.boot.web.support.ServletContextApplicationContextInitializer
  • org.springframework.boot.context.embedded.ServletListenerRegistrationBean org.springframework.boot.web.servlet.ServletListenerRegistrationBean
  • org.springframework.boot.context.embedded.ServletRegistrationBean org.springframework.boot.web.servlet.ServletRegistrationBean
  • org.springframework.boot.test.SpringApplicationContextLoader устарел в пользу @SpringBootTest ; при необходимости мы также можем использовать org.springframework.boot.test.context.SpringBootContextLoader
  • org.springframework.boot.test.SpringBootMockServletContext org.springframework.boot.test.mock.web.SpringBootMockServletContext
  • org.springframework.boot.context.web.SpringBootServletInitializer org.springframework.boot.web.support.SpringBootServletInitializer
  • org.springframework.boot.test.TestRestTemplate org.springframework.boot.test.web.client.TestRestTemplate

Поскольку поддержка Velocity устарела в Spring Framework 4.3, следующие классы также устарели в Spring Boot:

  • org.springframework.boot.web.servlet.view.velocity.EmbeddedVelocityViewResolver
  • org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration
  • org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration.VelocityConfiguration
  • org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration.VelocityNonWebConfiguration
  • org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration.VelocityWebConfiguration
  • org.springframework.boot.autoconfigure.velocity.VelocityProperties
  • org.springframework.boot.autoconfigure.velocity.VelocityTemplateAvailabilityProvider

В Spring Boot 1.4.x JavaDoc есть полный список.

3.2. Весенняя загрузка 1.5.x

  • org.springframework.boot.context.event.ApplicationStartedEvent устарел в пользу org.springframework.boot.context.event.ApplicationStartingEvent
  • org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector устарел в пользу org.springframework.boot.autoconfigure.AutoConfigurationImportSelector
  • org.springframework.boot.actuate.cache.GuavaCacheStatisticsProvider после удаления поддержки Guava в Spring Framework 5.
  • org.springframework.boot.loader.tools.Layouts.Module устарел в пользу пользовательского LayoutFactory
  • org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration устарел в пользу org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration
  • org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration устарел в пользу org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
  • org.springframework.boot.actuate.autoconfigure.ShellProperties устарел, так как CRaSH активно не поддерживается

Эти два класса устарели, поскольку CRaSH активно не поддерживается:

  • org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration
  • org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration.AuthenticationManagerAdapterConfiguration

Также есть несколько классов без замены:

  • org.springframework.boot.autoconfigure.cache.CacheProperties.Hazelcast
  • org.springframework.boot.autoconfigure.jdbc.metadata.CommonsDbcpDataSourcePoolMetadata
  • org.springframework.boot.autoconfigure.mustache.MustacheCompilerFactoryBean

Чтобы увидеть весь список того, что устарело, мы можем обратиться к официальному сайту Spring Boot 1.5.x JavaDoc .

3.3. Весенняя загрузка 2.0.x

  • org.springframework.boot.test.util.EnvironmentTestUtils устарел в пользу TestPropertyValues
  • org.springframework.boot.actuate.metrics.web.reactive.server.RouterFunctionMetrics устарел в пользу автоматически настраиваемого MetricsWebFilter.

И один класс не имеет замены:

  • org.springframework.boot.actuate.autoconfigure.couchbase.CouchbaseHealthIndicatorProperties

Пожалуйста, ознакомьтесь со списком устаревших для Spring Boot 2.0.x для получения более подробной информации.

3.4. Весенняя загрузка 2.1.x

  • org.springframework.boot.actuate.health.CompositeHealthIndicatorFactory устарел в пользу CompositeHealthIndicator.CompositeHealthIndicator(HealthAggregator, HealthIndicatorRegistry)
  • org.springframework.boot.actuate.health.CompositeReactiveHealthIndicatorFactory устарел в пользу CompositeReactiveHealthIndicator.CompositeReactiveHealthIndicator(HealthAggregator, ReactiveHealthIndicatorRegistry)

Наконец, мы можем ознакомиться с полным списком устаревших классов и интерфейсов в Spring Boot 2.1.x.

4. Вывод

В этом руководстве мы рассмотрели устаревшие классы в Spring, начиная с версии 4, и Spring Boot, начиная с версии 1.4, а также их соответствующие замены, если они доступны.