![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 92
试水流连
这个作者很懒,什么都没留下…
展开
-
理解Java泛型通配符上下边界
<? extends T>和<? super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”<? super T>:是指 “下界通配符(Lower Bounds Wildcards)” // 定义一个Number类型的泛型容器 List<Number> rawNumberContaine原创 2020-12-03 14:19:55 · 999 阅读 · 1 评论 -
(五)关于BeanPostProcessor各个回调的时机
1、BeanPostProcessor的五大接口一共有11个回调方法1.1.BeanPostProcessor关于对象初始化前后的回调。public interface BeanPostProcessor { //该方法在bean实例化完毕(且已经注入完毕),在afterPropertiesSet或自定义init方法执行之前 @Nullable ...原创 2018-05-11 17:34:39 · 4978 阅读 · 1 评论 -
(六)关于spring中的FactoryBean与ObjectFactory以及其区别
1.查看接口定义以及其区别public interface FactoryBean&lt;T&gt; { //获取对象的工厂方法 @Nullable T getObject() throws Exception; //对象类型 @Nullable Class&lt;?&gt; getObjectType(); //是否是单例,这个属性...原创 2018-05-11 17:35:13 · 14319 阅读 · 4 评论 -
(七)spring aop的源码学习
1.spring AOP相关的核心API接口定义关于AOP概念Aspect:方面 一个模块化的关于点Join point:连接点 程序中的一个执行点(比如执行方法、执行构造器)Advice: 通知 在特定的连接上的特定时机的特定行为Pointcut:切入点 用来匹配符合要求的连接点(用于配合通知使用,来控制在哪些连接点执行通知的行为)Int...原创 2018-05-11 17:36:16 · 344 阅读 · 1 评论 -
SpringBoot使用devtools导致的类型转换异常
问题:最近在使用新框架SpringBoot + shiro + spring-data-jpa时,为了体验下spring自带的热部署工具的便捷,于是引入了<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!-原创 2017-09-22 16:42:42 · 30350 阅读 · 7 评论 -
(八)关于spring aop的实现细节(如何实现的各种Advice)
(七)重点看了spring aop的各个主要接口的定义,以及简单分析了各个主要方法的作用,这节主要了解spring是怎么利用jdk\cglib 来实现的前置通知、环绕通知等等通过(七)中查看AbstractAutoProxyCreator类时,可以知道spring创建代理对象是通过ProxyFactory来创建的。那么这里就从ProxyFactory开始1、查看分析spring创建...原创 2018-05-21 10:17:41 · 2684 阅读 · 0 评论 -
Java Bean Validation自定义注解
版本来自springboot 版本 1.5.14.RELEASE其中validation部分的版本号为:<!-- 接口 --><dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId>......原创 2018-07-24 09:22:47 · 2661 阅读 · 0 评论 -
java求集合幂集算法
1、幂集所谓幂集(Power Set), 就是原集合中所有的子集(包括全集和空集)构成的集族。可数集是最小的无限集; 它的幂集和实数集一一对应(也称同势),是不可数集。不是所有不可数集都和实数集等势,集合的势可以无限的大。如实数集的幂集也是不可数集,但它的势比实数集大。 设X是一个有限集,|X| = k,则X的幂集的势为2的k次方。(摘自百度百科)|X| 表示集合X中元素的个数。...原创 2018-07-06 15:23:09 · 4369 阅读 · 0 评论 -
java笛卡尔积算法实现
1、笛卡尔积定义(摘自百度百科)笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 [1] 。假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (...原创 2018-07-06 18:16:20 · 10505 阅读 · 0 评论 -
在spring cloud中引入jaeger报'io.jaegertracing.spi.Reporter' 不存在问题
问题描述:在spring cloud项目中使用jaeger追踪系统opentracing-spring-jaeger-cloud-starter时出现错误2018-09-14 17:53:36.404 - DEBUG [main] sync [org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter_report...原创 2018-09-14 22:00:33 · 2417 阅读 · 0 评论 -
java8正则之根据命名捕获组正则提取文本内容
JDK版本1.8命名捕获组的形式(?&amp;lt;name&amp;gt;X) X, as a named-capturing group命名捕获组应用@Testpublic void namedGroup() { Pattern pattern = Pattern.compile(&quot;(?&amp;lt;text&amp;gt;.*)&quot;); Matcher matche原创 2018-10-15 10:05:14 · 2458 阅读 · 2 评论 -
(四)BeanFactory初始化Singleton的实现细节
1.介绍查看ApplicationContext的启动以及初始化部分的代码时,发现最终实现对象创建以及所有非懒加载的单例对象整体初始化,都是通过DefaultListableBeanFacotry来实现的其中对象创建是通过beanFactory.getBean(xxx)来实现,而整体初始化是通过beanFactory.preInstantiateSingletons();来实现,下面针对这...原创 2018-05-11 17:33:58 · 4644 阅读 · 0 评论 -
(三)spring中BeanFacotryPostProcessor注册以及执行的先后顺序以及BeanPostProcessor的注册先后顺序
1. spring中的两大回调接口org.springframework.beans.factory.config.BeanFactoryPostProcessor关于对象工厂BeanFactory创建完毕的回调处理org.springframework.beans.factory.config.BeanPostProcessor关于通过对象工厂BeanFactory创建对象前后...原创 2018-05-11 17:32:47 · 4820 阅读 · 2 评论 -
spring拓展之定义自己的namespace
1.查看源码认识spring是怎么加载xml配置的1.1 spring是怎么创建对象的?查看spring beanFactory的继承关系 通过查看源码可以得知,BeanFactory 中的对象创建是实际是根据RootBeanDefinition创建的, 在AbstractAutowireCapableBeanFactory有具体的实现,包括创建实例,利用Spring拓展的 java的内省Be原创 2017-10-24 14:24:46 · 5435 阅读 · 0 评论 -
shiro权限标示符
1.shiro权限管理在实现shiro权限时,一般是继承AuthorizingRealm时,认证方法:doGetAuthenticationInfo(AuthenticationToken token)与授权方法:doGetAuthorizationInfo(PrincipalCollection principals)其中在授权方法中可以在AuthorizationInfo中添加权限标识符原创 2017-11-30 09:44:38 · 2122 阅读 · 0 评论 -
Spring获取日期时间差8小时问题解决
问题默认情况下在使用spring的@ResponseBody返回json串时,如果有日期类型的数据,会发现在日期会莫名其妙的差8小时比如:2017-12-20 10:16:23.0结果是:2017-12-20 02:16:23分析经过查阅相关资料发现在spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟国内应该是相差8小时,所以再时间换算上自原创 2017-12-20 17:01:33 · 13452 阅读 · 1 评论 -
ITextRenderer多线程使用时java.lang.NullPointerException问题
问题:由于使用的版本比较古老:R5pre1,所以在使用过程中遇到了并发使用的问题,就是在多线程创建ITextRenderer时会出现.java.lang.NullPointerException: nullat org.xhtmlrenderer.util.XRLog.log(XRLog.java:206)at org.xhtmlrenderer.util.XRLog.render(XRLo原创 2018-01-02 16:24:41 · 2008 阅读 · 1 评论 -
Maven jar项目引入本地jar包后奇怪的ClassNotFoundExtention
问题描述:在有几个老项目迁移过来的功能中,有几个比较古董级的jar包比较老,没有maven坐标,然后查阅一些资料,选择引入了本地jar包的配置方式如下:dependencies> dependency> groupId>org.xxxgroupId> artifactId>xxx-jarartifactId> version>1.0versio原创 2018-01-04 15:43:01 · 6577 阅读 · 0 评论 -
IDEA中使用eclipse快捷键
1.修改使用Eclipse风格的快捷键目的是习惯了使用eclipse的快捷键,在使用IDEA时不想重头记一套新的快捷键。按照下面的顺序操作File --> settings --> keymap --> 在下来框中选中Eclipse 选择Apply保存设置 这样改完就是elipse风格的快捷方式了2.单独设置一部分比较主要的与eclipse中不一致的操作2原创 2018-02-03 01:17:59 · 120658 阅读 · 13 评论 -
Java资源管理之ResourceBundle
/** * ResourceBundle 可以轻松实现国际化 * 命名规则按照:资源名_语言_国别.properties * <p> * baseName + "_" + language + "_" + script + "_" + country + "_" + variant * For example, * if baseName is "baseName" a原创 2018-03-08 22:41:50 · 463 阅读 · 0 评论 -
Java封装统一的Result Model
在开发过程中,有时候会需要使用错误码+错误信息的形式,来返回某些业务操作的错误结果信息,来代替效率较低的异常传递。这样就需要封装一个统一的Result model作为返回值,代替直接返回数据等结果。1.定义错误码 - 错误信息接口错误码可能是String、Integer、Long 等类型,也可能是enum类型。因此这里使用泛型来代替,错误码类型,可以提高灵活性。也可以通过枚举直接...原创 2018-03-26 12:09:05 · 12349 阅读 · 0 评论 -
(一)SpringBoot源码学习笔记
1、SpringBoot容器启动版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>...原创 2018-05-11 17:30:28 · 827 阅读 · 0 评论 -
(二)ApplicationContext的启动以及初始化过程
在查看SpringBoot的源码时,可以看到构造完ConfigurableApplicationContext实例后,是通过调用ConfigurableApplicationContext中的refresh方法来触发容器的一切处理流程的。1.关于AbstractApplicationContext的refresh()方法该方法是触发容器加载BeanDefinition以及创建对象等...原创 2018-05-11 17:32:19 · 5221 阅读 · 0 评论 -
java中包装数据类型与基本数据类型比较相等的问题
最近检查之前写过的代码,突然发下了一个问题,现场还原如下: @Test public void testEquals2(){ System.out.println(new Long(1000).equals(1000)); }根据平时对基础的理解,乍一看,没什么问题,但是经过运行得出的结果为:false 于是: @Test public voi原创 2017-09-27 16:21:41 · 1189 阅读 · 0 评论