Spring配置补充 (随笔详情扩展:)

发布时间:2026/11/6 4:49:21

Spring配置补充 (随笔详情扩展:) Spring配置补充实现Spring 和 MyBatis 集成过程中学习了,Spring 的配置数据源的方法; 实际开发过程中还有很多灵活的配置文件;灵活配置DataSource:!-- 远古方法最初方法,数据库连接池,不过我最喜欢用的; --beaniddataSourceclassorg.apache.commons.dbcp.BasicDataSourcepropertynamedriverClassNamevaluecom.mysql.jdbc.Driver/propertynameurlvaluejdbc:mysql://localhost:3306/cart/propertypropertynameusernamevalueroot/propertypropertynamepasswordvalueok/property/bean方式一使用属性文件配置数据源;还记得MyBatis可以引用外部的 .properties文件来配置数据源吗Spring对于这些操作当然是小ks了;首先,引入外部的文件,你前提得有哦假设为datasource.propertiesdrivercom.mysql.jdbc.Driver passwordok #urljdbc:mysql://localhost/cart #userroot!-- 方式一使用属性文件配置数据源, --!-- 创建Bean classxx..PropertyPlaceholderConfigurer --beanclassorg.springframework.beans.factory.config.PropertyPlaceholderConfigurerpropertynamelocationvalueclasspath:datasource.properties/!-- 给属性赋值引用外部文件--/bean!-- 然后就是和之前的一样了,这样好处也就是可以把,数据源配置分开处理,便于维护,方便处理.. --beaniddataSourceclassorg.apache.commons.dbcp.BasicDataSourcepropertynamedriverClassNamevalue${driver}/!-- 通过${name} 来获取值;注意这里必须要完全和name一样,空格 啥的注意哦--propertynameurlvaluejdbc:mysql://localhost:3306/cart/propertypropertynameusernamevalueroot/propertypropertynamepasswordvalue${password}/property/bean方式二使用JNDI配置数据源; 了解JNDI 可以————— 点击.!-- 方式二JNDI配置数据源 配置JNDI的数据源(两种配置方式) 1.在tomcat安装目录下打开conf文件夹打开context.xml文件在context/context标签之内插入代码context.xml 好处好处就是运行在配置过JNDI数据源的web容器下的项目都可以使用该数据源也就是说在容器中配置好数据源之后数据源在该web容器中是共享的。(多个项目可以使用) 2.将数据源配置在项目中这样做的好处就是为每一个项目单独指定一个数据源也就是说数据源不会在服务器中共享。 配置方法在项目路径下新建一个文件夹/src/main/webapp/META-INF/context.xml如果没有可自行创建。 --!-- Spring的配置文件: JndiObjectFactoryBean--beaniddataSourceclassorg.springframework.jndi.JndiObjectFactoryBeanpropertynamejndiNamevaluejava:comp/env/jdbc/cart/value!-- java:comp/env是固定写法后面的jdbc/cart 是,配置文件中的 name;--/property/bean服务器context.xml / 项目context.xml 中配置 数据源;ContextResourcenamejdbc/cartauthContainertypejavax.sql.DataSourcedriverClassNamecom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/cartusernamerootpasswordokmaxActive50maxIdle30maxWait10000//Context!-- 注意: 访问数据库/root/密码...,根据需求来,服务器的 服务器context.xml 已有Context节点就可以省了 --方式三C3P0实现数据源配置!-- 方式三C3P0实现数据源配置,Spring对C3P0有封装实现 --beaniddataSourceclasscom.mchange.v2.c3p0.ComboPooledDataSourcepropertynamedriverClassvaluecom.mysql.jdbc.Driver/propertypropertynamejdbcUrlvaluejdbc:mysql://localhost:3306/cart/propertypropertynameuservalueroot/propertypropertynamepasswordvalueok/property!--依次为数据库连接池最小连接数、最大连接数、初始连接数--propertynameminPoolSizevalue3/propertypropertynamemaxPoolSizevalue15/propertypropertynameinitialPoolSizevalue3/property/beanSpring中Bean的作用域:Bean的作用域作用域说明singleton默认值。Spring以单例模式创建Bean的实例即容器中该Bean的实例只有一个prototype每次从容器中获取Bean时都会创建一个新的实例, Spring不能对一个property bean的整个生命周期负责 因此客户端要负责property实例的生命周期管理request用于Web应用环境针对每次HTTP请求都会创建一个实例session用于Web应用环境同一个会话共享同一个实例不同的会话使用不同的实例global session仅在Portlet的Web应用中使用同一个全局会话共享一个实例。对于非Portlet环境等同于session实例Spring配置文件applicationContext.xml!-- 默认, singleton--beanida类class类路径/bean!-- 指定作用域, prototype --beanidb类class类路径scopeprototype/bean!-- scope:设置作用域的值 --publicstaticvoidmain(String[]args){ApplicationContextcontextnewClassPathXmlApplicationContext(applicationContext.xml);Aa1(A)context.getBean(a类);//bean id;Aa2(A)context.getBean(a类);//bean id;System.out.println(a1a2);//结果为 true; 因为,Bean创建的默认级别以单例模式创建的,即该类对象在整个应用程序中,只有一个实例,多个对象指向是同一个空间地址;//单例模式的变量导致线程不安全;//一个程序只有一个 SqlSession 对象,当A线程执行新增 B修改,B完成了操作关闭了SqlSession 因为整个应用程序公用一个,导致A的也关闭了. A操作失败//解决://可以通过改变, Spring中Bean的作用域: bean id…… class…… scope作用域/bean//B 类,Spring管理时设置了 scope 作用域;Bb1(B)context.getBean(b类);//bean id;Bb2(B)context.getBean(b类);//bean id;System.out.println(b1b2);//结果为 false;}A B 类就随便创就好了☺使用注解指定Bean的作用域对于使用注解声明Bean 组件,如需修改其作用域可以使用Scope注解实现关键字:Scope(prototype)//指定作用域;Component//声明Bean;publicclassA{}Spring的自动装配之前章节介绍通过,Autowired或Resource注解实现依赖注解, 依靠着 Spring容器的自动装配功能;通过自动装配技术, 可以将与属性类型相符的 (对于Resource注解而言 还会尝试, ID 和属性名相符合) Bean自动注入给属性; 简化操作autowire属性值及说明值说明no默认值。Spring 默认不进行自动装配必须显式指定依赖对象byName根据属性名自动装配。Spring 自动查找与属性名相同的id如果找到则自动注入否则什么都不做byType根据属性的类型自动装配。Spring 自动查找与属性类型相同的Bean如果刚好找到唯一的那个则自动注入如果找到多个与属性类型相同的Bean则抛出异常如果没找到就什么也不做constructor和byType 类似不过它针对构造方法。如果 Spring 找到一个Bean和构造方法的参数类型相匹配则通过构造注入该依赖对象如果找不到将抛出异常实例Spring配置文件applicationContext.xml!-- 默认, singleton--beanida类class类路径autowirebyName!--根据属性名自动装配,查找 属性名与Bean id 匹配的自动装配 --propertyname属性名: BrefB/property!--向这种属性名 B 和要指定的Bean id一样的就可以省略不写了--..../bean!-- autowire:指定匹配方式 --在Spring 配置文件中, 通过 bean 元素, autowire 属性实现自动装配 beans 根目录还提供了 default-autowire 属性, 设置该属性 影响全局, 减少单个 Bean的注入方式;?xml version1.0 encodingUTF-8?beansxmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:phttp://www.springframework.org/schema/pxmlns:contexthttp://www.springframework.org/schema/contextxmlns:aophttp://www.springframework.org/schema/aopxmlns:txhttp://www.springframework.org/schema/txxsi:schemaLocationhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsddefault-autowiredefault!-- default-autowire设置全局操作;自动装配方式 --!-- 不过这种方式,对于大型应用,不鼓励使用自动装配,虽然可以减少工作量,但大大的降低了依赖关系,清晰性 透明性; 不能显而易见属性..类型.. 不利于高层次解耦合; --/beans拆分Spring配置文件项目规模变大配置文件可读性、可维护性差团队开发时多人修改同一配置文件易发生冲突更符合 “分而治之“ 的软件工程原理~两种方式方式一当一个项目中有多个 Spring 配置文件applicationContext1.xml applicationContext2.xml …读取时通过:ApplicationContext context new ClassPathXmlApplicationContext(“applicationContext1.xml”,“applicationContext2.xml”);方法的 重载来实现一次读取多个 配置文件;或通过 * 通配符来指定多个;ApplicationContext context new ClassPathXmlApplicationContext(“applicationContext *.xml”); // 文件的前缀. *来指定一定规范的命名文件除此之外还支持, String[] 形式传参数...方式二设置一个配置文件为 配置文件的集成文件;假设存在 A B 两个Spring 配置文件, 可以在 A 在引入B 文件/或更多…;读取时候读取 A 就同时读取了 B …文件;A文件使用来引入其它文件; import resource“B文件引用” /配置web.xmlweb.xml 都知道吧, 每一个 web项目都有一个 web.xml文件;启动一个WEB项目的时候WEB容器会去读取它的配置文件web.xml 进行配置…Spring配置文件:对于web项目:Spring配置文件需要在 web.xml 中进行配置, 以达到程序加载初始化读取Spring:对Spring配置文件进行初始化...不在像以前控制台操作时通过:ApplicationContext context new ClassPathXmlApplicationContext(Spring配置文件);加载Spring容器;1.web.xml 中通过contextConfigLocation参数指定,Spring配置文件的路径;2.web 项目使用前: 启动对Spring容器加载; Spring提供一个监听器org.springframework.web.context.ContextLoaderListener该监听器实现了 : ServletContextListenter 接口, 可以在web 容器启动时候初始化 Spring容器;web.xml?xml version1.0 encodingUTF-8?web-appxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlnshttp://java.sun.com/xml/ns/javaeexsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsdversion3.0display-namexxxxxx/display-name!-- 描述的项目名 title --!-- 监听器: web项目使用前: 启动对Spring容器加载; --listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listenercontext-paramparam-namecontextConfigLocation/param-name!-- 指定Spring配置文件的位置路径 --param-valueclasspath:applicationContext-mybatis.xml/param-value!-- 指定Spring配置文件的位置路径 --/context-param/web-app通过以上web.xml 配置, 就可以在启动同时初始化 Spring 容器了:注意:如果没有指定 contextConfigLocation 的参数, contextConfigLocation 会默认去查找: /WEB-INF/applicationContext.xml换句话说就是: 如果我们将 SpringMVC的名字默认为:applicationContext.xml并存储在 WEB-INF 路径下;即使不指定 contextConfigLocationweb.xml也会默认, 实现配置文件的加载~此外我们对于一些文件名较长的复杂的也可以同过 : applicationContetx-*.xml 通配符形式来实现装载文件;小扩展classpath:上述Demo及日常也经常看到 classpath 来配置文件路径…classpath 到底是啥呢? :classpath 表示是不是src 而是 WEB-INF/classes lib ( WEB-INF/ 是资源目录客户端不可以直接访问. )我们都知道一个传统的web项目结构: 如下↓↓↓即使在src 中存储的 配置文件, 最后部署也会加载至项目 WEB-INF/calsses 文件中;所以 classpath 表示的是 WEB-INF/calsses 目录;lib 和 classes 文件同属于 classpath , 两者的访问优先级为: libclasses 即: 两个文件下存在相同文件名, classpath: 文件名.指定的是lib 下的;ok。 又搞完一章, 智勇你看完了吗
延伸阅读

