init
This commit is contained in:
17
s_day13/books-schema.xml
Normal file
17
s_day13/books-schema.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<books xmlns="http://www.example.org/books">
|
||||
<book address="ddd">
|
||||
<name></name>
|
||||
<author></author>
|
||||
<price></price>
|
||||
</book>
|
||||
<book address="ddd">
|
||||
<name></name>
|
||||
<author></author>
|
||||
<price></price>
|
||||
</book>
|
||||
<book>
|
||||
<name></name>
|
||||
<author></author>
|
||||
<price></price>
|
||||
</book>
|
||||
</books>
|
||||
6
s_day13/books.dtd
Normal file
6
s_day13/books.dtd
Normal file
@@ -0,0 +1,6 @@
|
||||
<!ELEMENT books (book+)>
|
||||
<!ELEMENT book (name,price,author)>
|
||||
<!ELEMENT name (#PCDATA)>
|
||||
<!ELEMENT price (#PCDATA)>
|
||||
<!ELEMENT author (#PCDATA)>
|
||||
<!ATTLIST book bid CDATA "check">
|
||||
34
s_day13/books.xml
Normal file
34
s_day13/books.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
内部引用
|
||||
<!DOCTYPE books [
|
||||
<!ELEMENT books (book+)>
|
||||
<!ELEMENT book (name,price,author)>
|
||||
<!ELEMENT name (#PCDATA)>
|
||||
<!ELEMENT price (#PCDATA)>
|
||||
<!ELEMENT author (#PCDATA)>
|
||||
<!ATTLIST book bid CDATA "check">
|
||||
]>-->
|
||||
<!DOCTYPE books SYSTEM "books.dtd">
|
||||
<books>
|
||||
<book bid="j">
|
||||
<name>java</name>
|
||||
<price>99</price>
|
||||
<author>小王</author>
|
||||
</book>
|
||||
<book bid="m">
|
||||
<name>mysql</name>
|
||||
<price>199</price>
|
||||
<author>小李</author>
|
||||
</book>
|
||||
<book bid="m">
|
||||
<name>mysql</name>
|
||||
<price>199</price>
|
||||
<author>小李</author>
|
||||
</book>
|
||||
<book bid="m">
|
||||
<name>mysql</name>
|
||||
<price>199</price>
|
||||
<author>小李</author>
|
||||
</book>
|
||||
</books>
|
||||
40
s_day13/books.xsd
Normal file
40
s_day13/books.xsd
Normal file
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
schema约束文件的根标签必须是schema
|
||||
目标命名空间:类似java中的包名,用来在执行的xml中来导入约束文件
|
||||
targetNamespace="http://www.example.org/books"
|
||||
-->
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.example.org/books"
|
||||
elementFormDefault="qualified">
|
||||
<!--
|
||||
用来定义xml的根标签必须是books
|
||||
-->
|
||||
<element name="books">
|
||||
<!--
|
||||
声明books是复杂标签
|
||||
复杂标签:拥有子标签或者属性的标签
|
||||
-->
|
||||
<complexType>
|
||||
<!--
|
||||
通过sequence标签指定子标签的顺序
|
||||
用来指定books的子标签有哪些
|
||||
-->
|
||||
<sequence>
|
||||
<element name="book" maxOccurs="3" minOccurs="1">
|
||||
<!--设置book标签是复杂标签-->
|
||||
<complexType>
|
||||
<!--设置book标签的子标签顺序-->
|
||||
<sequence>
|
||||
<element name="name" type="string"></element>
|
||||
<element name="author" type="string"></element>
|
||||
<element name="price" type="string"></element>
|
||||
</sequence>
|
||||
<!--设置book标签有属性叫address-->
|
||||
<attribute name="address"></attribute>
|
||||
</complexType>
|
||||
</element>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
</schema>
|
||||
29
s_day13/note.txt
Normal file
29
s_day13/note.txt
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE note [
|
||||
<!ELEMENT note (to,from,heading,body)>
|
||||
<!ELEMENT to (#PCDATA)>
|
||||
<!ELEMENT from (#PCDATA)>
|
||||
<!ELEMENT heading (#PCDATA)>
|
||||
<!ELEMENT body (#PCDATA)>
|
||||
]>
|
||||
<note>
|
||||
<to>George</to>
|
||||
<from>John</from>
|
||||
<heading>Reminder</heading>
|
||||
<body>Don't forget the meeting!</body>
|
||||
</note>
|
||||
|
||||
|
||||
以上 DTD 解释如下:
|
||||
!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
|
||||
|
||||
!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
|
||||
|
||||
!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
|
||||
|
||||
!ELEMENT from (第五行)定义 frome 元素为 "#PCDATA" 类型
|
||||
|
||||
!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
|
||||
|
||||
!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型
|
||||
|
||||
18
s_day13/src/com/inmind/daynamic_proxy_01/CaiXuKun.java
Normal file
18
s_day13/src/com/inmind/daynamic_proxy_01/CaiXuKun.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package com.inmind.daynamic_proxy_01;
|
||||
|
||||
public class CaiXuKun implements Singer{
|
||||
@Override
|
||||
public void sing(int money) {
|
||||
System.out.println("蔡徐坤收到了"+money+"钱,唱了鸡你太美");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dance(int money) {
|
||||
System.out.println("蔡徐坤收到了"+money+"钱,跳了篮球舞");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void eat() {
|
||||
System.out.println("蔡徐坤吃了大盘鸡");
|
||||
}
|
||||
}
|
||||
16
s_day13/src/com/inmind/daynamic_proxy_01/Demo01.java
Normal file
16
s_day13/src/com/inmind/daynamic_proxy_01/Demo01.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package com.inmind.daynamic_proxy_01;
|
||||
/*
|
||||
1.类加载器:能够将字节码文件加载在JVM的方法区,就在堆中产生一个一一对应的Class对象
|
||||
类加载器的作用:生成Class对象
|
||||
|
||||
应用场景:在动态代理中,它要作为参数
|
||||
*/
|
||||
public class Demo01 {
|
||||
public static void main(String[] args) {
|
||||
//反射的前提
|
||||
Class clazz = Demo01.class;
|
||||
//获取类加载器
|
||||
ClassLoader classLoader = clazz.getClassLoader();
|
||||
System.out.println(classLoader);
|
||||
}
|
||||
}
|
||||
26
s_day13/src/com/inmind/daynamic_proxy_01/Demo02.java
Normal file
26
s_day13/src/com/inmind/daynamic_proxy_01/Demo02.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.inmind.daynamic_proxy_01;
|
||||
/*
|
||||
装饰设计模式
|
||||
装饰者 被装饰者 作用:装饰者增强被装饰者的功能
|
||||
花瓶 花 花瓶增强了花的好看的程度
|
||||
经纪人 蔡徐坤 经纪人增强了蔡徐坤的唱跳金额的判断功能
|
||||
装饰设计模式的前提:装饰者需要与被装饰者拥有的功能要一致,继承同一个父类或者实现同一个接口
|
||||
BufferedReader FileReader 底层封装了缓冲区,提高字符输入流的读取效率
|
||||
|
||||
*/
|
||||
public class Demo02 {
|
||||
public static void main(String[] args) {
|
||||
//在美食城唱歌
|
||||
CaiXuKun caiXuKun = new CaiXuKun();
|
||||
/*
|
||||
caiXuKun.sing(10);
|
||||
caiXuKun.dance(20);*/
|
||||
/*
|
||||
蔡徐坤火了
|
||||
需求:蔡徐坤的类的功能不能改变(.java内容不能改变),但是要给它的唱歌跳舞功能增加一些金额判定
|
||||
*/
|
||||
JingJiRen jingJiRen = new JingJiRen(caiXuKun);
|
||||
jingJiRen.sing(120);
|
||||
jingJiRen.dance(30);
|
||||
}
|
||||
}
|
||||
97
s_day13/src/com/inmind/daynamic_proxy_01/Demo03.java
Normal file
97
s_day13/src/com/inmind/daynamic_proxy_01/Demo03.java
Normal file
@@ -0,0 +1,97 @@
|
||||
package com.inmind.daynamic_proxy_01;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
/*
|
||||
静态代理:直接定义一个固定的类,增强某个类的功能(JingJiRen)
|
||||
动态代理:不用定义一个固定的类,动态地增强某个类的功能
|
||||
|
||||
需求:蔡徐坤的类不能改变,也不能定义新的经纪人类,但是还想对蔡徐坤的唱跳功能,进行增强金额判断,此时只能使用动态代理API
|
||||
|
||||
装饰设计模式
|
||||
装饰者 被装饰者 作用:装饰者增强被装饰者的功能
|
||||
花瓶 花 花瓶增强了花的好看的程度
|
||||
经纪人 蔡徐坤 经纪人增强了蔡徐坤的唱跳金额的判断功能
|
||||
装饰设计模式的前提:装饰者需要与被装饰者拥有的功能要一致,继承同一个父类或者实现同一个接口
|
||||
BufferedReader FileReader 底层封装了缓冲区,提高字符输入流的读取效率
|
||||
------------------------------------------------------------------------------------------------------------------------------
|
||||
动态代理模式
|
||||
代理者 被代理者 作用:代理者拦截了被代理者的指定的功能,进行操作
|
||||
singerProxy caiXuKun 拦截了caixukun的sing,dance功能进行金额判断
|
||||
|
||||
动态代理的前提条件:代理者与被代理者必须要拥有相同的功能,实现同一个接口
|
||||
|
||||
装饰设计模式与动态代理的区别:
|
||||
1.装饰设计模型:注重功能的增强,拥有更多的功能代码,,它必须实现所有的抽象方法
|
||||
2.动态代理:注重功能方法的拦截,它只需要针对想拦截的方法即可
|
||||
*/
|
||||
public class Demo03 {
|
||||
public static void main(String[] args) {
|
||||
CaiXuKun caiXuKun = new CaiXuKun();
|
||||
|
||||
//动态地创建出代理对象
|
||||
//动态代理的参数一:类加载器
|
||||
ClassLoader loader = caiXuKun.getClass().getClassLoader();
|
||||
|
||||
//动态代理的参数二:代理对象与被代理对象要拥有相同的功能,Singer接口
|
||||
Class<?>[] interfaces = caiXuKun.getClass().getInterfaces();
|
||||
//动态代理的参数三:处理器对象,用来处理代理对象(蔡徐坤)中的业务逻辑
|
||||
InvocationHandler h = new InvocationHandler() {
|
||||
//注意:动态代理对象(singerProxy),调用任意的方法,都会引起以下的invoke方法执行一次!!!!
|
||||
|
||||
/*
|
||||
invoke方法的三大参数的含义:
|
||||
参数一 :proxy,就是动态代理对象singerProxy(不要使用!!!,它会引起递归,导致栈内存溢出错误)
|
||||
参数二:method,反射中的Method类,就是当前动态代理对象调用的方法sing,dance,eat,toString等
|
||||
参数三:args,当前动态代理对象调用方法时,传入的参数
|
||||
*/
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
/*System.out.println("invoke方法执行了");
|
||||
System.out.println(proxy);//打印时会调用proxy的toString方法
|
||||
System.out.println(method.getName());
|
||||
System.out.println(Arrays.toString(args));*/
|
||||
/*
|
||||
动态代理增强的代码实现
|
||||
1.如果是sing方法,判断是不是超过100
|
||||
2.如果是dance方法,判断是不是超过50
|
||||
*/
|
||||
String methodName = method.getName();
|
||||
if ("sing".equals(methodName)) {
|
||||
//获取sing的参数
|
||||
int money = (int) args[0];
|
||||
if (money > 100) {
|
||||
// caiXuKun.sing(money);
|
||||
// caiXuKun.sing(money);
|
||||
method.invoke(caiXuKun, args);
|
||||
}else{
|
||||
System.out.println("钱不够,一遍玩去");
|
||||
}
|
||||
|
||||
return null;//如果是sing,单独处理,并提前结束,避免sing方法执行2次
|
||||
}
|
||||
|
||||
if ("dance".equals(methodName)) {
|
||||
int money = (int) args[0];
|
||||
if (money > 50) {
|
||||
// caiXuKun.dance(money);
|
||||
method.invoke(caiXuKun, args);
|
||||
} else {
|
||||
System.out.println("钱不够,玩泥巴去吧");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
//除了sing和dance以外的功能方法,都保证原有功能即可
|
||||
return method.invoke(caiXuKun, args);
|
||||
}
|
||||
};
|
||||
Singer singerProxy = (Singer) Proxy.newProxyInstance(loader,interfaces,h);
|
||||
singerProxy.sing(80);
|
||||
singerProxy.dance(55);
|
||||
singerProxy.eat();
|
||||
}
|
||||
}
|
||||
39
s_day13/src/com/inmind/daynamic_proxy_01/JingJiRen.java
Normal file
39
s_day13/src/com/inmind/daynamic_proxy_01/JingJiRen.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package com.inmind.daynamic_proxy_01;
|
||||
|
||||
public class JingJiRen implements Singer{
|
||||
|
||||
CaiXuKun caiXuKun;
|
||||
|
||||
public JingJiRen(CaiXuKun caiXuKun) {
|
||||
this.caiXuKun = caiXuKun;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sing(int money) {
|
||||
//金额判断,超过100万才让蔡徐坤唱歌
|
||||
if (money > 100) {
|
||||
caiXuKun.sing(money);
|
||||
} else {
|
||||
System.out.println("钱不够,一边玩去");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dance(int money) {
|
||||
//金额判断,超过50万才让蔡徐坤跳舞
|
||||
if (money > 50) {
|
||||
caiXuKun.dance(money);
|
||||
} else {
|
||||
System.out.println("钱不够,一边玩去");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void eat() {
|
||||
System.out.println("坤坤没空,你看我怎么样");
|
||||
}
|
||||
|
||||
public void method(){
|
||||
|
||||
}
|
||||
}
|
||||
13
s_day13/src/com/inmind/daynamic_proxy_01/Singer.java
Normal file
13
s_day13/src/com/inmind/daynamic_proxy_01/Singer.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.inmind.daynamic_proxy_01;
|
||||
/*
|
||||
定义出一个歌手的规范,只要实现该接口的方法,那么对应的类,就算是一个歌手类
|
||||
*/
|
||||
public interface Singer {
|
||||
|
||||
void sing(int money);
|
||||
|
||||
void dance(int money);
|
||||
|
||||
void eat();
|
||||
|
||||
}
|
||||
32
s_day13/src/com/inmind/logback_03/LogbackTest.java
Normal file
32
s_day13/src/com/inmind/logback_03/LogbackTest.java
Normal file
@@ -0,0 +1,32 @@
|
||||
package com.inmind.logback_03;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class LogbackTest {
|
||||
//创建出一个logger对象
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger("LogbackTest");
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
try {
|
||||
// System.out.println("test方法开始执行了");
|
||||
LOGGER.info("test方法开始执行了");
|
||||
test(1, 0);
|
||||
// System.out.println("test方法执行结束了");
|
||||
LOGGER.info("test方法执行结束了");
|
||||
} catch (Exception e) {
|
||||
// System.out.println("test方法执行失败,出现了异常");
|
||||
LOGGER.error("test方法执行失败,出现了异常");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void test(int a ,int b) {
|
||||
LOGGER.warn("注意算术除法异常");
|
||||
LOGGER.debug("参数a:"+a);
|
||||
LOGGER.debug("参数b:"+b);
|
||||
int c = a/b;
|
||||
System.out.println("结果是:"+c);
|
||||
}
|
||||
}
|
||||
34
s_day13/src/com/inmind/xml_02/Demo01.java
Normal file
34
s_day13/src/com/inmind/xml_02/Demo01.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package com.inmind.xml_02;
|
||||
/*
|
||||
XML 被设计用来传输和存储数据,可扩展标记语言
|
||||
HTML 被设计用来显示数据。超文本标记语言,用来开发网页
|
||||
|
||||
可扩展:可以自定义
|
||||
标记:标签,<开始标签>标签体</结束标签>
|
||||
|
||||
|
||||
XML 与 HTML 的主要差异
|
||||
XML 不是 HTML 的替代。
|
||||
XML 和 HTML 为不同的目的而设计:
|
||||
XML 被设计为传输和存储数据,其焦点是数据的内容。
|
||||
HTML 被设计用来显示数据,其焦点是数据的外观。
|
||||
HTML 旨在显示信息,而 XML 旨在传输信息。
|
||||
|
||||
|
||||
book{
|
||||
name
|
||||
price
|
||||
author
|
||||
}
|
||||
|
||||
<book>
|
||||
<name>java</name>
|
||||
<price>99</price>
|
||||
<author>小王</author>
|
||||
</book>
|
||||
|
||||
为什么要了解学习XML??
|
||||
今后学习框架,使用xml文件作为配置文件
|
||||
*/
|
||||
public class Demo01 {
|
||||
}
|
||||
42
s_day13/src/logback.xml
Normal file
42
s_day13/src/logback.xml
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<!--
|
||||
CONSOLE :表示当前的日志信息是可以输出到控制台的。
|
||||
-->
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!--输出流对象 默认 System.out 改为 System.err-->
|
||||
<target>System.out</target>
|
||||
<encoder>
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
|
||||
%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<!-- File是输出的方向通向文件的 -->
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
<charset>utf-8</charset>
|
||||
</encoder>
|
||||
<!--日志输出路径-->
|
||||
<file>D:/log/inmind-data.log</file>
|
||||
<!--指定日志文件拆分和压缩规则-->
|
||||
<rollingPolicy
|
||||
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!--通过指定压缩文件名称,来确定分割文件方式-->
|
||||
<fileNamePattern>D:/log/inmind-data-%i-%d{yyyy-MM-dd}-.log.gz</fileNamePattern>
|
||||
<!--文件拆分大小-->
|
||||
<maxFileSize>1MB</maxFileSize>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
<!--
|
||||
1、控制日志的输出情况:如,开启日志 ALL,取消日志 OFF
|
||||
-->
|
||||
<root level="info">
|
||||
<!-- <root level="OFF">-->
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="FILE" />
|
||||
</root>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user