Spring-IOC容器【一】之基本组件结构
所有源码源于spring:5.1.8.RELEASE版本
1、Resource用于从底层资源的实际类型(如文件或类路径资源)抽象的资源描述符,每一个接口实现类都代表了一种资源类型,如ClasspathResource、URLResource,FileSystemResource等。每一个资源类型都封装了对某一种特定资源的访问策略。它是spring资源访问策略的一个基础实现,应用在很多场景。
2、BeanDefinitionbean定义描述了一个bean实例,它具有属性值、构造函数参数值和由具体实现提供的进一步信息,用来抽象和描述一个具体bean对象,是描述一个bean对象的基本数据结构。
3、BeanDefinitionReaderBeanDefinitionReader将外部资源对象描述的bean定义统一转化为统一的内部数据结构BeanDefinition。对应不同的描述需要有不同的Reader。如XmlBeanDefinitionReader用来读取xml描述配置的bean对象。
4、BeanFactory用来定义一个很纯粹的bean容器。它是一个bean容器的必备结构。同时和外 ...
Hexo+Next之使用CODING企业版做博客持续集成CI
如果有了持续集成操作,就可以在任何一台联网并且装有git的电脑上写文章了,不必每次手动部署。
尝试了好久才发现CODING企业版做博客持续集成是真的很方便,前提是简单的了解jenkins配置。流程:
首先注册CODING企业版,创建一个项目如:blog-source,最好是私有的,因为涉及到密码子类的东西。
之后在项目左侧面板找到持续集成菜单点击Job列表,新建,并配置Jinkens。
上传博客源码到此项目中。
上传代码后会自动触发Job。
等待一会,查看博客。
在这着重说一下Jinkens配置:
创建触发规则
配置持续集成过程
可以在文本编辑器里修改,也可以在项目根目录里修改Jenkinsfile
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768pipeline { agent any stages { stage('检出 ...
Hexo+Next之腾讯云开发者平台-CODING个人版部署+绑定自定义域名
博客部署到CODING个人版
注册腾讯开发者平台-CODING个人版,
新建项目,并开启静态 Pages 应用。项目名称:youname.coding.me
之后配置Hexo本地博客的站点配置文件_config.yml,找到deploy,并相应修改:
123456# Deployment## Docs: https://hexo.io/docs/deployment.htmldeploy: type: git repo: https://{username}:{password}@git.dev.tencent.com/clawhub/clawhub.coding.me.git branch: master
在本地运行命令行,项目发布。
1$ hexo clean && hexo d -g
最后访问youname.coding.me查看个人博客。
绑定自定义域名1 .打开腾讯云开发者平台的《Pages 服务页面》2. 点击右侧设置3. 根据自己注册的域名,绑定,并申请SSL/TLS安全证书。
Hexo+Next之增加valine评论功能
next主题是支持valine评论功能的,在主题配置文件_config.yml中搜索valine。配置:
12345678910111213141516# Valine# You can get your appid and appkey from https://leancloud.cn# More info available at https://valine.js.orgvaline: enable: true # When enable is set to be true, leancloud_visitors is recommended to be closed for the re-initialization problem within different leancloud adk version. appid: XXXX # your leancloud application appid appkey: XXXX # your leancloud application appkey notify: false # mail notifier, ...
Hexo+Next之增加阅读热度或者排行榜页面
基于leancloud实现,需要注册,并且上传手持身份证之类的个人信息,等待审核通过即可使用。
新增top页面1$ hexo new page top
编辑生成的index.md文件1234567891011121314151617181920212223242526272829303132---title: 文章热度排行comments: falsekeywords: top,文章阅读量排行榜description: 博客文章阅读量排行榜---<div id="top"></div><script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.4.js"></script><script>AV.initialize("App-ID", "App-Key");</script><script type="text/javascript"> ...
Hexo+Next之主题美化
这块就参考网友的了。打造个性超赞博客 Hexo + NexT + GitHub Pages 的超深度优化Hexo+NexT(v7.0+) 搭建博客:主题美化网上很多,这里就不累述了,如果遇到问题可以问我。
Hexo+Next之个人博客搭建
参考:hexo中文文档next中文文档theme-next/hexo-theme-next
使用hexo博客的前提是:
Node.jsnode.js 官网:https://nodejs.org/en/
GitGit官网: https://git-scm.com/download/
Hexo1$ npm install -g hexo-cli
初始化找个文件夹下执行。
1$ hexo init myblog
进入这个文件夹1$ cd myblog
安装依赖1$ npm install
###本地运行
1$ hexo s --debug
###打开浏览器
1http://localhost:4000
打开文件管理器,查看项目目录,会发现有两个_config.yml在myblog下的_config.yml为站点配置文件;themes中的主题下的_config.yml为主题配置文件;
个性化配置的时候会经常修改这两个文件。
接下来,获取Next主题。我是直接通过github获取的最新的RELEASE版本:hexo-theme-next解压缩后放入themes文件夹中,之后修改站 ...
CAS实现多线程Token池
引言对接微信公众平台获取access_token接口时,access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。所以需要有个token池服务,假设单机运行。CAS操作主要借鉴JDK的JUC源码,使用了Unsafe类,源码:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273@Componentpublic class TokenPool { /** * The constant LOGGER. */ private static final Logger LOGGER = LoggerFactory.getLogger("TokenPool"); /** * The Token. */ private String toke ...
Disruptor简单使用
引言在定位项目中内存泄漏问题时,发现RingBuffer占用内存过大,这个是在使用log4j2时引入的jar,以前只知道必须使用这个Disruptor才可以用异步日志,但是并不清楚Disruptor的一些实现,也没有通过编码的方式使用过,这次正好研究一下。
Disruptor是一个低延迟(low-latency),高吞吐量(high-throughput)的事件发布订阅框架,用于一个JVM中多个线程之间的消息队列,作用与ArrayBlockingQueue有相似之处,但是disruptor从功能、性能都远好于ArrayBlockingQueue。
相关概念RingBuffer应用需要传递的消息在Disruptor中称为Event(事件)。RingBuffer是Event的数组,实现了阻塞队列的语义:如果RingBuffer满了,则生产者会阻塞等待。如果RingBuffer空了,则消费者会阻塞等待。
Sequence在上文中,我提到“每个消费者需要自己维护一个指针”。这里的指针就是一个单调递增长整数(及其基于CAS的加法、获取操作),称为Sequence。除了每个消费者需要维护一个指针外 ...
高并发系统限流操作之Semaphore实现可变并发数控制
引言Semaphore内部主要通过AQS(AbstractQueuedSynchronizer)实现线程的管理。信号量通过使用计数器来控制对共享资源的访问。如果计数器大于零,则允许访问。如果为零,则拒绝访问。计数器的计数是允许访问共享资源的许可。常用于限制可以访问某些资源的线程数目。
本例子通过增加与减少许可证数来动态控制线程数目,即控制线程并发。
核心源码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107import java.util.concurrent.Semaphore;/** * 可变许可证<br> */public class AdjustableSemaphore { ...