context

spring源码学习之:xml配置文件标签自定义

旧城冷巷雨未停 提交于 2020-03-23 03:15:15
Spring框架从2.0版本开始,提供了基于Schema风格的XML扩展机制,允许开发者扩展最基本的spring配置文件(一 般是classpath下的spring.xml)。试想一下,如果我们直接在spring.xml中加入一个自定义标签<mytag id="aty"></matag>,会发生什么呢?spring框架启动的时候会报错,因为spring根本不认识我们自定义的& lt;mytag>,这样对spring.xml的校验就会失败,最终结果就是框架不能启动。有什么方法,能够让spring认识并加载解析我们自 定义的<mytag>呢?这就是spring提供的xml扩展机制。我们可以在spring.xml中加入自己的标签,之后spring会帮 我们解析并纳入自己的管理范围内,这也就是说我们扩展了spring的功能。 现在我们来看下怎么实现这个功能,可以参考spring帮助文档中的extensible-xml.html。我们知道如果在需要在spring.xml中配置数据源,需要进行如下的配置: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property

[译]迁移到新的 React Context Api

强颜欢笑 提交于 2020-03-22 22:25:50
随着 React 16.3.0 的发布,context api 也有了很大的更新。我已经从旧版的 api 更新到了新版。这里就分享一下我(作者)的心得体会。 回顾 下面是一个展示如何使用旧版 api 的例子: function Usage(props) { return ( <Toggle onToggle={props.onToggle}> <Toggle.On>The button is on</Toggle.On> <Toggle.Off>The button is off</Toggle.Off> <div> <Toggle.Button /> </div> </Toggle> ) } 上面的代码会返回一个复合组件 Toggle 。这个组件可以让子组件共享隐式的状态。在某些简单的情况下可以用 React.Children.map 来处理。但是,这个例子需要使用 context api 来达到在 React 的某个组件树的任意节点分享 state 的目的。 旧的 Context Api 这是一个旧版 context api 的应用例子: const TOGGLE_CONTEXT = "__toggle__"; // Toggle on function ToggleOn({ children }, context) { const { on } = context

SpringBoot中配置ApplicationListener 监听器的6种方式

寵の児 提交于 2020-03-22 21:08:14
3 月,跳不动了?>>> 1 在application.yml或者在application.properties配置文件中通过context.listener.classes配置 2.在resources目录下新建META-INF文件夹并新建spring.factories文件通过org.springframework.context.ApplicationListener配置 3. 在启动main函数中通过SpringApplication配置SpringApplication springApplication = new SpringApplication(null); springApplication.addListeners(你的监听器); 4. 使用@Configuration 注解配置,同时可以配合@Order(-100)设置优先级 5. 使用@EventListener 注解配置在bean中定义任意方法并使用该注解, 注解属性class中可以指定具体监控的事件类,通过方法参数指定事件类型,如果不指定则表示监控所有的事件 6. 通过实现接口org.springframework.context.ApplicationContextInitializer,得到context后通过编程式,设置监听器 参考链接: https://blog.csdn.net

dubbo 搭建开发环境

拥有回忆 提交于 2020-03-22 15:08:08
本文是基于 maven的,预先使用,先装 maven。 d ubbo是一个分布式服务框架,提供一个 SOA的解决方案。简单的说, dubbo就像在生产者和消费者中间架起了一座桥梁,使之能透明交互。 本文旨在搭建一个可供使用和 测试 的 dubbo环境,使用了 spring 框架;使用了 zookeeper和 dubbo服务。 准备: zookeeper:直接去官方网站下载即可,下载后解压,不需要改任何配置即可使用。 dubbo:直接去阿里巴巴下载即可,下载后解压并放到 tomcat的 webapps目录下,修改 WEB-INF/dubbo.properties中属性如下: #zookeeper的地址和端口 dubbo.registry.address=zookeeper://127.0.0.1:2181 #登录 dubbo管理页面时的 root用户和 guest用户的密码 dubbo.admin.root.password=root dubbo.admin.guest.password=guest 代码: 如果你清楚生产者 -消费者模型,那么将会很容易理解 dubbo的使用步骤。 一个生产者 -消费者模型的代码实现需要 3部分:生产者代码,消费者代码,中间接口。 中间接口 :创建一个 mavan项目,然后添加一个接口如下: publicinterface ITest {

Android判断Service是否运行

