本篇文章我们分析一下Spring源码中refresh()--prepareBeanFactory以下两个方法。
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));
首先我们可以看到在prepareBeanFactory这个方法里面有多个addBeanPostProcessor方法的调用。以下是源码,可以发现是存的一个BeanPostProcessor接口实现类的数组;说明ApplicationContextAwareProcessor这个类和ApplicationListenerDetector类是BeanPostProcessor的实现类。
public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport implements ConfigurableBeanFactory {
/** BeanPostProcessors to apply in createBean */
private final List beanPostProcessors = new ArrayList<>();
}
我们接着去看一下BeanPostProcessor接口是什么东西。以下是源码,其实我们从名称里面就大概知道是什么意思。就是对象初始化途中,必须会经过这两个方法。 那么这两个方法是做什么用的。我们接着往下看
public interface BeanPostProcessor {
/**
* Apply this BeanPostProcessor to the given new bean instance before any bean
* initialization callbacks (like InitializingBean's {@code afterPropertiesSet}
* or a custom init-method). The bean will already be populated with property values.
* The returned bean instance may be a wrapper around the original.
* The default implementation returns the given {@code bean} as-is.
* @param bean the new bean instance
* @param beanName the name of the bean
* @return the bean instance to use, either the original or a wrapped one;
* if {@code null}, no subsequent BeanPostProcessors will be invoked
* @throws org.springframework.beans.BeansException in case of errors
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet
*/
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
/**
* Apply this BeanPostProcessor to the given new bean instance after any bean
* initialization callbacks (like InitializingBean's {@code afterPropertiesSet}
* or a custom init-method). The bean will already be populated with property values.
* The returned bean instance may be a wrapper around the original.
*
In case of a FactoryBean, this callback will be invoked for both the FactoryBean
* instance and the objects created by the FactoryBean (as of Spring 2.0). The
* post-processor can decide whether to apply to either the FactoryBean or created
* objects or both through corresponding {@code bean instanceof FactoryBean} checks.
*
This callback will also be invoked after a short-circuiting triggered by a
* {@link InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation} method,
* in contrast to all other BeanPostProcessor callbacks.
*
The default implementation returns the given {@code bean} as-is.
* @param bean the new bean instance
* @param beanName the name of the bean
* @return the bean instance to use, either the original or a wrapped one;
* if {@code null}, no subsequent BeanPostProcessors will be invoked
* @throws org.springframework.beans.BeansException in case of errors
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet
* @see org.springframework.beans.factory.FactoryBean
*/
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
我们先看一个BeanPostProcessor接口的实现类 ApplicationContextAwareProcessor 重点看这个类的实现方法,看源码我们知道,这个invokeAwareInterfaces方法做的事情, bean instanceof Aware 表示bean对象是不是Aware接口的实现类的实例对象。如果是 就会进行一系列的初始化操作。给属性赋值。
@Override
@Nullable
public Object postProcessBeforeInitialization(final Object bean, String beanName) throws BeansException {
AccessControlContext acc = null;
if (System.getSecurityManager() != null &&
(bean instanceof EnvironmentAware || bean instanceof EmbeddedValueResolverAware ||
bean instanceof ResourceLoaderAware || bean instanceof ApplicationEventPublisherAware ||
bean instanceof MessageSourceAware || bean instanceof ApplicationContextAware)) {
acc = this.applicationContext.getBeanFactory().getAccessControlContext();
}
if (acc != null) {
AccessController.doPrivileged((PrivilegedAction) () -> {
invokeAwareInterfaces(bean);
return null;
}, acc);
}
else {
invokeAwareInterfaces(bean);
}
return bean;
}
private void invokeAwareInterfaces(Object bean) {
if (bean instanceof Aware) {
if (bean instanceof EnvironmentAware) {
((EnvironmentAware) bean).setEnvironment(this.applicationContext.getEnvironment());
}
if (bean instanceof EmbeddedValueResolverAware) {
((EmbeddedValueResolverAware) bean).setEmbeddedValueResolver(this.embeddedValueResolver);
}
if (bean instanceof ResourceLoaderAware) {
((ResourceLoaderAware) bean).setResourceLoader(this.applicationContext);
}
if (bean instanceof ApplicationEventPublisherAware) {
((ApplicationEventPublisherAware) bean).setApplicationEventPublisher(this.applicationContext);
}
if (bean instanceof MessageSourceAware) {
((MessageSourceAware) bean).setMessageSource(this.applicationContext);
}
if (bean instanceof ApplicationContextAware) {
((ApplicationContextAware) bean).setApplicationContext(this.applicationContext);
}
}
}
那么我们看一下 Aware接口到底是什么。其实我们可以看一个的例子。可以看到BeanNameAware 这个方法提供了一个setBeanName的方法。可以看到注释,其实就是设置实现了这个接口的类的实例的name。依次类推,其它所以实现了Aware的接口都是设置自己相关属性。所以我们可以看到上面源码中一系列的if条件判断比如if (bean instanceof EnvironmentAware) if (bean instanceof EmbeddedValueResolverAware) 等。其实都是设置自己相关属性。也就是初始化属性。
public interface BeanNameAware extends Aware {
/**
* Set the name of the bean in the bean factory that created this bean.
*
Invoked after population of normal bean properties but before an
* init callback such as {@link InitializingBean#afterPropertiesSet()}
* or a custom init-method.
* @param name the name of the bean in the factory.
* Note that this name is the actual bean name used in the factory, which may
* differ from the originally specified name: in particular for inner bean
* names, the actual bean name might have been made unique through appending
* "#..." suffixes. Use the {@link BeanFactoryUtils#originalBeanName(String)}
* method to extract the original bean name (without suffix), if desired.
*/
void setBeanName(String name);
}
接下来我们分析一下beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));这个中的ApplicationListenerDetector。首先我们可以知道,是往容器(beanFactory)中又加了一个BeanPostProcessor的。到时候spring是会进行遍历调用BeanPostProcessor的postProcessAfterInitialization这个方法的。所以我们看postProcessAfterInitialization中做了上面。可以看到会首先判断bean是不是ApplicationListener这个实现类的实例。如果是就会把它添加进当前容器的ApplicationListener属性中,其实这里判断的是该bean是不是实现了ApplicationListener这个接口。如果实现了这个接口,我们就把它 当成是一个监听者。其实这里就是在进行判断bean初始化过程中进行判断,是不是监听者对象,如果是监听者对象,我们就把这个对象添加到监听者对象数组中,以备后用。如果当前bean不是监听者,当前postProcessAfterInitialization方法,我们就不做任何处理。
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
if (bean instanceof ApplicationListener) {
// potentially not detected as a listener by getBeanNamesForType retrieval
Boolean flag = this.singletonNames.get(beanName);
if (Boolean.TRUE.equals(flag)) {
// singleton bean (top-level or inner): register on the fly
this.applicationContext.addApplicationListener((ApplicationListener) bean);
}
else if (Boolean.FALSE.equals(flag)) {
if (logger.isWarnEnabled() && !this.applicationContext.containsBean(beanName)) {
// inner bean with other scope - can't reliably process events
logger.warn("Inner bean '" + beanName + "' implements ApplicationListener interface " +
"but is not reachable for event multicasting by its containing ApplicationContext " +
"because it does not have singleton scope. Only top-level listener beans are allowed " +
"to be of non-singleton scope.");
}
this.singletonNames.remove(beanName);
}
}
return bean;
}
总结:BeanPostProcessor这个接口其实就是Spring容器中bean对象初始化途中,进行的初始化化自身,或者初始化当前容器的属性或者其他对象的属性等。
这里的监听者对象,其实就是容器中的事件接收者。下一篇我们进行深入分析一下spring中的事件处理,自定义事件,自定义监听者。
你可能感兴趣的:(Spring,源码分析,spring)
【SpringBoot】37、SpringBoot整合EasyPoi自定义字典导出Excel
Asurplus
SpringBoot 2.x系列 java easypoi poi springboot autopoi
前面我们介绍了SpringBoot中使用JeecgBoot的Autopoi导出Excel,其实Autopoi的底层也是EasyPoi,对于Excel的导入/导出也是非常方便的。那EasyPoi也是基于POI的,如果对这方面想要深究的,可以先看看原生POI的导入/导出方式,你会回来选择EasyPoi的一、简介EasyPoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方
Spring Cloud 的限流、熔断、降级
java1224
spring cloud spring 后端
一、限流、熔断、降级的概念(一)限流--系统的“流量警察”限流是指在一段时间内,限制系统能够处理的请求数量,以防止系统因过多的请求而崩溃。限流可以有效地保护系统的资源,确保系统在高负载情况下仍然能够正常运行。例如,一个电商网站在促销活动期间,可能会面临大量的用户请求。如果不进行限流,系统可能会因为无法处理这么多请求而崩溃,导致用户无法访问网站。通过限流,可以限制每秒能够处理的请求数量,确保系统不会
SpringCloud组件梳理
java1224
java spring cloud
一、nacos在nacos配置中改权重只是临时生效,在配置文件中改nacos的权重是永远生效nacos的权重为0时,不会访问。springclude中实现负载均衡的两种方式:1.消费者端loadBalancerClient调用(轮询)2.在nacos中配置权重若两者都配置以消费者端为准在配置文件中进行权重配置:cloud: nacos: discovery: weight:0.1 #注意:如
Angular ng --help 源码分析
angular
先准备一下随便找个空文件夹,运行npmi@angular/cli@19.0.7使用npx--package=[@]--[args...]运行ng--helpC:\Users\zhouhuajian\Desktop\demo>npx--package=@angular/cli--ng--helpngCommands:ngbuild[project]CompilesanAngularapplicati
Angular CLI 源码分析
准备:安装Node.jshttps://nodejs.org/;安装VSCodehttps://code.visualstudio.com/;创建文件夹angular-cli-source-learn;安装AngularCLInpminstall@angular/clihttps://www.npmjs.com/package/@angular/cli;开发时一般全局安装npminstall-g@
基于微服务架构的毕业设计:2025年计算机毕业设计选题汇总(建议收藏)✅
会写代码的羊
毕设选题 架构 微服务 课程设计 毕设系统 毕设选题 微服务架构 java微服务
文章目录前言最新毕设选题(建议收藏起来)基于微服务架构的毕业设计选题毕设作品推荐前言2025全新毕业设计项目博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。精彩专栏推荐订阅计算机毕业设计精品项目案例-500套基于JavaSpringBoot的微信校园二手交易小程序平台开发系列(一)基于校园二手物品交易小程序系统设计与实现系列(二)基于云开发微
w238光影视频平台
卓怡学长
计算机毕业设计 java spring spring boot 数据库 课程设计 maven
作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。作者完整代码目录供你选择:《Springboot网站项目》400套《ssm网站项目》800套《小程序项目》300套《App项目》500套《Python网站项目
Java架构师之路:微服务架构图解和详情
技术人小冯
分布式微服务 微服务架构 分布式 架构 java
微服务框架搭建:总体规划框架名称当前技术选型方案微服务框架搭建开发框架单体服务SpringBoot分布式框架SpringCloud最新框架SpringCloudAlibaba服务配置中心+服务消息总线阿里巴巴Nacos、Config+Bus+RabbitMQ配合使用、携程apolo服务网关SpringCloud-Gateway服务降级限流阿里Sentienl、SpringCloud-Hystrix
Spring 源码硬核解析系列专题(扩展篇):Spring Batch 的恢复机制源码解析
yinlongfei_love
spring batch java
在第九期中,我们深入探讨了SpringBatch的批处理流程,剖析了Job和Step的执行机制。在企业级应用中,批处理任务可能因异常(如数据库故障、网络中断)失败,如何从失败点恢复并继续执行,是SpringBatch的关键特性之一。本篇将聚焦SpringBatch的恢复机制,深入源码分析其实现原理,并补充相关图示。1.恢复机制的核心概念SpringBatch的恢复机制依赖以下组件:JobRepos
【构建企业级Spring Boot应用:从基础到高级的全面指南】
小怪兽9699
spring boot 后端 java
摘要本文旨在为开发者提供一份详尽的指南,帮助大家深入理解并掌握如何使用SpringBoot框架来快速开发企业级应用程序。通过实际案例分析、代码示例以及架构设计思路分享,读者不仅能够学习到理论知识,还能获得宝贵的实践经验。本文将涵盖从环境搭建、项目创建、配置管理、数据访问层、Web服务开发、安全机制实现、日志记录、单元测试与集成测试,到最终的部署上线等各个方面。目录摘要目录引言SpringBoot简
能懂!基于Springboot的用户增删查改(三层设计模式)
web13688565871
面试 学习路线 阿里巴巴 spring boot 设计模式 后端
MadebyTianlanghttps://github.com/Tianlang-create背景左家垅大学安排计算机专业的学生在期末前进行了JavaWeb的实训,Tianlang对此很疑惑:1>什么是数据库?怎么使用2>怎么在IDEA连接数据库3>怎么搭建应用DSC框架特别地,Dao层(或Repository)怎么和数据库搭上关系?Service层又怎么实现调用Dao接口?Controller
从零开始:Spring Boot核心概念与架构解析
小筱在线
springboot spring boot 架构 后端
引言在当今的Java开发领域,SpringBoot已经成为构建企业级应用的首选框架之一。它以其简洁、高效、易于上手的特点,极大地简化了Spring应用的开发过程。本文将从SpringBoot的核心概念入手,深入解析其架构设计和运行原理,帮助读者从零开始全面理解SpringBoot。一、SpringBoot简介1.1什么是SpringBoot?SpringBoot是由Pivotal团队提供的基于Sp
SpringBoot 使用 logback进行日志输出
疯狂的键盘侠
spring boot java spring boot logback 后端
基于SringBoot项目SpringBoot使用logback进行日志输出在resources目录下创建logback-spring.xml文件,并填写以下内容,请根据实际修改:logbackdebug${CONSOLE_LOG_PATTERN}UTF-8${log.path}/log_debug.log${FILE_LOG_PATTERN}UTF-8${log.path}/debug/log-
通过logback日志简单实现链路追踪
LUCIAZZZ
logback 计算机网络 后端 java spring boot spring
流程解析:让所有经过Controller的方法都有一个唯一ID,我们往logback日志的MDC里面加我们的唯一ID,然后在配置文件里面指定我们的logback日志输出的格式,这样子我们输出的日志里面就有ID了,我们可以根据这个ID定位我们的想找到的日志方便我们debug需要用到的依赖org.springframework.bootspring-boot-starter-aopcn.hutoolh
SpringBoot使用logback日志框架超详细教程
2301_81937891
spring boot logback 单元测试
前言项目中日志系统是必不可少的,目前比较流行的日志框架有log4j、logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外slf4j(SimpleLoggingFacadeforJava)则是一个日志门面框架,提供了日志系统中常用的接口,logback和log4j则对slf4j进行了实现。我们本文将讲
Feign vs Dubbo:轻量级REST对决高性能RPC,谁才是微服务通信的真命天子?
码农技术栈
dubbo rpc 微服务 spring cloud spring boot
微服务架构中,服务间的通信就像一场“默契对话”——Feign和Dubbo是两种截然不同的“语言”。一个像“打电话”一样简单直接,一个像“视频会议”一样高效复杂。今天我们就用最接地气的方式,拆解它们的差异与适用场景!一、角色定位:一个像“电话”,一个像“视频会议”Feign:轻量级HTTP通信专家出身:SpringCloud生态的“亲儿子”,基于HTTP协议,主打声明式RESTful调用。特点:像打
Maven 与持续集成(CI)/ 持续部署(CD)(二)
计算机毕设定制辅导-无忧学长
# Maven maven ci/cd java
五、案例实战5.1项目背景为了更直观地展示Maven与CI/CD的结合应用,我们以一个SpringBoot项目为例。假设这是一个在线图书管理系统,用户可以进行图书的查询、借阅、归还等操作,管理员则可以对图书信息进行管理,包括添加、修改、删除图书等。该项目的技术架构采用了典型的三层架构模式,即表现层、服务层和数据层。在表现层,使用SpringMVC框架来处理HTTP请求和响应,通过RESTfulAP
关于Spring Boot 2.x升3.x的那些事
arbiterlk
spring boot java
序言手头上有个项目,准备从SpringBoot2.x升级到3.x,升级后发现编译器报了一堆错误。一般来说大版本升级,肯定会有诸多问题,对于程序开发来说能不升就不升。但是对于系统架构来说,能用最新的肯定是用最新的,实在不行再降回去嘛。可是呢,不知道是发布没多久,还是我搜索技巧的问题,很多问题在网上找不到答案。没办法,还是得自己研究,所以呢这次我们就一起来研究一下SpringBoot3.x究竟有什么改
升级 Spring Boot
Spring认证
Spring java 开发语言 spring
14天阅读挑战赛项目wiki上提供了有关如何从早期版本的SpringBoot升级的说明。按照发行说明部分中的链接查找要升级到的版本。升级说明始终是发行说明中的第一项。如果您落后多个版本,请确保您还查看了您跳过的版本的发行说明。1.从1.x升级如果您是从1.xSpringBoot版本升级,请查看项目wiki上提供详细升级说明的“迁移指南”。另请查看“发行说明”以获取每个版本的“新的和值得注意的”功能
Spring Boot 3.x 基于 Redis 实现邮箱验证码认证
Vcats
spring boot redis 后端
文章目录依赖配置开启QQ邮箱SMTP服务配置文件代码实现验证码服务邮件服务接口实现执行流程依赖配置org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-data-redis3.4.2org.apache.commonscommons-pool22.11.1io.lettu
东方通(tongweb)替换springboot内置tomcat
莹火虫✌
spring boot 后端 tomcat
最近公司的的产品需要用国产化组件,我们的项目原来使用的是springboot内置的tomcat,需要用tongweb做替换。1.首先tongweb不是免费的,需要向东方通购买2.通过东方通提供的压缩包(我们的版本是TongWeb8.0.E.1),我们先打开001_TongWeb_V8.0嵌入式版_JavaEE标准容器用户指南_80E1A01.pdf(东方通公司提供的组件内容有可能不太一样,我用的是
Hadoop毕业设计:计算机毕业设计选题汇总(建议收藏)
会写代码的羊
毕设选题 hadoop 课程设计 大数据 毕设选题 毕设题目 数据分析
文章目录前言基于Hadoop的毕业设计选题毕设作品展示前言2025全新毕业设计项目博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。精彩专栏推荐订阅计算机毕业设计精品项目案例-500套基于JavaSpringBoot的微信校园二手交易小程序平台开发系列(一)基于校园二手物品交易小程序系统设计与实现系列(二)基于云开发微信小程序二手闲置商城校园跳
会话超时 计算机术语,Servlet会话超时(Servlet Session timeout)
weixin_39582708
会话超时 计算机术语
Servlet会话超时(ServletSessiontimeout)我正在写我的SPringMVC网络应用程序。我已将会话时间设置为10080分钟,等于1周。现在我想让用户在每次打开浏览器时都登录:sessionService.setcurrentUser(myuser);HttpSessionsession=request.getSession();Cookiecookie=newCookie(
Spring MVC中使用HttpSession管理会话属性
t0_54program
数据库 个人开发
在SpringMVC开发中,我们常常需要处理用户会话(Session)相关的数据。虽然Spring提供了SessionScope的Bean来管理会话数据,但在某些情况下,我们可能无法使用这种方式。这时,我们可以借助低级别的ServletAPI来实现会话管理。本文将通过一个具体的实例,展示如何在SpringMVC控制器中使用javax.servlet.http.HttpSession来管理会话属性。
一周一个Unity小游戏2D反弹球游戏 - 球反弹的方向
HahaGiver666
一周一个Unity小游戏开发 - 2D反弹球 unity 游戏引擎 游戏
前言本文将实现当球在球板上反弹时,会根据球板移动的方向来给球施加反弹的力,例如当球板往左移动时反弹球,则球应向左上方反弹,若球板往右移动时反弹球,则球应向右上方反弹。实现球板的反弹方向逻辑首先给SpringBoard游戏物体添加上2D的刚体,并设置好对应的参数,锁定球板Y的位置和旋转角度,如下。将球板的位置移动改为物理的移动方式,使用Rigidbody2D里的MovePosition方法,代码如下
Spring Data JPA与SpEL:实现通用泛型仓库
t0_54manong
python 数据库 sql 个人开发
在SpringDataJPA中,SpEL(SpringExpressionLanguage)是一种强大的表达式语言,可以用于动态地构建查询语句。通过结合SpEL和泛型,我们可以创建通用的仓库接口,从而减少代码重复并提高开发效率。本文将通过一个具体的例子来展示如何使用SpEL和泛型创建通用仓库。一、背景与需求假设我们有一个任务管理系统,其中包含两种任务类型:异步任务(AsyncTask)和同步任务(
SpringBoot -拦截器Interceptor、过滤器 Filter 及设置
小登ai学习
spring boot 后端
SpringBoot拦截器(Interceptor)的概念-在SpringBoot中,拦截器是一种AOP的实现方式。它主要用于拦截请求,在请求处理之前和之后执行特定的代码逻辑。与过滤器不同的是,拦截器更侧重于对SpringMVC中的控制器(Controller)进行拦截,能够访问到SpringMVC上下文中的对象,比如获取请求的处理器(Handler)信息、模型(Model)和视图(View)相关
Spring Boot拦截器(Interceptor)详解
大地爱
面试 学习路线 阿里巴巴 spring boot 后端 java
拦截器Interceptor拦截器我们主要分为三个方面进行讲解:介绍下什么是拦截器,并通过快速入门程序上手拦截器拦截器的使用细节通过拦截器Interceptor完成登录校验功能1.快速入门什么是拦截器?是一种动态拦截方法调用的机制,类似于过滤器。拦截器是Spring框架中提供的,用来动态拦截控制器方法的执行。拦截器的作用:拦截请求,在指定方法调用前后,根据业务需要执行预先设定的代码。在拦截器当中,
Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程
蹦跑的蜗牛
spring boot 后端 java
SpringBoot拦截器(Interceptor)与过滤器(Filter)详细教程目录概述什么是拦截器(Interceptor)?什么是过滤器(Filter)?两者的核心区别使用场景拦截器的典型应用过滤器的典型应用实现步骤拦截器的创建与配置过滤器的创建与配置代码示例自定义拦截器自定义过滤器执行顺序与流程过滤器、拦截器、Controller的执行顺序可视化流程图常见问题与解决方案总结1.概述1.1
Spring Boot 流式响应豆包大模型对话能力
程序猿小白菜
做个不一样的程序猿 AI生态圈 后端java生态圈 大模型 流式响应 java AI
当SpringBoot遇见豆包大模型:一场流式响应的"魔法吟唱"仪式一、前言:关于流式响应的奇妙比喻想象一下你正在火锅店点单,如果服务员必须等所有菜品都备齐才一次性端上来,你可能会饿得把菜单都啃了。而流式响应就像贴心的服务员,毛肚刚切好就立刻端上桌,肥牛卷还在空中飞着就送到你面前——这就是我们今天要施展的"异步上菜大法"!注:完整代码见底部二、SpringBoot魔法阵搭建2.1召唤SSE精灵@P
PHP如何实现二维数组排序?
IT独行者
二维数组 PHP 排序
二维数组在PHP开发中经常遇到,但是他的排序就不如一维数组那样用内置函数来的方便了,(一维数组排序可以参考本站另一篇文章【PHP中数组排序函数详解汇总】)。二维数组的排序需要我们自己写函数处理了,这里UncleToo给大家分享一个PHP二维数组排序的函数:
代码:
functionarray_sort($arr,$keys,$type='asc'){
$keysvalue= $new_arr
【Hadoop十七】HDFS HA配置
bit1129
hadoop
基于Zookeeper的HDFS HA配置主要涉及两个文件,core-site和hdfs-site.xml。
测试环境有三台
hadoop.master
hadoop.slave1
hadoop.slave2
hadoop.master包含的组件NameNode, JournalNode, Zookeeper,DFSZKFailoverController
由wsdl生成的java vo类不适合做普通java vo
darrenzhu
VO wsdl webservice rpc
开发java webservice项目时,如果我们通过SOAP协议来输入输出,我们会利用工具从wsdl文件生成webservice的client端类,但是这里面生成的java data model类却不适合做为项目中的普通java vo类来使用,当然有一中情况例外,如果这个自动生成的类里面的properties都是基本数据类型,就没问题,但是如果有集合类,就不行。原因如下:
1)使用了集合如Li
JAVA海量数据处理之二(BitMap)
周凡杨
java 算法 bitmap bitset 数据
路漫漫其修远兮,吾将上下而求索。想要更快,就要深入挖掘 JAVA 基础的数据结构,从来分析出所编写的 JAVA 代码为什么把内存耗尽,思考有什么办法可以节省内存呢? 啊哈!算法。这里采用了 BitMap 思想。
首先来看一个实验:
指定 VM 参数大小: -Xms256m -Xmx540m
java类型与数据库类型
g21121
java
很多时候我们用hibernate的时候往往并不是十分关心数据库类型和java类型的对应关心,因为大多数hbm文件是自动生成的,但有些时候诸如:数据库设计、没有生成工具、使用原始JDBC、使用mybatis(ibatIS)等等情况,就会手动的去对应数据库与java的数据类型关心,当然比较简单的数据类型即使配置错了也会很快发现问题,但有些数据类型却并不是十分常见,这就给程序员带来了很多麻烦。
&nb
Linux命令
510888780
linux命令
系统信息
arch 显示机器的处理器架构(1)
uname -m 显示机器的处理器架构(2)
uname -r 显示正在使用的内核版本
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
hdparm -i /dev/hda 罗列一个磁盘的架构特性
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
cat /proc/cpuinfo 显示C
java常用JVM参数
墙头上一根草
java jvm参数
-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2
我的spring学习笔记9-Spring使用工厂方法实例化Bean的注意点
aijuans
Spring 3
方法一:
<bean id="musicBox" class="onlyfun.caterpillar.factory.MusicBoxFactory"
factory-method="createMusicBoxStatic"></bean>
方法二:
mysql查询性能优化之二
annan211
UNION mysql 查询优化 索引优化
1 union的限制
有时mysql无法将限制条件从外层下推到内层,这使得原本能够限制部分返回结果的条件无法应用到内层
查询的优化上。
如果希望union的各个子句能够根据limit只取部分结果集,或者希望能够先排好序在
合并结果集的话,就需要在union的各个子句中分别使用这些子句。
例如 想将两个子查询结果联合起来,然后再取前20条记录,那么mys
数据的备份与恢复
百合不是茶
oracle sql 数据恢复 数据备份
数据的备份与恢复的方式有: 表,方案 ,数据库;
数据的备份:
导出到的常见命令;
参数 说明
USERID 确定执行导出实用程序的用户名和口令
BUFFER 确定导出数据时所使用的缓冲区大小,其大小用字节表示
FILE 指定导出的二进制文
线程组
bijian1013
java 多线程 thread java多线程 线程组
有些程序包含了相当数量的线程。这时,如果按照线程的功能将他们分成不同的类别将很有用。
线程组可以用来同时对一组线程进行操作。
创建线程组:ThreadGroup g = new ThreadGroup(groupName);
&nbs
top命令找到占用CPU最高的java线程
bijian1013
java linux top
上次分析系统中占用CPU高的问题,得到一些使用Java自身调试工具的经验,与大家分享。 (1)使用top命令找出占用cpu最高的JAVA进程PID:28174 (2)如下命令找出占用cpu最高的线程
top -Hp 28174 -d 1 -n 1
32694 root 20 0 3249m 2.0g 11m S 2 6.4 3:31.12 java
【持久化框架MyBatis3四】MyBatis3一对一关联查询
bit1129
Mybatis3
当两个实体具有1对1的对应关系时,可以使用One-To-One的进行映射关联查询
One-To-One示例数据
以学生表Student和地址信息表为例,每个学生都有都有1个唯一的地址(现实中,这种对应关系是不合适的,因为人和地址是多对一的关系),这里只是演示目的
学生表
CREATE TABLE STUDENTS
(
C/C++图片或文件的读写
bitcarter
写图片
先看代码:
/*strTmpResult是文件或图片字符串
* filePath文件需要写入的地址或路径
*/
int writeFile(std::string &strTmpResult,std::string &filePath)
{
int i,len = strTmpResult.length();
unsigned cha
nginx自定义指定加载配置
ronin47
进入 /usr/local/nginx/conf/include 目录,创建 nginx.node.conf 文件,在里面输入如下代码:
upstream nodejs {
server 127.0.0.1:3000;
#server 127.0.0.1:3001;
keepalive 64;
}
server {
liste
java-71-数值的整数次方.实现函数double Power(double base, int exponent),求base的exponent次方
bylijinnan
double
public class Power {
/**
*Q71-数值的整数次方
*实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。
*/
private static boolean InvalidInput=false;
public static void main(
Android四大组件的理解
Cb123456
android 四大组件的理解
分享一下,今天在Android开发文档-开发者指南中看到的:
App components are the essential building blocks of an Android
[宇宙与计算]涡旋场计算与拓扑分析
comsci
计算
怎么阐述我这个理论呢? 。。。。。。。。。
首先: 宇宙是一个非线性的拓扑结构与涡旋轨道时空的统一体。。。。
我们要在宇宙中寻找到一个适合人类居住的行星,时间非常重要,早一个刻度和晚一个刻度,这颗行星的
同一个Tomcat不同Web应用之间共享会话Session
cwqcwqmax9
session
实现两个WEB之间通过session 共享数据
查看tomcat 关于 HTTP Connector 中有个emptySessionPath 其解释如下:
If set to true, all paths for session cookies will be set to /. This can be useful for portlet specification impleme
springmvc Spring3 MVC,ajax,乱码
dashuaifu
spring jquery mvc Ajax
springmvc Spring3 MVC @ResponseBody返回,jquery ajax调用中文乱码问题解决
Spring3.0 MVC @ResponseBody 的作用是把返回值直接写到HTTP response body里。具体实现AnnotationMethodHandlerAdapter类handleResponseBody方法,具体实
搭建WAMP环境
dcj3sjt126com
wamp
这里先解释一下WAMP是什么意思。W:windows,A:Apache,M:MYSQL,P:PHP。也就是说本文说明的是在windows系统下搭建以apache做服务器、MYSQL为数据库的PHP开发环境。
工欲善其事,必须先利其器。因为笔者的系统是WinXP,所以下文指的系统均为此系统。笔者所使用的Apache版本为apache_2.2.11-
yii2 使用raw http request
dcj3sjt126com
http
Parses a raw HTTP request using yii\helpers\Json::decode()
To enable parsing for JSON requests you can configure yii\web\Request::$parsers using this class:
'request' =&g
Quartz-1.8.6 理论部分
eksliang
quartz
转载请出自出处:http://eksliang.iteye.com/blog/2207691 一.概述
基于Quartz-1.8.6进行学习,因为Quartz2.0以后的API发生的非常大的变化,统一采用了build模式进行构建;
什么是quartz?
答:简单的说他是一个开源的java作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。并且还能和Sp
什么是POJO?
gupeng_ie
java POJO 框架 Hibernate
POJO--Plain Old Java Objects(简单的java对象)
POJO是一个简单的、正规Java对象,它不包含业务逻辑处理或持久化逻辑等,也不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
POJO对象有时也被称为Data对象,大量应用于表现现实中的对象。如果项目中使用了Hiber
jQuery网站顶部定时折叠广告
ini
JavaScript html jquery Web css
效果体验:http://hovertree.com/texiao/jquery/4.htmHTML文件代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>网页顶部定时收起广告jQuery特效 - HoverTree<
Spring boot内嵌的tomcat启动失败
kane_xie
spring boot
根据这篇guide创建了一个简单的spring boot应用,能运行且成功的访问。但移植到现有项目(基于hbase)中的时候,却报出以下错误:
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.Lif
leetcode: sort list
michelle_0916
Algorithm linked list sort
Sort a linked list in O(n log n) time using constant space complexity.
====analysis=======
mergeSort for singly-linked list
====code======= /**
* Definition for sin
nginx的安装与配置,中途遇到问题的解决
qifeifei
nginx
我使用的是ubuntu13.04系统,在安装nginx的时候遇到如下几个问题,然后找思路解决的,nginx 的下载与安装
wget http://nginx.org/download/nginx-1.0.11.tar.gz
tar zxvf nginx-1.0.11.tar.gz
./configure
make
make install
安装的时候出现
用枚举来处理java自定义异常
tcrct
java enum exception
在系统开发过程中,总少不免要自己处理一些异常信息,然后将异常信息变成友好的提示返回到客户端的这样一个过程,之前都是new一个自定义的异常,当然这个所谓的自定义异常也是继承RuntimeException的,但这样往往会造成异常信息说明不一致的情况,所以就想到了用枚举来解决的办法。
1,先创建一个接口,里面有两个方法,一个是getCode, 一个是getMessage
public
erlang supervisor分析
wudixiaotie
erlang
当我们给supervisor指定需要创建的子进程的时候,会指定M,F,A,如果是simple_one_for_one的策略的话,启动子进程的方式是supervisor:start_child(SupName, OtherArgs),这种方式可以根据调用者的需求传不同的参数给需要启动的子进程的方法。和最初的参数合并成一个数组,A ++ OtherArgs。那么这个时候就有个问题了,既然参数不一致,那