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 9iorg.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 5org.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; вместо этого мы должны использовать CORSorg.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 8Comparator.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 8Comparator.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/Undertoworg.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, а также их соответствующие замены, если они доступны.