安稳与你 提交于 2020-03-22 14:05:59
/** * 用来判断服务是否运行. * @param context * @param className 判断的服务名字 * @return true 在运行 false 不在运行 */ public static boolean isServiceRunning(Context mContext,String className) { boolean isRunning = false; ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(30); if (!(serviceList.size()>0)) { return false; } for (int i=0; i<serviceList.size(); i++) { if (serviceList.get(i).service.getClassName().equals(className) == true) { isRunning = true; break; } } return

Tomcat源码分析

爷,独闯天下 提交于 2020-03-22 08:27:02
前言:   本文是我阅读了TOMCAT源码后的一些心得。 主要是讲解TOMCAT的系统框架, 以及启动流程。若有错漏之处,敬请批评指教! 建议:   毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, 是不那么容易掌握TOMCAT的框架的。 所以得实践、实践、再实践。 建议下载一份TOMCAT的源码, 调试通过, 然后单步跟踪其启动过程。 如果有不明白的地方, 再来查阅本文, 看是否能得到帮助。 我相信这样效果以及学习速度都会好很多! 1. Tomcat的整体框架结构   Tomcat的基本框架, 分为4个层次。   Server和Service   Connector     HTTP     AJP   Container     Engine     Host     Context   Component     manager     logger     loader     pipeline     valve     ...    站在框架的顶层的是Server和Service   Server: 其实就是BackGroud程序, 在Tomcat里面的Server的用处是启动和监听服务端事件(诸如重启、关闭等命令。 在tomcat的标准配置文件:server.xml里面, 我们可以看到“<Server port="8005" shutdown=

JavaScript设计模式与开发实践---读书笔记(2) this、call和apply

安稳与你 提交于 2020-03-21 23:33:30
this、call和apply this的指向: this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境。 1.作为对象的方法被调用 当函数作为对象的方法被调用时,this指向该对象 2.作为普通函数调用 此时的this总是指向全局对象。在浏览器的JavaScript里,这个全局对象是window对象。 有时候,我们希望div节点事件函数内部的this指向该div节点,可以用一个变量保存div节点的引用: var that = this; 在ES5的严格模式下,这种情况下的this已被规定为不会指向全局对象,而是undefined 3.构造器调用 构造器的外表跟普通函数一模一样,它们的区别在于被调用的方式。当用new运算符调用运算符时,该函数总会返回一个对象,通常情况下,构造器里的this就指向返回的这个对象。 注意:使用new调用构造器时,还要注意一个问题,如果构造器显式地返回了一个object类型的对象,那么此次运算结果最终会返回这个对象,而不是我们之前期待的this。 4.Function.prototype.call或Function.prototype.apply调用 用Function.prototype.call或Function.prototype.apply可以动态的改变传入函数的this。 丢失的this

android 轮播图

点点圈 提交于 2020-03-21 16:15:48
轮播图是很常用的一个效果 核心功能已经实现 没有什么特殊需求 自己没事研究的 所以封装的不太好 一些地方还比较糙 为想要研究轮播图的同学提供个参考 目前测试图片为mipmap中的图片 没有写从网络加载图片 可自行根据需求在getShowView()方法中修改 1.定时切换 通过handle延时发送通知改变界面 然后在切换viewpage的界面之后 再次发送此延时通知 就ok咯 还可以通过timer定时器实现 2.无限轮播效果 如果我们只是在自动轮播到最后一页 然后进行判断让切换到第一页 这样是可以实现轮播的效果 但是 有两个问题 切换从最后一页切换到第一页的时候有一个很明显的回滚效果 不是我们想要的 当我们手动滑动的时候 在第一页和最后一页的时候 无法继续左右滑动 因为已经没有下一页了 先看张图(偷来的) 不得不说这位兄弟的图p的很形象 简直完美 虽然看到的是三张图 实际上是五张 数据多的时候也按照这种方式添加数据 当view4的时候自动切换到view5时 进行判断让到切换到view2 这样造成的感觉就是最后一张下来是第一张 我们利用viewpage自带的方法切换界面立即切换没有滚动效果 当图片一样的时候是看不出图片变化的 setCurrentItem(int item, boolean smoothScroll) 第二个参数设置false 界面切换的时候无滚动效果 默认true

(9 Android) 活动组件Activity

梦想与她 提交于 2020-03-21 10:11:36
(9 Android) 活动组件Activity 3.2.1 AppCompatActivity、Activity和Context AppCompatActivity 随着Android开发技术的发展,在不同的阶段(开发环境)创建Activity组件所使用的基类不同。在使用eclipse进行Android开发时,自动创建的MainActivity继承Activity,而Android Studio继承AppCompatActivity。 Activity作为Android最重要的组件之一,用于设计应用程序的用户界面,其内容来源于布局文件。在一个Activity的onCreate()方法里,使用父类的方法setContentView()呈现内容视图,并以布局文件作为参数。Activity包含了响应界面事件的代码,即具有控制器的功能。 Activity作为上下文类的子类 在Java SE中,创建一个类,写个main()方法就能运行。一个类调用另一个类,需要先使用new运算符创建另一个类的实例对象。Android应用使用基于组件的设计模式,组件的运行要有一个完整的Android项目环境,在这个环境下,Activity和Service等系统组件才能够正常工作,而这些组件并不能采用普通的Java对象创建方式(使用new运行创建实例),而是要有它们各自的上下文环境

Core + Vue 后台管理基础框架6——业务日志

▼魔方 西西 提交于 2020-03-21 09:20:13
1、前言   上一篇,我们讲了审计日志,重点是重点业务表的审计字段。还有一种系统审计,就是重点业务对象的改动记录,是以审计日志表中的记录形式存在的。这种审计记录一般需要精确定位到某个终结点,最合适的实现方式就是操作过滤器。 2、实现   自定义操作过滤器: public class LogAttribute : ActionFilterAttribute { public string LogName { get; private set; } public LogAttribute(string logName) { this.LogName = logName; } public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { await base.OnActionExecutionAsync(context, next); var user = context.HttpContext.RequestServices.GetService<CurrentUser>(); var log = new SysOperationLogDto { ClassName = context.Controller