- 浏览: 1602087 次
- 来自: 上海
-
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
spring 两种后处理器
第一种,Bean 后处理器
对容器中bean进行处理,对bean的功能进行额外的增强
容器后处理器
spring已经提供了如下几个容器后处理器
PropertyPlaceHolderConfigurer 属性占位符配置器
dbconn.properties
PropertyOverrideConfigurer:重写占位符配置器
db.properties
第一种,Bean 后处理器
对容器中bean进行处理,对bean的功能进行额外的增强
package cn.sh.processor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import cn.sh.springmvc.applicationContextAware.MyContent; import cn.sh.springmvc_java.American; /** * Spring Bean的后置处器 * @author Bin * */ public class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("Bean后处理器在初始化之前对"+beanName+"进行增强处理...."); //bean 容器中的Bean //返回的Bean 可以和原Bean截然不同 return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("Bean后处理器在初始化之后对"+beanName+"进行增强处理..."); if(bean instanceof MyContent){ System.out.println("修改BeanName的名字"); MyContent a=(MyContent)bean; a.setBeanName("Struts2权威指南"); } return bean; } } <!--Bean 后置处理器 --> <bean id="beanPostProcessor" class="cn.sh.processor.MyBeanPostProcessor"/>
//如果采用ApplicationContext 作为容器,不需要手动注入Bean后处理器 //测试 BeanPostProcessor @Test public void test13() { AbstractApplicationContext act=new ClassPathXmlApplicationContext("classpath*:applicationContent.xml"); MyContent p=act.getBean("ZG",MyContent.class); //获取容器 System.out.println(p.getContext()); System.out.println(act==p.getContext()); //获取配置的bean id System.out.println("BeanName:"+p.getBeanName()); //销毁 act.registerShutdownHook(); } //如果采用 BeanFactory 作为spring的容器,需要手动注入bean后处理器 @Test public void test18() { ClassPathResource isr=new ClassPathResource("applicationContent.xml"); XmlBeanFactory beanFactory=new XmlBeanFactory(isr); MyBeanPostProcessor proc=beanFactory.getBean("beanPostProcessor", MyBeanPostProcessor.class); //如果采用beanfactory, bean后处理器必须显示的注入到 factory中 beanFactory.addBeanPostProcessor(proc); MyContent p=beanFactory.getBean("ZG",MyContent.class); //获取容器 System.out.println(p.getContext()); //获取配置的bean id System.out.println("BeanName:"+p.getBeanName()); }
容器后处理器
package cn.sh.processor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.core.Ordered; public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor,Ordered { @Override public void postProcessBeanFactory( ConfigurableListableBeanFactory beanFactory) throws BeansException { System.out.println("程序对Spring所做的BeanFactory的初始化没有改变.."); System.out.println("Spring容器是:"+beanFactory); } @Override public int getOrder() { System.out.println("采用Ordered 来指定 后处理器的order属性"); return 0; } } <bean id="beanFactoryProcessor" class="cn.sh.processor.MyBeanFactoryPostProcessor"/>
//如果采用 BeanFactory 作为spring的容器,需要手动注入beanFactory后处理器 @Test public void test19() { ClassPathResource isr=new ClassPathResource("applicationContent.xml"); XmlBeanFactory beanFactory=new XmlBeanFactory(isr); MyBeanFactoryPostProcessor bfprocessor=beanFactory.getBean("beanFactoryProcessor", MyBeanFactoryPostProcessor.class); bfprocessor.postProcessBeanFactory(beanFactory); MyContent p=beanFactory.getBean("ZG",MyContent.class); //获取容器 System.out.println(p.getContext()); //获取配置的bean id System.out.println("BeanName:"+p.getBeanName()); } //如果采用 ApplicationContext作为spring的容器,则不用进行手动注入
spring已经提供了如下几个容器后处理器
PropertyPlaceHolderConfigurer:属性占位符配置器 PropertyOverrideConfigurer:重写占位符配置器 CustomAutowireConfigurer:自定义自动装配的配置器 CustomScopeConfigurer:自定义作用配置器
PropertyPlaceHolderConfigurer 属性占位符配置器
<!--两种配置方式 属性占位符 后处理器 如果导入了context Schema 可以用cotent: --> <!-- <context:property-placeholder location="classpath:dbconn.properties"/> --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>dbconn.properties</value> </list> </property> </bean> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/> <property name="minPoolSize" value="${jdbc.minPoolSize}"/> <property name="initialPoolSize" value="${jdbc.initialPoolSize}"/> <property name="MaxIdleTime" value="${jdbc.MaxIdleTime}"/> </bean>
dbconn.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mytest jdbc.username=root jdbc.password=123456 jdbc.maxPoolSize=40 jdbc.minPoolSize=1 jdbc.initialPoolSize=1 jdbc.MaxIdleTime=20
PropertyOverrideConfigurer:重写占位符配置器
<!-- 采用 重写 占位符配置器 发现: 重写 占位符 可以覆盖 属性占位符 中的值 两种配置方式 --> <context:property-override location="classpath:db.properties"/> <!-- <bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer"> <property name="locations"> <list> <value>db.properties</value> </list> </property> </bean> --> <!--采用 重写 占位符后 就可以不用 指定 属性了 --> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> </bean>
db.properties
#beanName.property=value 的命名格式 datasource.driverClass=com.mysql.jdbc.Driver datasource.jdbcUrl=jdbc:mysql://localhost:3306/mytest datasource.user=root datasource.password=123456 datasource.maxPoolSize=40 datasource.minPoolSize=1 datasource.initialPoolSize=1 datasource.MaxIdleTime=20
发表评论
-
spring-session 中的坑
2017-07-06 15:34 10023spring-session 配置 依赖 gradle ... -
Spring AspectJ Aop Annotation
2017-03-29 17:08 729import org.aspectj.lang.Proce ... -
spring 第13天 使用@scheduled注解执行定时任务
2015-01-06 23:11 54145我们使用spring的注解 @Scheduled 执行定时任务 ... -
Spring 第12天,事务传播属性和 隔离级别
2014-09-28 00:36 8401 事务的传播属性(Propagation) 1) REQ ... -
spring 第11天 quartz任务调度
2014-08-24 13:59 1179Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
spring 第10 天 AOP 面向切面
2014-08-21 00:08 1775AOP(Aspect Orient Programming ... -
spring 第9天 Resurce 资源访问
2014-08-17 22:20 1917Spring Resource接口 spring提供的Reso ... -
spring 第8天 Spring 注解
2014-08-17 15:33 1500spring注解 @Component:标注一个普通的sp ... -
spring 第6天SpEL,P命名空间,Util Schema
2014-08-13 22:52 1358使用p名称空间配置属性 ... -
spring 第5天不同作用域的bean,注入Field,方法返回值
2014-08-11 22:31 2151协调作用域不同步的bean 问题是;当一个singleton的 ... -
spring 第4天bean继承,init,destory-method
2014-08-10 17:54 1680深入理解Spring容器中的b ... -
spring 第3天使用java类和XML配置bean
2014-08-09 16:51 1543下面采用java类来配置bean,前面都采用xml进行配置be ... -
spring 第2天,bean作用域,自动注入集合
2014-08-06 22:16 1966sping容器中的Bean <!---beans的全 ... -
spring 第1天 IOC,DI,国际化,容器事件
2014-08-04 21:27 14231.构造注入(就是使用 构 ... -
SpringMVC 注解 和非注解
2014-01-26 10:29 18067首先看看非注解的项目结构 在web.xml文件 配置spr ... -
详解spring 每个jar的作用
2013-11-19 23:54 3948spring.jar 是包含有完整 ... -
Spring配置Hibernate事务
2013-11-10 13:45 1243为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事 ... -
Spring 中引用Properties文件
2013-08-29 14:39 10688其中部分配置信息(邮件发送相关): #邮件发送的相关配置 ... -
Spring IOC控制反转 依赖注入DI
2012-12-15 09:37 2349目录 1.使用IOC控制反转 中的DI依赖注入 手工注入 ... -
Spring IOC控制反转 依赖注入DI
2012-12-14 16:23 8目录 1.使用IOC控制反转 中的DI依赖注入 (两种配置方式 ...
相关推荐
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!
敏感图片敏感图片敏感图片敏感图片敏感图片敏感图片11敏感图片敏感图片敏感图片敏感图片敏感图片敏感图片1122
通信管道统建工程施工合同.docx
挂载网盘到本地工具.zip
Spatial intelligence and geography 空间智能和地理.doc
黑板风格毕业答辩模板是一系列富有创意和趣味性的答辩文档模板,专为追求独特表达的大学生设计。这25个模板模拟了传统黑板的效果,结合了手绘风格与现代设计理念,使得内容呈现既生动又具学术感。每个模板都强调清晰的结构和易于理解的布局,适用于各类学科和研究领域,帮助学生有效地展示研究成果和核心观点。 黑板风格不仅带来亲切感,还能唤起人们对课堂学习的回忆,为答辩增添了轻松而专业的氛围。这些模板配备了丰富的图标、示意图和配色,既美观又实用,能够帮助学生在答辩中更好地吸引评审的注意力,增强信息的传达效果。无论是科技、艺术还是人文社科,黑板风格毕业答辩模板都能够为你的演示增添一份独特的魅力,提升你的表现,助力你在毕业答辩中取得成功。
世邦魏理仕:2021年重庆房地产市场回顾与2022年展望
IMG_20250416_154916.jpg
智慧农业,作为现代农业的新篇章,正引领着农业生产的革命性变革。本解决方案以物联网、云计算、大数据等先进技术为核心,为农业生产打造了一套全面、智能的管理系统。 想象一下,从温室大棚到广袤田野,智能传感器遍布每个角落,它们能实时感知空气温湿度、土壤水分、光照强度等环境参数,仿佛为农作物装上了“眼睛”和“耳朵”。这些数据通过物联网技术传输到云端,经过大数据分析,为农民提供精准的种植建议,如何时灌溉、施肥、防虫,让农业生产变得更加科学、高效。 更有趣的是,通过智慧农业平台,农民可以远程监控作物生长情况,甚至用手机就能控制温室大棚的遮阳板、通风设备等,实现“指尖上的农业”。此外,方案还包含了农产品可追溯系统,从田间到餐桌,每一步都可追溯,让消费者吃得放心。而智慧农业电商平台,则让农产品销售更加便捷,农民直接对接市场,收益倍增。 总之,这套智慧农业解决方案不仅让农业生产变得更加智能、高效,还提升了农产品的质量和安全,为农民带来了实实在在的收益,开启了农业现代化的新篇章。 对于想要投身智慧农业领域的你来说,这不仅仅是一套解决方案,更是一把开启现代农业大门的钥匙,引领你走向更加辉煌的未来。
自动承保新员工示例-雇主责任险
内容概要:本文档主要介绍了Java代码连接Redis集群的方法,包括早期尝试的代码和修正后的有效代码。早期代码使用了`ShardedJedisPool`来管理多个`JedisShardInfo`对象,并设置了连接池参数和密码认证。然而,这段代码在实际的Redis集群环境中无法正常运行。修正后的代码采用了`JedisCluster`类,并通过配置连接池参数、设置密码以及定义集群节点信息,实现了与Redis集群的成功连接。此外,还提供了获取哈希表数据和集合数据的示例方法。 适合人群:具备一定Java编程经验,尤其是对Redis有一定了解的研发人员。 使用场景及目标:①学习如何正确配置Java代码连接Redis集群,包括设置连接池参数、密码认证和集群节点信息;②掌握通过`JedisCluster`类进行基本的Redis操作,如获取哈希表数据和集合数据。 阅读建议:读者应重点关注修正后的代码部分,理解其相对于早期代码的改进之处,特别是关于`JedisCluster`类的使用方法及其在连接Redis集群中的优势。同时,在实践中可以根据自己的需求调整连接池参数和密码配置。
通信基站几种供电方案比较.doc
内容概要:本文详细介绍了MCP(Model Context Protocol,模型上下文协议)的原理与开发流程。MCP协议起源于2024年11月25日Anthropic发布的文章,旨在解决不同AI模型间工具调用的碎片化问题,提供标准化接入方式,实现多功能应用与创新体验。文章首先解释了MCP的核心概念及其重要性,接着深入探讨了MCP Server和Client的开发步骤,包括项目搭建、工具注册、资源创建、提示符配置以及调试方法。此外,还讲解了MCP的工作原理,特别是C/S架构、JSON-RPC 2.0协议的应用,以及模型如何选择和执行工具。最后,通过一个实际案例展示了如何利用MCP协议构建一个企业微信机器人,实现查询知识库并将结果发送到群聊中。 适合人群:具备一定编程基础,对AI模型集成、标准化开发感兴趣的开发者,尤其是从事大语言模型相关工作的工程师。 使用场景及目标:①解决多模型集成中的工具调用标准化问题;②构建具备多种功能的企业级AI应用,如邮件发送、图像生成等;③学习如何通过MCP协议实现模型决策与工具执行的解耦,提升开发效率和用户体验。 阅读建议:本文适合有一定编程经验的读者,尤其是对AI模型集成有需求的技术人员。建议读者跟随文中提供的示例代码进行实践,理解MCP协议的核心机制,并尝试构建自己的MCP应用。同时,关注官方文档和社区动态,以获取最新的技术支持和开发指南。
bofangBEEP
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
Qt+Opencv 显示多摄像头画面
文章基于彭博专业服务提供的数据,对中国房地产行业2023年的信用展望进行了详细分析。首先,中国政府出台了16项措施支持房地产行业发展,旨在打破行业恶性循环并改善地产商的现金流状况。政府的支持措施包括银行贷款、信托展期、债券发行计划等,这些措施有助于缓解地产商的资金压力,但效果取决于贷款规模。其次,文章指出,若政府持续提供支持,房地产销售有望复苏,尤其是投资级地产商的现金覆盖率较高,能更好地应对债务到期压力。然而,高收益地产商的现金覆盖率较低,面临更大的再融资风险。此外,2023年中资地产债到期规模较大,尤其是在第一季度和第二季度,可能导致再融资缺口扩大。最后,文章分析了不同评级地产商的债券表现,指出投资级地产债可能面临与高收益地产债类似的再融资压力,而高收益地产债的价格已接近历史低点,进一步下行空间有限。
第十一章:链表和共用体的个别例子,第十一章:链表和共用体的个别例子,第十一章:链表和共用体的个别例子
这个实现是基础的 Transformer 层,可以根据需要扩展,例如加入位置编码、掩码机制等。
西电周佳社老师的微机原理课笔记,本节内容主要是二进制十进制之间转换的几种方法