- 博客(42)
- 资源 (5)
- 收藏
- 关注
原创 微服务核心问题
微服务架构核心问题?分布式架构会遇到的四个核心问题?(1)这么多服务,客户端该如何去访问?(2)这么多服务,服务之间如何进行通信?(3)这么多服务,如何治理呢?(4)服务挂了,怎么办?解决方案:Spring Cloud,是一套生态, 就是来解决以上分布式架构的4个问题,想使用Spring Cloud,必须要掌握SpringBoot,因为SpringCloud是基于SpringBoot;1. Spring Cloud NetFlix,出来了一套解决方案! 一站式解决方案。我们都.
2020-10-22 20:04:54
241
原创 Dubbo简单入门
步骤:前提:先开启zookeeper服务1.提供者提供服务(1)导入依赖(2)配置注册中心的地址,以及服务发现名,和要扫描的包(3)在想要被注册的服务上面——增加一个注解@DubboService2.消费者如何消费(1)导入依赖(2)配置注册中心的地址,配置自己的服务名(3)从远程注入服务@DubboReference1.提供者配置application.properties配置:server.port=8001#服务应用名字dubbo.application.n.
2020-10-22 19:20:15
264
1
原创 Dubbo理论、zookeeper安装、Dubbo-admin可视化监控安装
一、分布式理论什么是分布式系统?在《分布式系统原理与范型》一书中有如下定义: "分布式系统是若干独立计算机的集合, 这些计算机对于用户来说就像单个相关系统”;分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。分布式系统(distributed system)是建立在网络之上的软件系统。首先需要明确的是,只有当单个节点的处理能力无法满足
2020-10-21 18:06:13
356
原创 SpringBoot异步任务、邮件、定时任务
一、SpringBoot开启异步任务1.在Application启动类上方加入注解:@EnableAsync@EnableAsync@SpringBootApplicationpublic class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); }}2.在方法上加入注解:@Asy
2020-10-21 13:23:40
266
2
原创 SpringBoot整合Swagger
Swagger:RestFul Api文档在线自动生成工具,Api文档与API定义同步更新Swagger访问地址:http://localhost:8080/swagger-ui.html使用Swagger1.导入依赖<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> &l.
2020-10-20 22:22:57
218
原创 SpringBoot整合Shiro
一、Shiro简介1.什么是Shiro?(1)Apache Shiro是一个Java的安全(权限)框架。(2)Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。(3)Shiro可以完成,认证,授权,加密,会话管理,Web集成,缓存等。2.有哪些功能(1)Authentication:身份认证、登录,验证用户是不是拥有相应的身份;(2)Authorization: 授权,即权限验证,验证某个已认证的用户是否拥有某个权限,即判断用.
2020-10-20 11:55:14
108
原创 SpringBoot整合Spring Security
一、简介Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理!记住几个类:1.WebSecurityConfigurerAdapter: 自定义Security策略2.AuthenticationManagerBuilder: 自定义认证策略3.@EnableWebSecu
2020-10-19 22:44:56
335
原创 SpringBoot校验拦截
1.编写自定义Interceptor类,类似于SpringMVC只需要实现HandlerInterceptor,SpringMVC需要在XML配置文件中进行配置,但SpringBoot简化了配置。2.SpringBoot只需要编写一个自定义config并且实现WebMvcConfigurer,重写addInterceptors()方法即可。@Configurationpublic class MyConfig implements WebMvcConfigurer { @Override
2020-10-18 22:20:50
294
原创 SpringBoot利用yml进行属性注入(JSR303校验)、多环境切换以及配置文件优先级
一、yaml基础语法说明:语法要求严格!1、空格不能省略2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。3、属性和值的大小写都是十分敏感的。字面量:普通的值 [ 数字,布尔值,字符串 ]字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;k: v注意: “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思; 比如 :name: "mi \n mi" 输出 :mi 换行 mi ...
2020-10-17 17:59:58
712
原创 SpringBoot自动装配原理
结论: SpringBoot所有 自动配置都是在启动的时候扫描并加载: spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功!1. SpringBoot在启动的时候,从类路径下/META-INF/ spring.factories获取指定的值;2.将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置!3.以前我们需要自动配置的东西,现在Spri...
2020-10-16 22:20:33
484
原创 SpringBoot:快速入门
一、什么是Spring?Spring是一个开源框架,2003 年兴起的一个轻量级的Java开发框架,作者: Rod Johnson。Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。二、Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采用了以下4种关键策略:1、基于POJO的轻量级和最小侵入性编程;2、通过IOC, 依赖注入(DI) 和面向接口实现松耦合;3、基于切面(AOP)和惯例进行声明式编程;4、通过切面和模版减少样式代码;三、什.
2020-10-16 17:09:21
147
原创 工厂模式
工厂模式作用:1.实现了创建者和调用者的分离2.核心本质:(1)实例化对象不使用new,用工厂方法代替(2)将选择实现类, 创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。3.详细分类:(1)简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要扩展已有代码)(2)工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)(3)抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。实现OOP七大原则:1.开闭原则: 一个软
2020-10-14 22:31:44
122
原创 设计模式
什么是设计模式1.设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是-套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。2.1995年,GoF (Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。学习设计模式的意义1.设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、
2020-10-14 21:54:23
89
原创 单例模式(饿汉式、懒汉式、静态内部类、枚举类)
一、饿汉式单例:public class HungrySingleton { private HungrySingleton(){ } private static HungrySingleton hungrySingleton = new HungrySingleton(); public static HungrySingleton getInstance(){ return hungrySingleton; }}缺点:一开始就加载
2020-10-14 17:42:12
325
1
原创 SpringMVC文件上传和下载
准备工作 文件上传是项目开发中最常见的功能之一, SpringMVC可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作。如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver。 前端表单要求:为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/fprm-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服..
2020-10-14 11:35:22
116
原创 用拦截器做登陆验证
1.前端页面:main.jsp:<body><h1>首页</h1>${msg}<p> <a href="${pageContext.request.contextPath}/user/exit">注销</a></p></body>index.jsp: <body><a href="${pageContext.request.contextPath}/us
2020-10-13 22:29:55
376
原创 SpringMVC拦截器
概述Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。过滤器与拦截器的区别:拦截器是AOP思想的具体应用。过滤器1.servlet规范中的一 部分,任何java web工程都可以使用.2.在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截拦截器1.拦截器是SpringMVC框架自己的,只有使用了Spring MVC框架的工程才能使用2.拦截器只会拦截访问的控制器方
2020-10-13 17:49:02
99
原创 jQuery下使用Ajax
1.Ajax的核心是XMLHttp Request对象(XHR)。XHR为向服务器发送请求和解析服务器响应提供了接口。能够以异步方式从服务器获取新数据。2.jQuery提供多个与AJAX有关的方法。3.通过jQuery AJAX方法,您能够使用HTTP Get和HTTP Post从远程服务器上请求文本、HTML、XML或JSON-同时您能够把这些外部数据直接载入网页的被选元素中。4.jQuery不是生产者,而是大自然搬运工。5.jQuery Ajax本质就是XMLHttpRequest, 对他进行了
2020-10-13 16:27:16
104
原创 JSON和fastjson
一、什么是JSON?1.JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。2.采用完全独立于编程语言的文本格式来存储和表示数据。3.简洁和清晰的层次结构使得JSON成为理想的数据交换语言。4.易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。在JavaScript语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格
2020-10-12 17:28:14
263
原创 SpringMVC解决Post请求乱码问题
在web.xml中配置:<!--配置SpringMVC的乱码过滤--><filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-nam
2020-10-12 17:20:00
255
原创 RestFul风格
RestFul风格1.概念Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。2.功能(1)资源:互联网所有的事物都可以被抽象为资源(2)资源操作:使用POST、DELETE、 PUT、GET,使用不同方法对资源进行操作。(3)分别对应添加、删除、修改、查询。3.传统方式操作资源:通过不同的参数来实现不同的效果!方法单一,post 和get(1)http://127.0.0.1/item/quer
2020-10-11 18:32:45
161
原创 Spring的AOP
一、 Aop在Spring中的作用提供声明式事务;允许用户自定义切面1.横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志,安全,缓存,事务等等...2.切面(ASPECT) :横切关注点被模块化的特殊对象。即,它是一个类。3.通知(Advice) :切面必须要完成的工作。即,它是类中的一个方法。4.目标(Target) :被通知对象。5.代理(Proxy) :向目标对象应用通知之后创建的对象。6.切入点(PointCut
2020-10-09 12:52:47
117
原创 类加载
一、类的加载与ClassLoader的理解1.加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象(一个类只有一个Class对象)2.链接: 将Java类的二进制代码合并到JVM的运行状态之中的过程。(1)验证:确保加载的类信息符合JVM规范,没有安全方面的问题(2)准备:正式为类变量(static) 分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配。(3)解析:虚拟机常量池内的
2020-10-07 21:45:48
97
原创 如何利用反射获取对象并利用field去修改属性
一、如何利用反射获取对象所使用的pojo:public class Person { private String name; private static int age = 58; public Person() { System.out.println("Person的无参构造器"); } public Person(String name) { this.name = name; System.ou
2020-10-07 17:00:12
2777
原创 Reflection(反射)
1.Reflection (反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。Class c = Class. forName("java.lang.String")2.加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子, 透过这个镜子看到类的结构,所以,我
2020-10-07 11:33:48
468
原创 注解以及如何利用反射获取注解
什么是注解1.Annotation是从JDK5.0开始引入的新技术2.Annotation的作用 :(1)不是程序本身,可以对程序作出解释(这一点和注释(comment)没什么区别)(2)可以被其他程序(比如:编译器等)读取3.Annotation的格式:注解是以"@注释名"在代码中存在的,还可以添加一-些参数值,例如:@SuppressWarnings(value="unchecked")4.Annotation在哪里使用?可以附加在package , class , method ,
2020-10-07 10:59:48
7739
1
原创 Spring的AOP前置知识点(代理模式)
为什么要学习代理模式?因为这就是SpringAOP的底层! [SpringAOP 和SpringMVC]代理模式的分类:1.静态代理2.动态代理静态代理角色分析:1.抽象角色: 一般会使用接口或者抽象类来解决2.真实角色:被代理的角色3.代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作4.客户:访问代理对象的人!代理模式的好处:1.可以使真实角色的操作更加纯粹!不用去关注一些公共的业务2.公共也就就交给代理角色!实现了业务的分工!3.公共业务发生扩展.
2020-10-06 22:27:30
200
原创 Spring注解
一、@Autowired :自动装配先通过byType自动装配,失败后再通过byName装配如果Autowired不能唯一自动装配上属性,则需要通过@Qualifier(value="xxx" )二、 @Nullable 字段标记了这个注解,说明这个字段可以为null;三、@Resource :自动装配通过byName自动装配,失败后再通过byType装配。四、 @Component :组件,放在类上,说明这个类被Spring管理了,就是bean!@Component有几个衍生注解,我们在we.
2020-10-06 21:14:17
55
原创 Spring使用注释进行自动装配
使用注解注意事项:1.导入对应的约束<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.spr
2020-10-06 17:38:50
157
1
原创 Spring在XML配置自动装配(byName和byType的区别)
Bean的自动装配●自动装配是Spring满足bean依赖一种方式!●Spring会在上下文中自动寻找,并自动给bean装配属性!在Spring中有三种装配的方式1.在xmI中显示的配置2.在java中显示配置3.隐式的自动装配bean(重要)自动装配有两种类型(byName和byType)所用pojo:public class Dog { public void bark(){ System.out.println("wang"); }}..
2020-10-06 16:30:00
1178
原创 Spring中Bean的作用域
第一种singleton,单例模式(默认):XML配置:(可以显式写出来scope=singeleton,也可以不写)<bean id="user2" class="com.mi.pojo.User" c:name="芈2" c:age="18" scope="singleton"></bean>测试:结果:从IOC容器中获取的user2对象为同一个,hashcode相同第二种prototype(原型模式):XML配置:<bean id=..
2020-10-06 12:43:26
76
原创 Spring使用Set注入和拓展注入
Spring中有三种方式注入,第一种是之前文章所写的构造器注入,第二种是使用Set注入,第三种是拓展注入(利用标签)使用Set注入:使用的pojo为:并生成get和set方法XML配置:拓展注入:使用标签注入必须导入对应的依赖<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc..
2020-10-06 12:07:54
222
原创 Spring(IOC使用无参构造器创建的一种方式和使用有参构造器创建对象的三种方式)
使用的pojo为:IOC创建对象有三种方式:第一种方式:下标赋值(Spring会根据XML中对参数赋值的个数去选择构造器)执行测试类:结果为:由于XML中只对一个参数进行赋值,Spring选择的是只有一个参数的构造器,也就是name构造器如果XML中对两个参数进行赋值,Spring选择的是有两个参数的构造器,也就是name和password构造器第二种方式:通过类型设置(不建议)测试结果为:第三种方式:直接通过参数名设置仅设置na.
2020-10-05 21:56:42
907
原创 Spring基础(IOC)
Spring的优点:●Spring是一个开源的免费的框架(容器) !●Spring是一个轻量级的、非入侵式的框架!●控制反转(IOC) ,面向切面编程(AOP) !●支持事务的处理,对框架整合的支持!总结一句话: Spring就是一个轻量级的控制反转 (IOC) 和面向切面编程(AOP)的框架!IOC:不使用IOC的情况下:在service层写死调用那个UserDao使用IOC的情况下:利用set进行动态注入在我们之前的业务中,用户的需求可能会影响我们原来的代码,.
2020-10-05 20:44:06
96
原创 Mybatis中Foreach动态SQL标签(map和list两种情况)
Foreach标签中,主要是collection、item、open、close、separate,collection指的是传入的集合名字,item指的是遍历出来的每个项的名字,open是指开始的符号,close是指结束的符号,separate是指各个项的连接符号上面执行出来的SQL语句如下图所示:open就是SQL拼接的开始符号,也就是“(”),close就是SQL拼接的结束符号,也就是“)”),separate就是SQL拼接的连接符号,也就是“or”,可视情况在开始符号加入“and”,..
2020-10-04 20:16:00
2838
原创 Mybatis一对多
id :一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能 result :注入到字段或 JavaBean 属性的普通结果 association:一个复杂类型的关联;许多结果将包装成这种类型 嵌套结果映射:关联可以是resultMap元素,或是对其它结果映射的引用 一般用javatype指定类型,javatype:一个 Java 类的完全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。然...
2020-10-01 19:17:02
115
原创 Mybatis多对一问题
在使用resultMap时进行结果嵌套处理时要注意(column为查询出来的数据库字段,property为实体类字段):联合查询的时候一定要取别名,如果不取别名会造成结果显示混乱。这是正常取别名,并使用第一条语句的情况:如果不取别名情况下,设置如图所示:使用第二条语句的情况:在进行属性填充的时候,无法识别,会造成严重的错误...
2020-10-01 15:47:31
108
原创 Mybatis分页
第一种方式:利用SQL语句: select * from table(表名) limit #{startIndex},#{pagesize}; startIndex从0开始,如果startIndex为2,pagesize为2,查询出来的数据为顺序为3和4的数据简单理解为第一个参数startIndex为从第几条数据开始查询,第二个参数pagesize为追加条数select * from table limit n;就是表示select * from table limit #{pages.
2020-09-30 22:32:28
434
原创 日志Log4j简洁配置
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码log4j.rootLogger=DEBUG,console,file#控制台输出的相关设置log4j.appender.console = org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target = System.outlog4j.appender.console.Threshold=DEBUGlog4j.a.
2020-09-30 21:33:05
518
原创 Mybatis模糊搜索like用法
Mybatis模糊搜索like用法Mybatis模糊搜索有3种方法:第一种:select * from user where name like #{name};传入参数前先拼接“%”,如要想模糊查询“红”,传入参数时传入“%红%”第二种:select * from user where name like '%${name}%';这种情况下,传入参数时直接传入“红”,使用了$容易导致SQL注入,不建议使用第三种:select * from user where n
2020-09-29 22:23:09
363
dubbo-admin-0.0.1-SNAPSHOT.jar
2020-10-21
springboot_shiro.zip
2020-10-20
springboot_security.zip
2020-10-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人