更多相关文章

2026/11/6 4:49:21

初始MyBatis(随笔1)

初始MyBatis(随笔1) 框架技术 为什么要学习框架技术: PTT模板举例:做ppt前, 总是会需要找一些模板, 优点; 1. 不用考虑布局, 排版等问题, 提高了效率; 2. 可以专心于PTT的内容, 使演讲 “质量” 更有保障; 3. 新手也可以实现出很好的 PPT; 框架&#x…

2026/11/6 5:54:24

逆向工程实战:黑盒映射还原与查表逆向技巧

逆向工程里有一类题目特别有意思,它不靠复杂的加密算法吓唬人,也不靠庞大的代码量拖垮你,而是用一个看似简单的“盒子”把你的思路锁死。reverse_box 就是这样一个典型代表——名字直白得近乎挑衅,仿佛在说“来吧,拆开…

2026/11/6 5:54:24

分类模型评估指标详解:准确率、精确率、召回率与F1值

做分类模型的朋友大概都有过这种经历:模型训练完,准确率刷到了 0.95,兴冲冲拿去汇报,结果被一句“那漏检的那批样本怎么办”问得哑口无言。我早年做第一个二分类项目时就栽在这上面——数据里正负样本比例接近 1:99,模…

2026/11/6 5:54:24

