线程基础023.继承Thread和实现Runnable的区别从java的设计来看,通过继承Thread或者实现Runnable接口本身来创建线程本质上没有区别,从jdk帮助文档我们可以看到Thread类本身就实现了Runnable接口实现Runnable接口方式更加适合多个线程共享一个资源的情况,并且避免了单继承的限制,建议使用Runnable接口3.1多线程售票问题编程模拟三个售票窗口售票100张,分别使用继承Thread类和实现Runnable接口的方法,并分析有什么问题?1.使用继承Thread的方法:packageli.thread;//使用多线程,模拟三个窗口同时售票共100张pub
Java泛型025.自定义泛型5.1自定义泛型类基本语法:class类名{//…表示可以有多个泛型成员}注意细节:普通成员可以使用泛型(属性、方法)使用泛型的数组不能初始化静态方法中不能使用类的泛型泛型类的类型,是在创建类的对象时确定的(因为创建对象时,需要指定确定类型)如果在创建对象时没有指定类型,默认为Object例子://Tiger后面有泛型,所以我们把Tiger称为自定义泛型类classTiger{//T,R,M是泛型的标识符,一般是单个的大写字母;泛型的标识符可以有多个Stringname;Rr;//普通成员可以使用泛型(属性、方法),这里是属性使用泛型Mm;Tt;//使用泛型的数组
Java泛型025.自定义泛型5.1自定义泛型类基本语法:class类名{//…表示可以有多个泛型成员}注意细节:普通成员可以使用泛型(属性、方法)使用泛型的数组不能初始化静态方法中不能使用类的泛型泛型类的类型,是在创建类的对象时确定的(因为创建对象时,需要指定确定类型)如果在创建对象时没有指定类型,默认为Object例子://Tiger后面有泛型,所以我们把Tiger称为自定义泛型类classTiger{//T,R,M是泛型的标识符,一般是单个的大写字母;泛型的标识符可以有多个Stringname;Rr;//普通成员可以使用泛型(属性、方法),这里是属性使用泛型Mm;Tt;//使用泛型的数组
AOP-024.问题提出在上一篇的MyProxyProvider类中,我们的输出语句功能比较弱,在实际开发中,我们希望是以一个方法的形式,嵌入到真正执行的目标方法前,怎么办?1.使用土方法解决需求分析:使用土方法解决前面的问题,后面使用spring的aop组件完成改进MyProxyProvider:主要是对前置/返回/异常/最终通知的代码进行封装,封装到不同的方法中进行调用。packagecom.li.aop.proxy3;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.la
AOP-024.问题提出在上一篇的MyProxyProvider类中,我们的输出语句功能比较弱,在实际开发中,我们希望是以一个方法的形式,嵌入到真正执行的目标方法前,怎么办?1.使用土方法解决需求分析:使用土方法解决前面的问题,后面使用spring的aop组件完成改进MyProxyProvider:主要是对前置/返回/异常/最终通知的代码进行封装,封装到不同的方法中进行调用。packagecom.li.aop.proxy3;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.la
实现Spring底层机制-023.实现任务阶段13.1知识拓展-类加载器Java的类加载器有三种:Bootstrap类加载器-----对应路径jre/libExt类加载器-----对应路径jre/lib/extApp类加载器-----对应路径classpathclasspath类路径,就是java.exe执行时,指定的路径。3.2分析阶段1目标:编写自己的spring容器,实现扫描包,得到bean的class对象3.3代码实现1.创建新的maven项目,注意把项目的languagelevel改为支持java8在pom.xml文件中指定编译版本:882.创建的架构如下:3.自定义Componen
实现Spring底层机制-023.实现任务阶段13.1知识拓展-类加载器Java的类加载器有三种:Bootstrap类加载器-----对应路径jre/libExt类加载器-----对应路径jre/lib/extApp类加载器-----对应路径classpathclasspath类路径,就是java.exe执行时,指定的路径。3.2分析阶段1目标:编写自己的spring容器,实现扫描包,得到bean的class对象3.3代码实现1.创建新的maven项目,注意把项目的languagelevel改为支持java8在pom.xml文件中指定编译版本:882.创建的架构如下:3.自定义Componen
接下来几个章节,将逐个介绍身份验证流程中主要接口接口描述UserDetails代表SpringSecurity所看到的用户GrantedAuthority定义应用程序目的范围内允许用户执行的操作(读、写、删除等)UserDetailsService表示用于按用户名检索用户详细信息的对象UserDetailsManager一个较为特殊的UserDetailsService接口。除了按用户名检索用户外,它还可以用于更改用户集合或特定用户PasswordEncoder指定如何对密码进行加密或哈希化,以及检查给定的已编码字符串是由与明文密码匹配本文将一起学习相对独立的PasswordEncoder。一
接下来几个章节,将逐个介绍身份验证流程中主要接口接口描述UserDetails代表SpringSecurity所看到的用户GrantedAuthority定义应用程序目的范围内允许用户执行的操作(读、写、删除等)UserDetailsService表示用于按用户名检索用户详细信息的对象UserDetailsManager一个较为特殊的UserDetailsService接口。除了按用户名检索用户外,它还可以用于更改用户集合或特定用户PasswordEncoder指定如何对密码进行加密或哈希化,以及检查给定的已编码字符串是由与明文密码匹配本文将一起学习相对独立的PasswordEncoder。一
1.DSL查询文档elasticsearch的查询依然是基于JSON风格的DSL来实现的。1.1.DSL查询分类Elasticsearch提供了基于JSON的DSL(DomainSpecificLanguage)来定义查询。常见的查询类型包括:查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(fulltext)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:match_querymulti_match_query精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:idsrangeterm地理(geo)查