96SEO 2026-02-19 18:24 13
所以我们现在离不开xml配置文件是因为我们有一处很关键的配置如果他要也能用注解配置那么我们就可以脱离xml文件了

locationclasspath:db.properties/context:property-placeholder!--数据源--bean
classcom.alibaba.druid.pool.DruidDataSource
classorg.mybatis.spring.SqlSessionFactoryBeanproperty
valuecom.by.pojo/property/bean!--配置MapperScan扫描mapper接口并把生成的代理类交给spring去管理--bean
classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty
valuecom.by.mapper/propertyproperty
valuesessionFactoryBean/property/bean1.2.3.transactional配置
classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty
transaction-managertransactionManager/1.2.4.service配置
!--扫描service--context:component-scan
base-packagecom.by.service/context:component-scan1.2.5.springmvc配置
!--配置springmvc要扫描的包--context:component-scan
base-packagecom.by.controller,com.by.exception/context:component-scan!--开启注解驱动配置handlerMapping和handlerAdapter--mvc:annotation-driven
conversion-servicecs/mvc:annotation-driven!--配置日期转换器--bean
classorg.springframework.context.support.ConversionServiceFactoryBeanproperty
classcom.by.converter.MyDateConverter/bean/set/property/bean!--配置视图解析器--bean
classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty
value/WEB-INF/pages//propertyproperty
value.jsp/property/bean!--配置文件上传解析器--bean
idmultipartResolverclassorg.springframework.web.multipart.commons.CommonsMultipartResolverproperty
//bean!--资源映射器直接放行无须dispatcherServlet去处理--mvc:resources
mapping/head/**/!--配置拦截器--mvc:interceptorsmvc:interceptormvc:mapping
path/account/**/mvc:exclude-mapping
path/account/login/mvc:exclude-mappingbean
classcom.by.interceptor.LoginInterceptor/bean/mvc:interceptor/mvc:interceptors1.2.6.servlet配置
!--配置监听器监听tomcat启动,加载spring配置文件--
context-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:applicationContext-*.xml/param-value
listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class
servletservlet-namespringmvc/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springmvc.xml/param-value/init-paramload-on-startup1/load-on-startup
servlet-mappingservlet-namespringmvc/servlet-nameurl-pattern//url-pattern
filterfilter-nameCharacterEncodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param
filter-mappingfilter-nameCharacterEncodingFilter/filter-nameurl-pattern/*/url-pattern
用于指定当前类是一个spring配置类可替换xml配置文件作用和在spring的xml配置文件中的beans/beans是一样的。
Configuration//等价于beans当从一个类上加载到该注解时会创建spring容器
用于指定spring在初始化容器时要扫描的包。
作用和在spring的xml配置文件中的
basePackages用于指定要扫描的包。
和该注解中的value属性作用一样。
com.by)//等价于context:component-scan
该注解只能写在方法上表明使用此方法创建一个对象并且放入spring容器。
作用和在spring的xml配置文件中的bean/是一样的。
name给当前Bean注解方法创建的对象指定一个名称(即bean的id。
Dog();dog.setNam(二狗);dog.setAge(18);return
用于加载.properties文件中的配置。
作用和在spring的xml配置文件中的context:property-placeholder
value[]用于指定properties文件位置。
如果是在类路径下需要写上classpath:
PropertySource(classpath:config.properties)
Dog();dog.setNam(nam);dog.setAge(age);return
Import注解是用来导入配置类或者一些需要前置加载的类。
作用和在spring的xml配置文件中的import
Import({Configuration_O***r.class})
{}PropertySource(classpath:config.properties)
com.alibaba.druid.pool.DruidDataSource;
org.springframework.beans.factory.annotation.Value;
org.springframework.context.annotation.Bean;
org.springframework.context.annotation.PropertySource;import
javax.sql.DataSource;PropertySource({classpath:db.properties})//context:property-placeholder/
driver;Value(${jdbc.url})private
url;Value(${jdbc.username})private
userName;Value(${jdbc.password})private
getDataSource(){DruidDataSource
DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(userName);dataSource.setPassword(password);return
org.mybatis.spring.SqlSessionFactoryBean;
org.mybatis.spring.mapper.MapperScannerConfigurer;
org.springframework.context.annotation.Bean;import
{Bean(sessionFactoryBean)public
getSqlSessionFactoryBean(DataSource
dataSource){SqlSessionFactoryBean
SqlSessionFactoryBean();sessionFactoryBean.setDataSource(dataSource);return
getMapperScannerConfigurer(){MapperScannerConfigurer
MapperScannerConfigurer();mapperScannerConfigurer.setBasePackage(com.by.mapper);mapperScannerConfigurer.setSqlSessionFactoryBeanName(sessionFactoryBean);return
org.springframework.context.annotation.Bean;
org.springframework.jdbc.datasource.DataSourceTransactionManager;
org.springframework.transaction.PlatformTransactionManager;import
getPlatformTransactionManager(DataSource
dataSource){DataSourceTransactionManager
DataSourceTransactionManager();transactionManager.setDataSource(dataSource);return
org.springframework.context.annotation.ComponentScan;
org.springframework.context.annotation.Configuration;
org.springframework.context.annotation.Import;
org.springframework.transaction.annotation.EnableTransactionManagement;
Import({DataSourceConfig.class,
com.by.converter.DateConverter;
com.by.interceptor.LoginInterceptor;
org.springframework.context.annotation.Bean;
org.springframework.context.annotation.ComponentScan;
org.springframework.context.annotation.Configuration;
org.springframework.format.FormatterRegistry;
org.springframework.web.multipart.commons.CommonsMultipartResolver;
org.springframework.web.servlet.config.annotation.EnableWebMvc;
org.springframework.web.servlet.config.annotation.InterceptorRegistry;
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
org.springframework.web.servlet.view.InternalResourceViewResolver;Configuration
ComponentScan({com.by.controller})
getInternalResourceViewResolver(){InternalResourceViewResolver
InternalResourceViewResolver();viewResolver.setPrefix(/WEB-INF/pages/);viewResolver.setSuffix(.jsp);return
viewResolver;}Bean(multipartResolver)public
getCommonsMultipartResolver(){CommonsMultipartResolver
CommonsMultipartResolver();multipartResolver.setMaxUploadSize(5242880);multipartResolver.setDefaultEncoding(UTF-8);return
multipartResolver;}Overridepublic
addInterceptors(InterceptorRegistry
LoginInterceptor()).addPathPatterns(/account/**).excludePathPatterns(/user/**);}Overridepublic
addFormatters(FormatterRegistry
DateConverter());}Overridepublic
addResourceHandlers(ResourceHandlerRegistry
{registry.addResourceHandler(/head/**).addResourceLocations(/head/);}
org.springframework.web.filter.CharacterEncodingFilter;
org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;import
当类扩展了AbstractAnnotationConfigDispatcherServletlnitializer并将其部署到
AbstractAnnotationConfigDispatcherServletInitializer
Class[]{ServiceConfig.class};}//加载SpringMVC配置类protected
Class[]{SpringmvcConfig.class};}//设置SpringMVC请求地址拦截规则protected
String[]{/};}//设置post请求中文乱码过滤器Overrideprotected
CharacterEncodingFilter();filter.setEncoding(utf-8);return
xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0welcome-file-listwelcome-filelogin.jsp/welcome-file/welcome-file-list
--------------------spring的注解--------------------
作用加载*.properties等价于context:property-placeholder/
作用指定spring要扫描的包等价于context:component-scan
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback