配置文件 SpringBoot 使用一个全局的配置文件,配置文件名是固定的;用来修改SpringBoot自动配置的默认值 application.properties 跟 yml 文件类似,二者选择其一使用 person.age=20 #map的配置形式,每个键值对分开配置 person.map.k1=v1 person.map.k2=v2 #list的配置形式,每个元素用逗号隔开 person.list=a,b,c #对象的配置形式,对象中的每个属性分开赋值 person.dog.name=dog person.dog.age=10 application.yml YAML(YAML Ain't Markup Language) 标记语言: 以前的配置文件大多都是 XML 文件 YAML:以数据为中心,比 JSON、XML 等更适合做配置文件 server: port: 8081 基本语法 k: v:表示一对键值对(值前面必须有一个空格),以空格的缩进来控制层级关系,只要是左对齐的一列数据都是同一个层级的 server: port: 8081 path: /hello 属性和值.... Spring Boot之配置 SpringBoot
示例 依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.6.RELEASE</version> <relati.... Spring Boot入门 Java
BeanFactoryPostProcessor BeanFactoryPostProcessor:BeanFactory的后置处理器,在BeanFactory标准初始化之后调用,所有的Bean定义已经保存加载到BeanFactory,但是Bean的实例还未创建 执行时机: (1)IOC创建容器对象 (2)invokeBeanFactoryPostProcessors(beanFactory) -- 执行BeanFactoryProcessor 如何找到所有的BeanFactoryProcessor? 直接在BeanFactory中找到所有类型是BeanFactoryPostProcessor的组件,并执行他们的方法 在初始化创建其他组件之前执行 @Component public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableLi.... Spring注解驱动开发拓展 Spring
简单使用 1.导入相关依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.2.6.RELEASE</version> </dependency> 2.配置数据源、JdbcTemplate(Spring提供的简化数据库操作工具) @Bean public DataSource dataSource() throws PropertyVetoException { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setUser("root"); dataSource.setPassword("458974tl"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?useSSL=f.... Spring注解驱动开发之声明式事务 Java
AOP指在程序运行期间动态地将某段代码切入到指定位置进行运行的编程方式 -- 动态代理 简单使用 步骤: 1.导入AOP模块:Spring AOP -- spring-aspects 2.定义一个业务逻辑类,运行期间打印日志 3.定义一个日志切面类 通知方法: (1)前置通知(@Before):在目标方法运行之前运行 (2)后置通知(@After):在目标方法运行之后运行(无论方法正常结束还是异常结束) (3)返回通知(@AfterReturning):在目标方法正常返回之后运行 (4)异常通知(@AfterThrowing):在目标方法出现异常以后运行 (5)环绕通知(@Around):动态代理,手动推进目标方法就行 4.给切面类的目标方法标注何时何地运行(通知注解) 5.将切面类和业务逻辑类都加入到容器中 6.告诉Spring哪个类是切面类 -- 给切面类加上 @Aspect 注解 7.开启AspectJAutoProxy -- 在配置类加上 @EnableAspectJAutoProxy 注解 //配置类 @Configuration @EnableAspectJAutoProx.... Spring注解驱动开发之AOP Java
传统配置文件 (1)编写xml文件 <?xml version="1.0" encoding="UTF-8"?> <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.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 包扫描,只要标注了@.... Spring注解驱动开发 Java
根据上传的Excel,拿到不同的sheet解析后打包为zip下载 @PostMapping("/upload") @ResponseBody public String uploadFile(MultipartFile file, HttpServletResponse response) throws IOException { Map<String, XSSFWorkbook> map = parseJLLService.ParseJLLExcel(file); String originalFilename = file.getOriginalFilename(); originalFilename = originalFilename.substring(0,originalFilename.lastIndexOf("."))+".zip"; //初始化返回 Set<String> fileNames = map.keySet(); // ZipInputStream zipInputStream= null; response.reset(); res.... 批量生成Excel,打包成zip后下载 Java
MVAEN依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency> <dependency> 读取Excel (1)读取Excel InputStream inputStream = file.getInputStream(); XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream); (2)获取sheet的个.... Java POI Java
配置文件 主配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 引入外部properties resource:引入类路径下的资源 url:引入网络路径或者磁盘路径下的资源 --> <properties resource="db.properties"></properties> <!-- settings包含很多重要的设置项 setting:用来设置每一个设置项 name:设置项名 value:设置项取值 --> <settings> <!-- 驼峰命名法 --> <setting name="mapUnderscoreToCamelCase" value="tru.... MyBatis MyBatis
配置 webmvc.xml <!-- 配置DispatcherServlet --> <servlet> <servlet-name>SpringDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置DispatcherServlet的一个初始化参数:配置SpringMVC配置文件的名称和路径 --> <!-- 实际上也可以不通过contextConfigLocation来配置SpringMVC的配置文件,而使用默认的 默认的配置文件为:/WEB-INF/<servlet-name>-servlet.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-val.... SpringMVC SpringMVC
核心包:beans、context、core、expression 日志包:com.springsource.org.apache.commons.logging-1.1.1 老版要求的包:com.springsource.org.apache.log4j-1.2.15 配置文件 applicationContext.xml(位置和名称任意,建议用这个并放在src下) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置对象 --> <.... Spring Spring
ORM(Object/Relation Mapping): 对象/关系映射 ORM 主要解决对象-关系的映射 ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。 ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中. 配置文件 元数据(xxx.hbm.xml) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- 配置表与实体对象的关系 --> <!-- package属性:填写一个包名.在元素内部凡是需要书写完整类名的属性,可以直接写简答类名了. --> <hibernate-mapping pac.... Hibernate Java
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助Reflection API取得任何类的内部信息,并直接操作任意对象的内部属性和方法。 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过镜子看到类的结构,所以,我们形象地称之为:反射。 获取Class实例的方式 加载到内存中的运行时类,会缓存一段时间,在此时间内,我们可以通过不同的方式获取此实例 方式1:调用运行时类的属性 Class c = Person.class; 方式2:通过运行时类的对象,调用getClass() Person p = new Person(10,""); Class c = p.getClass(); 方式3:调用Class的静态方法forName(String classpath),参数为完整的类名 Class c2 = Class.forName("com.wu.compare.Person"); 方式4:通过类加载器获取 Clas.... Java反射机制 Java
概述 一、网络编程中有两个主要问题 1.如何准确定位网络上一台或者多台主机,定位主机上的特定应用 2.找到主机后如何可靠高效地进行数据传输 二、网络编程中的两个要素 1.IP和端口号 2.提供网络通信协议:TCP/IP参考模型(应用层、传输层、网络层、物理+数据链路层 网络通信协议 传输层中两个非常重要的协议 (1)传输控制协议TCP(Transmission Control Protocol) 使用TCP协议前,须先建立TCP连接,形成传输数据通道 传输前,采用“三次握手”方式,点对点通信,是可靠的 TCP协议进行通信的两个应用进程:客户端、服务端 在连接中可进行大数据量的传输 传输完毕,须释放已建立的连接,效率低 (2)用户数据报协议UDP(User Datagram Protocol) 将数据、源、目的封装成数据包,不需要建立连接 每个数据报的大小限制在64k内 发送不管对方是否准备好,接收方收到也不确认,故是不可靠的 可以广播发送 发送数据结束时无需释放资源,开销小,速度快 IP地址(InetAddress) 唯一的标识Internet上的计算机(通信实体) 本地回环.... 网络编程 Java
File类 1.File类的一个对象,代表一个文件或文件目录(俗称:文件夹) 2.File类声明在java.io包下 3.设计到文件写入、读取操作需要使用IO流 常用构造器 (1)public File(String pathname):以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果是相对路径,则默认的当前路径在系统属性user.dir中存储 (2)public File(String parent,String child):以parent为父路径,child为子路径创建File对象 (3)public File(File parent,String chlid):根据一个父File对象和子文件路径创建File对象 常用方法 (1)public String getAbsolutePath():获取绝对路径 (2)public String getPath():获取路径 (3)public String getName():获取名称 (4)public String getParent():获取上传文件目录路径。若无,返回null (5)public lo.... IO流 Java
集合、数组都是对于多个数据进行存储操作的结构,简称Java容器(内存层面的存储) 数组存储的特点: (1)一旦初始化之后,其长度就确定了 (2)数组一旦定义好,其元素的类型也就确定了 (3)数组中提供的方法非常有限 Collection接口 -- 单列集合,存储单个数据 通用方法: (1)add(E e) (2)size() (3)addAll(Collection c) (4)isEmpty() (5)clear() (6)contains(Object obj):判断时会调用obj所在对象的equals()方法,自定义对象可重新该方法 (7)containsAll(Collection c) (8)remove(Object obj) (9)removeAll(Collection c) (10)retainAll(Collection c):求交集并返回给当前集合 (11)equals(Collection c) (12)hashCode() (13)toArray() (14)iterator() 迭代器 (1)hasNext():仍有元素可以迭代,则返回 (2)next():.... 集合 Java
1.Comparable ——自然排序 Comparable接口使用举例 像String、包装类实现了Comparable接口,重写了comparaTo(obj)方法,给出了比较两个对象大小的方式 像String、包装类重写了comparaTo(obj)方法后,进行了从小到大的排序 重写compareTo(obj)的规则: 如果当前对象大于形参对象obj,则返回正整数 如果当前对象小于形参对象obj,则返回负整数 如果当前对象等于形参对象obj,则返回零 对于自定义类,如果需要排序,可以让自定义类实现Comparable接口,重写CompareTo(obj)方法,在该方法中指定如何排序 public class Person implements Comparable{ private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public .... Java比较两个对象的大小 Java
JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是: 可变性:像日期和时间这样的类应该是不可变的 偏移性:Date中的年份是从1900开始的,而月份都从0开始 格式化:格式化只对Date有用,Calendar则不行 此外,它们也不是线程安全的;不能处理闰秒等 1.LocalDate(本地日期)、LocalTime(本地时间)、LocalDateTime(本地时间日期) (1)new() / * now(Zoneld zone):静态方法,根据当前时间创建对象/指定时区的对象 (2)of():静态方法,根据指定日期/时间创建对象 (3)getDayOfMonth() / getDayOfYear():获取月份天数(1-30)/获得年份天数(1-366) (4)getDayOfWeek():获得星期几(返回一个DayOfWeek枚举值) (5)getMonth():获得月份,返回一个Month枚举值 (6)getMonthValue() / getYea.... Java8之后的日期类 Java
1.特点 (1)String声明为final的,不可被继承 (2)String实现了Serializable接口,表示字符串是支持序列化的;实现了Comparable接口,表示字符串可以比较大小 (3)String内部定义了final char[] value用于存储字符串数据 (4)代表不可变字符序列 -- 不可变性 a.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值 b.当对现有的字符串进行连接操作是,也需要指定内存区域赋值,不能使用原有的value进行赋值 c.当调用String的replace()方法修改指定字符或者字符串时,也需要指定内存区域赋值,不能使用原有的value进行赋值 (5)通过字面量的方式给一个字符串赋值,此时的字符串值声明在字符串常量池中 (6)字符串常量池中是不会存储相同内容的字符串的 2.实例化方式 (1)字面量:此时的字符串值声明在字符串常量池中 (2)构造器:此时保存的是地址值.... Java常用类 -- String Java
安全问题 例子:假设有三个窗口在卖票,票数一共有100张 问题:卖票过程中出现了重票,错票 -->出现了线程安全问题 原因:当某个线程在操作共享数据时,还未操作完,此时其他线程加入进来,也对共享数据进行了操作 解决方法:当线程a在操作共享数据时,其他线程不能参与,当线程a操作完毕之后,其他线程才能操作共享数据,即使线程a阻塞了也不会改变这种情况 --> 使用同步机制解决 public class Window implements Runnable{ private int ticket = 100; @Override public void run() { while (true) { if (ticket > 0) { System.out.println(Thread.currentThread().getName()+"卖票,票号为:"+ticket); ticket--; }else { break; } } } } public class WindowTest { public static void main(String[] args) { Win.... 线程安全问题 Java