Spring框架—控制反转(IOC)
1 Spring框架概述
1.1 什么是Spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架
Spring的优点
方便解耦,简化开发 (高内聚低耦合)
Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
spring工厂是用于生成bean
AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
Spring的体系结构
这里写图片描述
入门案例:(IoC)
获得UserService实现类的实例
之前开发中,直接new一个对象即可。学习spring之后,将由Spring创建对象实例–> IoC 控制反转(Inverse of Control)
之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中
public interface UserService {
public void addUser();
}
public class UserServiceImpl implements UserService {
@Override
public void addUser() {
System.out.println(“a_ico add user”);
}
}
-------配置文件
位置:任意,开发中一般在classpath下(src)
名称:任意,开发中常用applicationContext.xml
内容:添加schema约束 {四给吗 架构约束} Schema-instance 架构-实例
约束文件位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\ xsd-config.html
测试
@Test
public void demo02(){
//从spring容器获得
//1 获得容器
String xmlPath = “com/itheima/a_ioc/beans.xml”;
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//2获得内容 --不需要自己new,都是从spring容器获得
UserService userService = (UserService) applicationContext.getBean(“userServiceId”);
userService.addUser();
3 入门案例:DI
class BookServiceImpl{
//之前开发:接口 = 实现类 (service和dao耦合)
//private BookDao bookDao = new BookDaoImpl();
//spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类)
private BookDao bookDao;
setter方法
}
模拟spring执行过程 =====>》 IOC: 创建 对象 D I :赋值
创建service实例:BookService bookService = new BookServiceImpl() -->IoC
创建dao实例:BookDao bookDao = new BookDaoImple() -->IoC
将dao设置给service:bookService.setBookDao(bookDao); -->DI
3.1 目标类
创建BookService接口和实现类
创建BookDao接口和实现类
将dao和service配置 xml文件
使用api测试
3.2 dao
public interface BookDao {
public void save();
}public class BookDaoImpl implements BookDao {
@Override
public void save() {
System.out.println("di add book");
}
}
3.3 service
public interface BookService {
public abstract void addBook();
}
public class BookServiceImpl implements BookService {
// 方式1:之前,接口=实现类
// private BookDao bookDao = new BookDaoImpl();
// 方式2:接口 + setter
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
@Override public void addBook(){
3.4 配置文件
模拟spring执行过程
创建service实例:BookService bookService = new BookServiceImpl() IoC
创建dao实例:BookDao bookDao = new BookDaoImpl() IoC
将dao设置给service:bookService.setBookDao(bookDao); DI
用于进行属性注入
name: bean的属性名,通过setter方法获得
setBookDao ##> BookDao ##> bookDao
ref :另一个bean的id值的引用
-->
3.5 测试
@Test
public void demo01(){
//从spring容器获得
String xmlPath = “com/itheima/b_di/beans.xml”;
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
BookService bookService = (BookService) applicationContext.getBean(“bookServiceId”);
bookService.addBook();
}
4 依赖注入装配Bean 基于xml
4.1属性依赖注入
依赖注入方式:手动装配 和 自动装配
手动装配:一般进行配置信息都采用手动
基于xml装配:构造方法、setter方法
基于注解装配:
4.1.1 构造方法
目标类
public class User {
private Integer uid;
private String username;
private Integer age;
public User(Integer uid, String username) {
super();
this.uid = uid;
this.username = username;
}
public User(String username, Integer age) {
super();
this.username = username;
this.age = age;
}
spring配置
4.1.2 setter方法
1234
4.2 集合依赖注入
ddd
sss
spring
mvc
二胡
竹笛
吉他
非洲鼓
controller
RequestMapping
Aotuwired
iBatise
MVC
core
5 依赖注入装配Bean 基于注解
注解:就是一个类,使用@注解名称
开发中:使用注解 取代 xml配置文件。
1.@Component取代
@Component(“id”) 取代
2.web开发,提供3个@Component注解衍生注解(功能一样)取代
@Repository :dao层
@Service:service层
@Controller:web层
3.依赖注入,给私有字段设值,也可以给setter方法设值
普通值:@Value(" ")
引用值:
方式1:按照【类型】注入
@Autowired
方式2:按照【名称】注入1
@Autowired
@Qualifier(“名称”)
方式3:按照【名称】注入2
@Resource(“名称”)
4.生命周期
初始化:@PostConstruct
销毁:@PreDestroy
5.作用域
@Scope(“prototype”) 多例
注解使用前提,添加命名空间,让spring扫描含有注解类
Spring框架—面向切面编程(AOP)
1 什么是AOP
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码
经典应用:事务管理、性能监视、安全检查、缓存 、日志等
Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码
AspectJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入
2 AOP实现原理
aop底层将采用代理机制进行实现。
接口 + 实现类 :spring采用 jdk 的动态代理Proxy。
实现类:spring 采用 cglib字节码增强。
3 AOP术语【掌握】
1.target:目标类,需要被代理的类。例如:UserService
2.Joinpoint(连接点):所谓连接点是指那些可能被拦截到的方法。例如:所有的方法
3.PointCut 切入点:已经被增强的连接点。例如:addUser()
4.advice 通知/增强,增强代码。例如:after、before
5. Weaving(织入):是指把增强advice应用到目标对象target来创建新的代理对象proxy的过程.
6.proxy 代理类
7. Aspect(切面): 是切入点pointcut和通知advice的结合
一个线是一个特殊的面。
一个切入点和一个通知,组成成一个特殊的面。
4 AOP实现方式
4.1手动方式
4.1.1JDK动态代理
JDK动态代理 对“装饰者”设计模式 简化。使用前提:必须有接口
1.目标类:接口 + 实现类
public interface UserService {
public void addUser();
public void updateUser();
public void deleteUser();
}
2.切面类:用于存通知 MyAspect
public class MyAspect {
public void before(){
System.out.println(“鸡首”);
}
public void after(){
System.out.println(“牛后”);
}
}
工厂类:编写工厂生成代理
public class MyBeanFactory {
public static UserService createService(){
//1 目标类
final UserService userService = new UserServiceImpl();
//2切面类
final MyAspect myAspect = new MyAspect();
/* 3 代理类:将目标类(切入点)和 切面类(通知) 结合 --> 切面
* Proxy.newProxyInstance
* 参数1:loader ,类加载器,动态代理类 运行时创建,任何类都需要类加载器将其加载到内存。
* 一般情况:当前类.class.getClassLoader();
* 目标类实例.getClass().get...
* 参数2:Class[] interfaces 代理类需要实现的所有接口
* 方式1:目标类实例.getClass().getInterfaces() ;注意:只能获得自己接口,不能获得父元素接口
* 方式2:new Class[]{UserService.class}
* 例如:jdbc 驱动 --> DriverManager 获得接口 Connection
* 参数3:InvocationHandler 处理类,接口,必须进行实现类,一般采用匿名内部
* 提供 invoke 方法,代理类的每一个方法执行时,都将调用一次invoke
* 参数31:Object proxy :代理对象
* 参数32:Method method : 代理对象当前执行的方法的描述对象(反射)
* 执行方法名:method.getName()
* 执行方法:method.invoke(对象,实际参数)
* 参数33:Object[] args :方法实际参数
*
*/
UserService proxService = (UserService)Proxy.newProxyInstance(
MyBeanFactory.class.getClassLoader(),
userService.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//前执行
myAspect.before();
//执行目标类的方法
Object obj = method.invoke(userService, args);
//后执行
myAspect.after();
return obj;
}
});
return proxService;
}
}
4.测试
@Test
public void demo01(){
UserService userService = MyBeanFactory.createService();
userService.addUser();
userService.updateUser();
userService.deleteUser();
}
4.1.2 CGLIB字节码增强
没有接口,只有实现类。
采用字节码增强框架 cglib,在运行时 创建目标类的子类,从而对目标类进行增强。
工厂类
public class MyBeanFactory {
public static UserServiceImpl createService(){
//1 目标类
final UserServiceImpl userService = new UserServiceImpl();
//2切面类
final MyAspect myAspect = new MyAspect();
// 3.代理类 ,采用cglib,底层创建目标类的子类
//3.1 核心类
Enhancer enhancer = new Enhancer();
//3.2 确定父类
enhancer.setSuperclass(userService.getClass());
/* 3.3 设置回调函数 , MethodInterceptor接口 等效 jdk InvocationHandler接口
* intercept() 等效 jdk invoke()
* 参数1、参数2、参数3:以invoke一样
* 参数4:methodProxy 方法的代理
*
*
*/
enhancer.setCallback(new MethodInterceptor(){
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
//前
myAspect.before();
//执行目标类的方法
Object obj = method.invoke(userService, args);
// * 执行代理类的父类 ,执行目标类 (目标类和代理类 父子关系)
methodProxy.invokeSuper(proxy, args);
//后
myAspect.after();
return obj;
}
});
//3.4 创建代理
UserServiceImpl proxService = (UserServiceImpl) enhancer.create();
return proxService;
}
}
4.2半自动
让spring 创建代理对象,从spring容器中手动的获取代理对象
4.2.1目标类
public interface UserService {
public void addUser();
public void updateUser();
public void deleteUser();
}
.2切面类
/**
*/
public class MyAspect implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
System.out.println("前3");
//手动执行目标方法
Object obj = mi.proceed();
4.2.3Spring 配置
4.2.4 测试
@Test
public void demo01(){
String xmlPath = “com/itheima/b_factory_bean/beans.xml”;
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//获得代理类
UserService userService = (UserService) applicationContext.getBean("proxyServiceId");
userService.addUser();
userService.updateUser();
userService.deleteUser();
}
4.3全自动
从spring容器获得目标类,如果配置aop,spring将自动生成代理。
4.3.1 Spring配置
4.3.2 测试
@Test
public void demo01(){
String xmlPath = “com/itheima/c_spring_aop/beans.xml”;
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//获得目标类
UserService userService = (UserService) applicationContext.getBean("userServiceId");
userService.addUser();
userService.updateUser();
userService.deleteUser();
}
spring是什么? 1:是一个轻量级的开源框架,是为解决企业应用开发的复杂性而创建的. 2:是一个三层架构,也为J2EE应用程序开发提供集成的框架.
1,什么是spring框架 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,…
Spring的概述什么是Spring据度娘所载: Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson创建
1.Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 然而,Sp… 来自: 湮顾千古的博客
Spring简介
7577
Spring是什么Spring是一个开源的控制反转(Inversion of Control,IoC)和面向切面(AOP)的容器框架,它的主要目得是简化企业开发。控制反转(IOC)大概以前,业务逻辑层…
Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内…
Spring——KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{} 本篇文章主要介绍一下{}和#{}的区别。首先,${}是用来时间变量插值的一种表达式。#{}是SPEL表达式。他们的作用是通过spring把值注入给某个属性。
Spring 框架参考文档(一) 文章摘自:http://spring.cndocs.tk/index.html
作为流行了10年以上的老将,spring依然精神矍铄,影响不减。
程序员的世界,给大家来普及下。当今最热门的职业属程序员莫属。互联网发展的迅速,市场的需求很大。薪资待遇高。尽管这样,程序员也是很招黑的,说程序员秃头闷骚修电脑的标配!黑归黑,当真你就输了!
Spring框架自学之路——简易入门
目录 目录 介绍 Spring中的IoC操作 IoC入门案例 Spring的bean管理(配置文件) Bean实例化的方式 Bean标签的常用属性 属性注入 使用有参构造函数注入属性 使用s… 来自: 梦空间
薪资一直是程序员们秘而不宣的热议话题,但是却鲜少有人敢于公开披露自己的薪资水平:有的人担心会在某个地方被某个人认出来,更多的人是担心因为分享他们的薪资而被解雇…
最近开始工作了,工作期间解除了Spring框架,总感觉这个东西怎么这么牛逼,看网上的资料什么的也看不懂,越看越玄乎总感觉好像有装逼的嫌疑
说起缓存相关技术,老多了, memcache、redis、squid、varnish、web cache、 CDN等等。缓存技术五花八门,但这些技术间有什么共性的地方,又有什么不同的地方呢?
SpringSpring简介Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架。Spring核心是IOC和AOP。 Spring优点-方便解耦,简化开发,通过Spring提供的I…
框架简介 MVC对于我们来说,已经不陌生了,它起源于20世纪80年代针对smalltalk语言的一种软件设计模式,现在已被广泛应用。近年来,随着java的盛行,MVC的低耦合性、高重用性、可维护性、…
背景: 由于Spring官网的改版了,把Spring相关产品放到了GitHub上托管了,和之前的下载方式不一样了,
Spring核心技术原理(1)为什么要有Spring?一、知史可以明鉴我们学习技术的时代赶上了最好的时代,跳过了很多前人经常踩的坑,前人在踩坑的过程中总结了很多经验和教训,而新时代的我们只是继承了前人…
之前在国内资源网站遇见很多spring Framework Reference Documentation 开发手册下载的,居然都要资源点之类的,而且几乎都是英语
本博中关于spring的文章:Spring IOC和AOP原理,Spring事务原理探究,Spring配置文件属性详解,Spring中的代理模式 Spring提供了很多轻量级…
Spring AOP 面向切面编程 什么是aop? Spring把横切式的应用,比如事务,日志等。单独抽出来,声明给某些目标对象,然后这些被声明过得对象就具有了该横切式应用能力,或者说会执行横切…
SpringMVC 框架介绍 Springmvc是什么? Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从…
Spring的bean管理(注解方式)注解:代码中的特殊标记,注解可以使用在类、方法、属性上面,使用注解可实现一些基本的功能。注解的写法是@注解名称(属性=属性值)。使用注解创建对象第一步,
开发工具STS–IDE的选择 STS即Spring Tool Suite,下载地址: http://spring.io/tools。简单的说STS是基于eclipse开发环境的客制化…
。 Spring主要是为企业开发解决了系列的问题,而且可以十分方便的与其他框架集成在一起。最显著的特性是IOC与AOP。 IOC 控制反… Spring框架介绍和使用
1.1 Spring 框架简介 Spring 框架(简称Spring)是 SpringSource 出品的一个用于简化 Java企业级应用开发开源的应用程序框架。它提供了开发一个结构良好的… 来自:
深入理解Spring框架的作用
纵览Spring , 读者会发现Spring 可以做非常多的事情。 但归根结底, 支撑Spring的仅仅是少许的基本理念, 所有的理念都可以追溯到Spring最根本的使命上:
spring 中 一个* 与两个*的区别
点击关注异步图书,置顶公众号每天与你分享IT好书 技术干货 职场知识参与文末话题讨论,每日赠送异步图书。——异步小编Spring作为Java开发的事实开发框架,一直以来都被开发者誉为杀手级… 来自:
Spring集成Log4j和Slf4j
Log4j的集成 Slf4j的集成 Log4j的集成Spring项目中集成Log4j 1. 下载好log4j的jar包(例如:log4j-1.2.11.jar) 2. web.xml … 来自:
【Spring】Spring MVC原理及配置1.Spring MVC概述:Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开… 来自:
几种缓存比较
几种缓存比较1、memcached协议简单、基于libevent的事件处理、内置内存存储方式、memcached不互相通信的分布式。 各个memcached不会互相通信以共享信息,分布策略由客户端实现… 来自:
spring的功能很强大,使用也很简单,可以说是我见到的解耦合性最强的框架了,首页在使用前我们需要导入spring的包, 从spring官网下载的lib中我们选择这七个导入到工程中: 此外还有一个… 来自:
Lesson1数据绑定:实现如图所示的简单功能,两个文本框内分别显示姓名和年龄。 操作步骤如下: 1.打开VS2013建立新项目–选择WPF应用程序–在界面上拖动两个TextBox,对两个Text…
Spring 框架概述 1.1. 什么是Spring Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 分层: 来自JavaEE体系结构 (客户端层、…
面向切面编程的介绍和使用(Spring框架)
Spring框架整理第二发,AOP的介绍和使用。 AOP概述 AOP:aspect oriented programming:面向切面编程 OOP:Object Oriente…
Spring讲解PPT,了解Spring的起源历史,Ioc、AOP等知识。
软件框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定 义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后… 来自: life is wonderful
关于Spring简单的介绍
Spring概述 一,什么是spring? 1. Spring是最受欢迎的企业级JAVA应用程序开发框架。 2. Spring是一个开源的JAVA平台,2003年6月首次在。。。。。。。。。。。。。
学习Spring的一些不错的推荐
看到知乎上有一些比较好的推荐: 收藏下,以便学习; 推荐以 Spring Boot 教程与 Spring Cloud 教程的详细开源项目 “SpringBoot-Learning” 此项… 来自: 程序圆—脱颖而出,卓尔不群
23种设计模式介绍以及在Java中的实现
技术分析之Spring框架的特点 1. 为什么要学习Spring的框架 * 方便解耦,简化开发 * Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spri… 来自: 玩垃圾的人
史上最简单的 SpringCloud 教程 | 终章
1217544
一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家… 来自: fxbin123的博客
最新迅雷“应版权方要求,文件无法下载”的解决办法
迅雷下载有的电影电视剧的时候会出现:应版权方要求,文件无法下载,或者显示迅雷任务包含违规内容 无法继续下载。这个是因为版权方和迅雷公司交涉,迅雷公司通过技术手段阻止了迅雷任务的下载,比如下载最近的《人… 来自:
本教程对jetbrains全系列可用例:IDEA、WebStorm、phpstorm、clion等 因公司的需求,需要做一个爬取最近上映的电影、列车号、航班号、机场、车站等信息,所以需要我做一个爬虫… 来自: 昌昌
.
vue-cli3脚手架/单文件/环境搭建。vue3.x版本相对于2.x版本做了许多地方的优化,个人总结主要还是使用上使开发者更加一目了然,配置起来也更加的方便,减少了各种webpack里面的lo…
MyBatis常见细节问题 一、前言 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置… 来自: 愤怒的懒洋洋的博客
Sql表操作提升 一、前言 Sql是最重要的关系数据库操作语言,现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。 但是Sql对表的操作… 来自:
vue3修改link中标签默认icon,vue3初次使用的时候不好好阅读配置难免会遇到一些坑,本人在项目完结的时候打算把浏览器的导航小icon图标给替换了,可是并没有那么顺利,那么如何在vue3中替换… 来自: 欢迎来到☆槿畔☆的博客
精选!15个必备的VSCode插件
194192
Visual Studio Code 是由微软开发的一款免费、跨平台的文本编辑器。由于其卓越的性能和丰富的功能,它很快就受到了大家的喜爱。 就像大多数 IDE 一样,VSCode 也有一个扩展和主题…
webstorm 作为最近最火的前端开发工具,也确实对得起那个价格,但是秉着勤俭节约的传统美德,我们肯定是能省则省啊。 方法一:(更新时间:2018/4/8)v3.3 注册时,在打开的Lice… 来自: 唐大帅的编程之路
在平时的工作中你或许会遇到这样的问题,给某个文件夹下面的所有的图片添加同一个字符串,如果一个一个去F2再CTRL+V这样就会烦得很,图片几个还好,如果是几百个图片那么工作的效率就会极低,windown… 来自:
Vscode是一款开源的跨平台编辑器。默认情况下,vscode使用的语言为英文(us),如何将其显示语言修改成中文了? 1)打开vscode工具; 2)使用快捷键组合【Ctrl+Shift+p… 来自: 飞扬的博客
Spring常用注解小结
Swagger使用指南
1:认识SwaggerSwagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,… 来自: sanyaoxu_3的博客
在我们将Winform自带的边框隐藏之后,我们需要自己编写窗口的移动。 思路就是1.获得点击左键时当前鼠标的坐标 2.获得移动后鼠标的坐标 3.窗体的坐标=移动后的鼠标坐标-移动前的鼠标坐标 pr…
Sql不常见关键字提升 一、前言 Sql是最重要的关系数据库操作语言,现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。 我们常用的sql关键字不外乎 group by…
FFMPEG简介 FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,提供了录制、转换以及流化音视频的完整解决方案。
【JAVA】String源码浅谈
String源码浅谈 String这个类可以说是我们使用得最为频繁的类之一了,前几次去面试,都被问到String... 来自:
Proxyee-down是monkeyWie在Github上的一个开源项目,向作者致敬。 最新版的Proxyee-down为3.12(2018.10更新),因为作者在3.x后的版本中并未发布exe版…
一度的Ignite大会上,微软宣布Microsoft Teams是微软历史上发展最快的应用。它将取代Skype for business,成为语音视频协作的主打产品。 我也有幸…
Redis底层详解(四) 整数集合
一、集合概述 对于集合,STL 的 set 相信大家都不陌生,它的底层实现是红黑树。无论插入、删除、查找都是 O(log n) 的时间复杂度。当然,如果用哈希表来实现集合,插入、… 来自: WhereIsHeroFrom的博客
TCP三次握手四次挥手整理
通俗理解何为负载均衡
DNS解析
TCP 与 UDP 的区别及应用场景
java中String类常用方法
Mybatis框架介绍及使用
CentOS7安装MySQL5.6数据库并实现远程登录
SpringMVC相关介绍及使用
数据库事物的四大特性及隔离级别