首页/新闻资讯/正文详情

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

发布时间:2026/11/7 10:07:27 来源:云帆数科 栏目:资讯中心
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。 又搞完一章, 智勇你看完了吗

相关推荐

初始MyBatis(随笔1)
初始MyBatis(随笔1)

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

嵌入式Vibe Coding:物理直觉驱动的硬件开发范式
嵌入式Vibe Coding:物理直觉驱动的硬件开发范式

/* 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 4:48:50

ESP32多应用Flash数据隔离:分区表与NVS命名空间实战
ESP32多应用Flash数据隔离:分区表与NVS命名空间实战

/* 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 4:48:50

外地考高压电工证多久拿证最稳妥?别怕考不过白交培训费
外地考高压电工证多久拿证最稳妥?别怕考不过白交培训费

外地考高压电工证多久拿证最稳妥?别怕考不过白交培训费 怕考不过白交培训费?那你得先搞清楚高压电工证怎么考、多久能拿证、外地人怎么操作不踩坑。别急,我给你说透,省时省力又省钱。… · 2026/11/7 10:07:01

工地太忙根本没时间复习考试 桥架电工证怎么报名全攻略
工地太忙根本没时间复习考试 桥架电工证怎么报名全攻略

工地太忙根本没时间复习考试 桥架电工证怎么报名全攻略 工地上的节奏快得像在跑马拉松,活儿干不完,考试还卡着脖子。你可能正为【桥架电工证】怎么报名犯愁,更别提抽时间复习了。别急,这篇文章专门为你准备,从报名流程到备考技巧,一套搞定。… · 2026/11/7 10:07:01

台儿庄区哪里考电工证内部消息全公开别再交冤枉钱
台儿庄区哪里考电工证内部消息全公开别再交冤枉钱

台儿庄区哪里考电工证内部消息全公开别再交冤枉钱 怕考不过白交培训费?台儿庄区哪里考电工证?很多电工朋友都遇到过这样的情况,选错了培训机构,花了几千块,结果考试没过,证也没拿到,钱打水漂。这年头, 电工证… · 2026/11/7 10:07:01

六枝特区电工证怎么考?上岗必备证书的全流程干货
六枝特区电工证怎么考?上岗必备证书的全流程干货

六枝特区电工证怎么考?上岗必备证书的全流程干货 你是不是正被“急需特种作业证才能上岗找工作”的问题折磨?别急,六枝特区电工证就是你求职路上的“上岗必备”利器。今天我从一个过来人角度,告诉你怎么在六枝特区考电工证、怎么备考、怎么复习,帮你少走… · 2026/11/7 10:07:01

低学历也能考寿县特种作业操作证?含金量高到你想不到
低学历也能考寿县特种作业操作证?含金量高到你想不到

低学历也能考寿县特种作业操作证?含金量高到你想不到 你是不是也担心学历不高报不了名?别急,寿县特种作业操作证报考门槛其实没你想的那么高,只要符合条件, 含金量 照样够硬。今天就带你扒一扒这个证到底值不值得考,还能帮你避开那些坑。… · 2026/11/7 10:07:01

电工证复审多久开始内部消息曝光!别再被中介骗了
电工证复审多久开始内部消息曝光!别再被中介骗了

电工证复审多久开始内部消息曝光!别再被中介骗了 你是不是也遇到过这种情况,电工证快到期了,不知道去哪儿复审,生怕被中介坑钱?电工证复审多久开始这个问题,其实每年都有明确的规定,但很多人还是搞不清。今天我就来给你透露 内部消息… · 2026/11/7 10:06:00

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* 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 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* 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 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* 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 10:29:23

澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄?
澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄?

澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄? 证书过期了不知道怎么复审延期?别慌,很多人在拿到【澳洲水电工证考试】的电子证书后,一不小心就忽略了复审时间,结果证书失效,工作受阻,甚至被单位追责。今天就从【澳洲水电工证考试… · 2026/11/7 0:00:41

电工作业提示版通过率揭秘:怎么考才能一次过?
电工作业提示版通过率揭秘:怎么考才能一次过?

电工作业提示版通过率揭秘:怎么考才能一次过? 怕考不过白交培训费?别急,今天我就从驻马店应届工程类毕业生的视角,带你全面了解电工作业提示版的考试流程、备考要点和真实通过率,帮你少走弯路、提高一次通过率。… · 2026/11/7 0:00:41

电工证年审报名千万别踩坑 外省证转过来要搞清这几点
电工证年审报名千万别踩坑 外省证转过来要搞清这几点

电工证年审报名千万别踩坑 外省证转过来要搞清这几点 之前考的证在外省能不能转过来?这个问题是很多电工从业者最关心的,特别是像你这样在商丘从事公路工程的人员,经常需要跨省流动,证书的 有效性 和 可迁移性… · 2026/11/7 0:00:41

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* 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 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* 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 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* 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 10:29:23

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码