Spring 资源管理
Spring 资源管理 Version 6.0.3 Resource 接口相对标准 URL 访问机制,Spring 的 org.springframework.core.io.Resource 接口抽象了对底层资源的访问接口,提供了一套更好的访问方式。 12345678910111213141516171819202122232425262728public interface Resource extends InputStreamSource { boolean exists(); boolean isReadable(); boolean isOpen(); boolean isFile(); URL getURL() throws IOException; URI getURI() throws IOException; File getFile() throws IOException; ReadableByteChannel readableChannel() throws IOException; l...
Spring AOP
AOP 概念什么是 AOPAOP(Aspect-Oriented Programming,即 面向切面编程)与 OOP( Object-Oriented Programming,面向对象编程) 相辅相成,提供了与 OOP 不同的抽象软件结构的视角。 在 OOP 中,我们以类(class)作为我们的基本单元,而 AOP 中的基本单元是 Aspect(切面) 术语Aspect(切面)aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中.AOP 的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作: 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 如何在 advice 中编写切面代码. 可以简单地认为, 使用 @Aspect 注解的类就是切面. advice(增强)由 aspect 添加到特定的 join point(即满足 point cut 规则的 join poin...
Spring IoC 依赖来源
依赖查找的来源查找来源 来源 配置元数据 Spring BeanDefinition <bean id ="user" class="xxx.xxx.User"> @Bean public User user() {...} BeanDefinitionBuilder 单例对象 API 实现 Spring 內建 BeanDefintion Bean 名称 Bean 实例 使用场景 org.springframework.context.annotation.internalConfigurationAnnotationProcessor ConfigurationClassPostProcessor 对象 处理 Spring 配置类 org.springframework.context.annotation.internalAutowiredAnnotationProcessor AutowiredAnnotationBeanPostProcessor 对象 ...
Spring 依赖注入
Spring 依赖注入DI,是 Dependency Injection 的缩写,即依赖注入。依赖注入是 IoC 的最常见形式。依赖注入是手动或自动绑定的方式,无需依赖特定的容器或 API。 依赖注入 (Dependency Injection,简称 DI) 是一个过程,其中对象仅通过构造函数参数、工厂方法的参数或对象实例在构造或从工厂方法返回。然后容器在创建 bean 时注入这些依赖项。这个过程基本上是 bean 本身的逆过程(因此得名,控制反转),它通过使用类的直接构造或服务定位器模式自行控制其依赖项的实例化或位置。 使用 DI,代码更干净,当对象具有依赖关系时,解耦更有效。对象不查找其依赖项,也不知道依赖项的位置或类别。结果,您的类变得更容易测试,特别是当依赖关系在接口或抽象基类上时,它们允许在单元测试中使用存根或模拟实现。 容器全权负责组件的装配,它会把符合依赖关系的对象通过 JavaBean 属性或者构造函数传递给需要的对象。 DI 是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是...
Spring 依赖查找
Spring 依赖查找依赖查找是主动或手动的依赖查找方式,通常需要依赖容器或标准 API 实现。 IoC 依赖查找大致可以分为以下几类: 根据 Bean 名称查找 根据 Bean 类型查找 根据 Bean 名称 + 类型查找 根据 Java 注解查找 此外,根据查找的 Bean 对象是单一或集合对象,是否需要延迟查找等特定常见,有相应不同的 API。 单一类型依赖查找单一类型依赖查找接口- BeanFactory 根据 Bean 名称查找 getBean(String) Spring 2.5 覆盖默认参数:getBean(String,Object...) 根据 Bean 类型查找 Bean 实时查找 Spring 3.0 getBean(Class) Spring 4.1 覆盖默认参数:getBean(Class,Object...) Spring 5.1 Bean 延迟查找 getBeanProvider(Class) getBeanProvider(ResolvableType) 根据 Bean 名称 + 类型查找:getBean(String,Cla...
Spring IoC
IoC 简介IoC 是什么IoC 即控制反转(Inversion of Control,缩写为 IoC)。IoC 又称为依赖倒置原则(设计模式六大原则之一),它的要点在于:程序要依赖于抽象接口,不要依赖于具体实现。它的作用就是用于降低代码间的耦合度。 IoC 的实现方式有两种: 依赖注入(Dependency Injection,简称 DI):不通过 new() 的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。 依赖查找(Dependency Lookup):容器中的受控对象通过容器的 API 来查找自己所依赖的资源和协作对象。 IoC 能做什么IoC(控制反转)是一种设计思想,它的核心是:将对象的创建、依赖管理和生命周期的控制权从程序员手中转移到容器(框架)中。 IoC 和 DIDI(依赖注入)是 IoC(控制反转)的一种具体实现方式。 IoC是思想、是原则、是目标 DI是技术、是手段、是实现 IoC 容器IoC 容器就是具有依赖注入功能的容器。IoC 容器负责实例化、定位、配置应用程序中的对象及建立...
Mysql 面试
基础EXISTS 和 IN 有什么区别? EXISTS - 先对外表进行循环查询,再将查询结果放入 EXISTS 的子查询中进行条件比较,确定外层查询数据是否保留; IN - 先查询内表,将内表的查询结果作为条件,提供给外表查询语句进行比较; 索引是个前提,其实选择与否还是要看表的大小。你可以将选择的标准理解为小表驱动大表。在这种方式下效率是最高的。 比如下面这样: 12SELECT * FROM A WHERE cc IN (SELECT cc FROM B)SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc=A.cc) 当 A 小于 B 时,用 EXISTS。因为 EXISTS 的实现,相当于外表循环,实现的逻辑类似于: 123for i in A for j in B if j.cc == i.cc then ... 当 B 小于 A 时用 IN,因为实现的逻辑类似于: 123for i in B for j in A if j.cc == i.cc then .....
mysqldump 基本使用
mysqldump 介绍此工具的目的是将数据库导出到备份文件或将数据库移动到另一个 Web 主机。其他带分隔符的文本格式(如 XML 和 CSV)也可以使用 mysqldump 生成。这些简单的查询使备份过程更加容易。文件中的文本显示为一组 SQL 语句,以后可以将其重建为原始状态。 mysqldump 是做什么的? MySQL 数据库备份:使用 mysqldump 创建安全备份,保护您的数据免遭丢失或损坏。 MySQL 数据库版本控制:创建数据库版本,有点像您可以在任何阶段恢复到的 GIT 标签 MySQL 数据库迁移:mysqldump 简化了数据库传输,确保了服务器或环境转换期间的数据完整性。 设置开发环境:mysqldump 有助于复制生产数据,以实现一致且可靠的开发和测试设置。 导出数据的格式 SQL 语句:默认格式会生成一个 SQL 脚本,该脚本可用于重新创建数据库结构和数据。 压缩文件:mysqldump 可以生成 .gz (gzip,linux内置,windows需要单独下载exe文件) 或 .bz2 (bzip2) 等格式的压缩输出文件,从而节省空间。 XML...
Mysql 运维
Mysql 运维 如果你的公司有 DBA,那么我恭喜你,你可以无视 Mysql 运维。如果你的公司没有 DBA,那你就好好学两手 Mysql 基本运维操作,行走江湖,防身必备。 安装部署Windows 安装(1)下载 Mysql 5.7 免安装版 下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads (2)解压并创建 my.ini 在根目录 my.ini 文件示例: 123456789101112131415[mysqld]#设置3306端口port = 3306# 设置mysql的安装目录 这块换成自己解压的路径basedir=D:\\Tools\\DB\\mysql\\mysql-5.7.31# 允许最大连接数max_connections=200# 服务端使用的字符集默认为8比特编码的latin1字符集character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB[client]# 设置mysql客户端默认字符集defaul...
Mysql 优化
慢查询慢查询日志可以帮我们找到执行慢的 SQL。 可以通过以下命令查看慢查询日志是否开启: 1234567mysql> show variables like '%slow_query_log';+----------------+-------+| Variable_name | Value |+----------------+-------+| slow_query_log | ON |+----------------+-------+1 row in set (0.02 sec) 启停慢查询日志开关: 12345# 开启慢查询日志mysql > set global slow_query_log='ON';# 关闭慢查询日志mysql > set global slow_query_log='OFF'; 查看慢查询的时间阈值: 1234567mysql> show variables like '%long_query_time%';+----------...