MySQL SQL进阶实战:复杂查询优化与性能提升

1. MySQL SQL进阶实战:第二天核心知识点解析作为数据库管理员,我经常遇到刚接触MySQL的开发者在第二天学习SQL时遇到的典型困惑。今天我们就来深入剖析那些容易被忽略却至关重要的SQL知识点,这些内容往往决定了你能否从"会写SQL"进…

2026/11/6 5:54:24

MySQL SQL进阶实战:性能优化与高级特性详解

1. MySQL SQL进阶实战指南作为关系型数据库的核心操作语言,SQL的熟练程度直接决定开发者的数据处理效率。今天我们将深入探讨MySQL中那些容易被忽略却极其实用的SQL技巧,这些内容来自我多年数据库运维中积累的实战经验。2. 核心语法精讲2.1 多表连接优化…

2026/11/6 5:54:24

VMware分布式虚拟交换机配置与性能优化指南

1. 项目背景与核心需求在虚拟化环境中,VMware ESXi作为企业级虚拟化平台被广泛使用。很多管理员会遇到这样的场景:当一台ESXi主机上的虚拟机需要访问另一台ESXi主机上的虚拟机时,传统的网络配置方式往往需要复杂的路由设置或额外的网络设备。…

2026/11/6 5:49:24

OceanBase与DataGrip连接配置与优化实战

1. OceanBase与DataGrip技术栈解析作为国产分布式数据库的代表作,OceanBase凭借其高可用性和水平扩展能力,在金融、电信等领域逐步替代传统Oracle架构。而JetBrains旗下的DataGrip作为多数据库管理工具,其智能补全、可视化查询等功能深受开发…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/6 1:03:39

MCU晶振电路设计全解析:从负载电容计算到PCB布局调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