Logback使用
摘要:OK,现在让我们开始logback吧。关于logback的使用,网上的资料良莠不齐,权威一点的材料比如书我是没有找到。所以只好去官网上看文档,本人英语一般,所以只能一边翻译,一边研究。这里来整理一份相对比较详细的博客。 logback概述 LogBack是由log4j的创始人开发的一...
阅读全文
posted @
2016-02-29 20:04
LinkinPark
阅读(430)
推荐(0) 编辑
common-logging源码解析
摘要:OK,现在我们来研究下common-logging的源码。这篇博客有参照上善若水的博客,感谢他的无私分享。 先来随便扯点吧,貌似所有这些流行的Logging框架都和Log4J多少有点关系(不太确定Commons Logging有多大关系,不过至少也都是Apache下的项目吧)。JDK Loggi...
阅读全文
posted @
2016-02-26 14:56
LinkinPark
阅读(1026)
推荐(0) 编辑
common-logging--源码之SimpleLog
摘要:common-logging源码Log接口 在common-logging的源码中,将log核心类抽象成了一个Log接口。 这里贴出Log接口的源码: /* * Licensed to the Apache Software Foundation (ASF) under one or mo...
阅读全文
posted @
2016-02-26 13:42
LinkinPark
阅读(518)
推荐(0) 编辑
如何使用 volatile, synchronized, final 进行线程间通信
摘要:原文地址:https://segmentfault.com/a/1190000004487149。感谢作者的无私分享。 你是否真正理解并会用volatile, synchronized, final进行线程间通信呢,如果你不能回答下面的几个问题,那就说明你并没有真正的理解: 对volat...
阅读全文
posted @
2016-02-26 11:19
LinkinPark
阅读(721)
推荐(0) 编辑
commons-logging的使用
摘要:简介 commons-logging是Apache commons类库中的一员。Apache commons类库是一个通用的类库,提供了基础的功能,比如说commons-fileupload,commons-httpclient,commons-io,commons-codes等。 com...
阅读全文
posted @
2016-02-26 11:00
LinkinPark
阅读(1915)
推荐(0) 编辑
Log4j扩展使用--自定义输出
摘要:写在前面的话 log4j支持自定义的输出。所有的输出都实现了自Appender接口。一般来说,自定义输出值需要继承AppenderSkeleton类,并实现几个方法就可以了。 写这篇博客,我主要也是想说,框架之所有被成为是一个框架,是在帮我们完成大部分的通用代码,这就有一个前提就是说...
阅读全文
posted @
2016-02-25 23:30
LinkinPark
阅读(14426)
推荐(2) 编辑
Log4j源码解析--LoggerRepository和Configurator解析
摘要:本文转自上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/07/10/382678.html。感谢作者的无私分享。 LoggerRepository从字面上理解,它是一个Logger的容器,它会创建并缓存Logger实例,从而...
阅读全文
posted @
2016-02-25 16:13
LinkinPark
阅读(908)
推荐(0) 编辑
Log4j源码解析--Appender接口解析
摘要:本文转自上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/07/10/382676.html。感谢作者的无私的分享。 Appender负责定义日志输出的目的地,它可以是控制台(ConsoleAppender)、文件(FileAp...
阅读全文
posted @
2016-02-25 15:26
LinkinPark
阅读(1743)
推荐(0) 编辑
Log4j源码解析--Layout类解析
摘要:本文转载上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/07/04/382131.html。感谢作者的分享。 Layout负责将LoggingEvent中的信息格式化成一行日志信息。对不同格式的日志可能还需要提供头和尾等信...
阅读全文
posted @
2016-02-25 15:13
LinkinPark
阅读(2004)
推荐(0) 编辑
CSDN博客测试目录
摘要:经常写博客,但是一般没怎么注意些目录,最近看别人写的博客都有目录,所以我也想在以后写好目录,这样子也方便阅读。 这里就写一个实验: 这里一级目录 这里是一级目录下的文本。林肯公园 这里是1.1目录 这里是1.1目录下的文本。LinkinPark 这里是1.1.1目录 systemt...
阅读全文
posted @
2016-02-25 14:03
LinkinPark
阅读(220)
推荐(0) 编辑
Log4j源码解析--核心类解析
摘要:原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.html。感谢上善若水的无私分享。 在简单的介绍了Log4J各个模块类的作用后,以下将详细的介绍各个模块的具体作用以及代码实现。 Logger类 Logger是对...
阅读全文
posted @
2016-02-25 13:58
LinkinPark
阅读(2699)
推荐(0) 编辑
Log4j源码解析--框架流程+核心解析
摘要:OK,现在我们来研究Log4j的源码: 这篇博客有参照上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.html。感谢作者的无私分享。 Log4J将写日志功能抽象成七个核心类或者接口:Logger、...
阅读全文
posted @
2016-02-25 13:31
LinkinPark
阅读(571)
推荐(0) 编辑
自己写的日志框架--linkinLog4j--框架可配置+提性能
摘要:OK,上一篇博客我们已经实现了日志框架的基本的功能,但是还有一个最大的问题就是日志输出地不能重定向,然后一些输出也不可控。那现在我们来实现一个比较完整的日志框架。 设计思路如下: 1,定义一堆常量LinkinLog4jConstants,这些常量用于框架中日志输出的配置项,为了简单和方便...
阅读全文
posted @
2016-02-25 10:24
LinkinPark
阅读(312)
推荐(0) 编辑
Runtime.addShutdownHook的用法
摘要:原文出处:http://kim-miao.iteye.com/blog/1662550。感谢作者的无私分享。 一.Runtime.addShutdownHook理解 在看别人的代码时,发现其中有这个方法,便顺便梳理一下。 void java.lang.Runtime.addShu...
阅读全文
posted @
2016-02-24 18:06
LinkinPark
阅读(926)
推荐(2) 编辑
自己写的日志框架--linkinLog4j--实现基本的框架功能
摘要:OK,上面一步我们已经知道了日志框架的必要性,然后我们也对比了直接不用日志框架来记录日志的种种弊端。现在我们开始就来一步一步的实现自己的日志框架。 大体的思路如下: 1,实现多种日志级别,通过设值不同的日志级别来控制项目中日志的输出等级,所以这里就要写一个等级的枚举,这个枚举就定义Linki...
阅读全文
posted @
2016-02-24 10:50
LinkinPark
阅读(435)
推荐(0) 编辑
自己写的日志框架--linkinLog4j--日志框架的必要性
摘要:OK,在开始研究Log4j的源码之前,我们先来自己模拟一个日志工具,名字就叫linkinlog4j好了。 在软件开发过程中,出现bug总是在所难免;事实上,以我个人经验,即使在实际开发阶段,fix bug时间要远超过写代码的时间。在开发阶段,比较有效的fix bug的方法当然是调试,然而如果...
阅读全文
posted @
2016-02-24 09:59
LinkinPark
阅读(508)
推荐(0) 编辑
Log4j扩展使用--日志格式化器Layout
摘要:Layout:格式化输出日志信息 OK,前面我已经知道了。Appender必须使用一个与之相关联的Layout,这样才能知道怎样格式化输出日志信息。 日志格式化器Layout负责格式化日志信息,方法log.error()的参数只包含日志信息,利用Layout可以附加其他信息,以输出更多...
阅读全文
posted @
2016-02-23 01:02
LinkinPark
阅读(662)
推荐(0) 编辑
Log4j扩展使用--输出地Appender
摘要:OK,现在我们来研究输出低Appended。 Appender控制日志输出的位置 Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。 Log4j内置了常用的输出地,一般情况下配置...
阅读全文
posted @
2016-02-23 01:00
LinkinPark
阅读(919)
推荐(0) 编辑
Log4j扩展使用--日志记录器Logger
摘要:OK,现在我们认真的研究下Logger的配置,进行相关配置扩展。 Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局)。其中,Logger负责记录日志,Appender负责输出到什么地方,Layout负责以什么格式输出,输出哪些附加信息等...
阅读全文
posted @
2016-02-23 00:47
LinkinPark
阅读(811)
推荐(0) 编辑
Log4j的使用
摘要:OK,现在我们开始研究Log4j。Log4j是目前应用最广泛的日志空间,它分如下几个日志级别,日志级别依次升高。级别高的level会屏蔽级别低的信息。 TRACE→DEBUG→INFO→WARNING→ERROR→FATAL→OFF。 比如设置INFO级别,TRACE,DEBUG就不会输出,...
阅读全文
posted @
2016-02-22 23:42
LinkinPark
阅读(481)
推荐(0) 编辑
JDK自带的日志Logging
摘要:OK,现在我们来研究下JDK自带的日志Logger。 从jdk1.4起,JDK开始自带一套日志系统。JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用。 相对于其他的日志空间,JDK自带的日志可谓是鸡肋,无论易用性,功能还是扩展性都要稍逊一筹,所以...
阅读全文
posted @
2016-02-22 16:36
LinkinPark
阅读(1505)
推荐(0) 编辑
java日志概述和原理
摘要:OK,现在我们来研究下Java相关的日志。 日志记录是应用程序运行中必不可少的一部分。具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源。对于开发人员来说,在程序中使用日志API记录日志并不复杂,不过遵循一些最佳实践可以更好的利用日志。本系列介绍了在Jav...
阅读全文
posted @
2016-02-22 15:36
LinkinPark
阅读(10303)
推荐(0) 编辑
Java程序员最常用的8个Java日志框架
摘要:作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用、WEB应用以及移动应用。然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日志可以帮助我们更好更快地定位bug;在运行维护阶段,日志系统又可以帮我们记录大部分的异常信息,从而帮助我们更好的完善系统。本文要来分...
阅读全文
posted @
2016-02-22 15:05
LinkinPark
阅读(1027)
推荐(0) 编辑
linkinFrame--web应用举例--准备工作
摘要:OK,前面的博客我们已经搭好了linkinFrame的项目结构,现在我们这里添加一个简单的web应用,在编写此web应用的过程中我们来一步一步的搭好自己的框架。 现在开始,这里举一个例子,一个客户的CRUD。 1,首先数据创建一个Customer表,主键设置自增,然后再往里面添加2条记录...
阅读全文
posted @
2016-02-22 11:02
LinkinPark
阅读(224)
推荐(0) 编辑
linkinFrame--测试项目添加git管理
摘要:OK,前面一篇博客,已经搭建好了项目的基础的结构。现在我们添加一个简单的servlet来测试下项目能不能跑,然后在讲项目添加到coding上用git管理。 1,我们编写一个servlet,编写一个jsp,发布到tomcat后,用浏览器访问检查是否正常。相关这些基础知识这里就不做赘述了。 ...
阅读全文
posted @
2016-02-22 00:24
LinkinPark
阅读(199)
推荐(0) 编辑
linkinFrame--用maven搭项目结构
摘要:OK,老早想写一套自己的web框架,然后也一直在看开源的一些框架源码。今天开始正式开始写自己的javaWeb框架,暂时就定义linkinFrame好了。 为什么要写一套自己的框架? 其实这是一个比较矛盾的问题,一般的我们很少有时间说自己去写一套,自己写的一套也没有经过严格的单元测试,甚至...
阅读全文
posted @
2016-02-21 21:46
LinkinPark
阅读(207)
推荐(0) 编辑
maven核心概念--生命周期
摘要:maven有一个命令,mvn package,该命令行并没有指定一个插件目标, 而是指定了一个Maven生命周期阶段。一个阶段是在被Maven称为“构建生命周期”中的一个步骤。生命周期是包含在一个项目构建中的一系列有序的阶段。 Maven可以支持许多不同的生命周期,但是最常用的生命周期是默认...
阅读全文
posted @
2016-02-21 12:27
LinkinPark
阅读(276)
推荐(0) 编辑
maven核心概念--插件和目标
摘要:maven的核心概念有很多,我们这里先来看Plugins和Goals。 在上一篇博客中,我们用两种类型的命令行参数运行了Maven。 第一条命令,create。这是一条单个的插件目标,Archetype插件的create目标。 第二条命令,install。Maven第二次运行是一个生命周期阶段...
阅读全文
posted @
2016-02-21 11:46
LinkinPark
阅读(1753)
推荐(0) 编辑
TDD入门demo
摘要:OK,前面的博客整理了一系列的junit相关内容,这里举一个例子TDD实际的编码例子,不管实际编码中是否使用TDD,个人觉得这种思想必须要有。 我们不一定在写业务代码之前一定要说是把测试类都写出来,至少脑子里面都应该试试考虑到自己写的一段编码的代码可测性。如果每段代码都可以测试,那么我们可以高枕...
阅读全文
posted @
2016-02-17 11:29
LinkinPark
阅读(565)
推荐(0) 编辑
第一个简单的maven项目
摘要:学习一个新的东西,最快的方式就是实践。所以我们也不用多说什么了,直接拿一个项目来练手。下面的整理取自maven权威指南,在一堆maven资料中,我觉得这本书写的最好。 简介 我们介绍一个用Maven Archetype插件从空白开始创建的简单项目。 当你跟着这个简单项目的开发过程,你会看到这...
阅读全文
posted @
2016-02-17 00:41
LinkinPark
阅读(242)
推荐(0) 编辑
java -cp用法
摘要:原文出处:http://blog.csdn.net/zhuying_linux/article/details/7714194。感谢作者的分享 java -cp classpath Specify a list of directories, JAR archives, and ZIP a...
阅读全文
posted @
2016-02-16 17:25
LinkinPark
阅读(2118)
推荐(1) 编辑
TDD最佳实践
摘要:这里就先目前阶段,整理一份TDD的最佳实践,在之后的Xunit测试整理中,这份实践会越来越长,对于这份核心在写测试的时候应该时刻注意。 1,在软件开发领域中,从来没有这样的事情:少数的几行代码对大量的代码起着如此重要的作用。这就是测试的意义。 2,junit与项目管理工具,比如maven...
阅读全文
posted @
2016-02-16 16:57
LinkinPark
阅读(358)
推荐(0) 编辑
自定义测试规则
摘要:在junit4X之前的版本,测试的API都是基于继承junit.framework.TestCase的测试类,所以扩展junit要覆盖某些继承行为。junit4X系列之后junit采用注解的方式,所以我们来扩展junit的时候也就多了一种选择。 扩展内置的junit行为的主要相关概念是运行器...
阅读全文
posted @
2016-02-16 12:01
LinkinPark
阅读(658)
推荐(0) 编辑
自定义测试执行器
摘要:使用过spring,然后我们都知道如何使用spring的junit扩展来进行测试,所以我觉得很有必要研究下自定义运行器。比如下面的代码: @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration({ "/spring-mvc-s...
阅读全文
posted @
2016-02-15 00:25
LinkinPark
阅读(406)
推荐(0) 编辑
junit3对比junit4
摘要:本文内容摘自junit实战,感谢作者的无私奉献。 个人觉得每个开源包的版本对比意义不大,闲来无事,这里就来整理一下好了。本文名为junit3对比junit4,但是我通过这篇博客主要也是想统一的来整理下junit4的一些功能。OK,不废话了,现在我们开始: 1,版本的向前兼容和向后兼容 所有的...
阅读全文
posted @
2016-02-09 18:34
LinkinPark
阅读(1735)
推荐(0) 编辑
Junit4X系列--hamcrest的使用
摘要:OK,在前面的一系列博客里面,我整理过了Assert类下面常用的断言方法,比如assertEquals等等,但是org.junit.Assert类下还有一个方法也用来断言,而且更加强大。这就是我们这里要这里的: Assert的AssertThat()方法和Hamcrest匹配器 1,断言抛...
阅读全文
posted @
2016-02-06 21:45
LinkinPark
阅读(776)
推荐(0) 编辑
junit4X系列--Assert与Hamcrest
摘要:原文出处:http://www.blogjava.net/DLevin/archive/2012/05/12/377960.html。感谢作者无私分享 到目前,JUnit4所有的核心源码都已经讲解过了,最后剩下的就是为了兼容性而引入的和JUnit3相关的代码以及Assert中的代码。本节将关...
阅读全文
posted @
2016-02-06 21:17
LinkinPark
阅读(250)
推荐(0) 编辑
junit4X系列源码--Junit4 Runner以及test case执行顺序和源代码理解
摘要:原文出处:http://www.cnblogs.com/caoyuanzhanlang/p/3534846.html。感谢作者的无私分享。 前一篇文章我们总体介绍了Junit4的用法以及一些简单的测试。之前我有个疑惑,Junit4怎么把一个test case跑起来的,在test case之前...
阅读全文
posted @
2016-02-06 13:00
LinkinPark
阅读(484)
推荐(0) 编辑
junit4X系列源码--总体介绍
摘要:原文出处:http://www.cnblogs.com/caoyuanzhanlang/p/3530267.html。感谢作者的无私分享。 Junit是一个可编写重复测试的简单框架,是基于Xunit架构的单元测试框架的实例。Junit4最大的改进是大量使用注解(元数据),很多实际执行过...
阅读全文
posted @
2016-02-06 12:58
LinkinPark
阅读(318)
推荐(0) 编辑
junit4X系列--Exception
摘要:原文出处:http://www.blogjava.net/DLevin/archive/2012/11/02/390684.html。感谢作者的无私分享。 说来惭愧,虽然之前已经看过JUnit的源码了,也写了几篇博客,但是长时间不写Test Case,今天想要写抛Exception相关的test...
阅读全文
posted @
2016-02-05 22:15
LinkinPark
阅读(231)
推荐(0) 编辑
junit4X系列--Builder、Request与JUnitCore
摘要:原文出处:http://www.blogjava.net/DLevin/archive/2012/05/12/377957.html。感谢作者的无私分享。 初次用文字的方式记录读源码的过程,不知道怎么写,感觉有点贴代码的嫌疑。不过中间还是加入了一些自己的理解和心得,希望以后能够慢慢的改进,感兴趣...
阅读全文
posted @
2016-02-05 22:13
LinkinPark
阅读(256)
推荐(0) 编辑
junit4X系列--Rule
摘要:原文出处:http://www.blogjava.net/DLevin/archive/2012/05/12/377955.html。感谢作者的无私分享。 初次用文字的方式记录读源码的过程,不知道怎么写,感觉有点贴代码的嫌疑。不过中间还是加入了一些自己的理解和心得,希望以后能够慢慢的改进,感...
阅读全文
posted @
2016-02-05 22:11
LinkinPark
阅读(371)
推荐(0) 编辑
junit4X系列--Statement
摘要:原文出处:http://www.blogjava.net/DLevin/archive/2012/05/11/377954.html。感谢作者的无私分享。 初次用文字的方式记录读源码的过程,不知道怎么写,感觉有点贴代码的嫌疑。不过中间还是加入了一些自己的理解和心得,希望以后能够慢慢的改进,感...
阅读全文
posted @
2016-02-05 22:09
LinkinPark
阅读(189)
推荐(0) 编辑
junit4X系列--Runner解析
摘要:前面我整理了junit38系列的源码,那junit4X核心代码也基本类似。这里我先转载一些关于junit4X源码解析的好文章。感谢原作者的分享。原文地址:http://www.blogjava.net/DLevin/archive/2012/05/11/377950.html。 初次用文字的方式...
阅读全文
posted @
2016-02-05 22:07
LinkinPark
阅读(833)
推荐(0) 编辑
junit测试延伸--方法的重复测试
摘要:在实际编码测试中,我们有的时候需要对一个方法进行多次测试,那么怎么办呢?这个问题和测试套件解决的方案一样,我们总不能不停的去右键run as,那怎么办呢?还好伟大的junit帮我们想到了。 OK,现在我们开始来写一个例子: 测试源码: package org.linkinpark.junit.t...
阅读全文
posted @
2016-02-05 19:09
LinkinPark
阅读(546)
推荐(0) 编辑
junit测试延伸--私有方法测试
摘要:关于junit测试的延伸,这里有类概念级别的测试,继承类的测试,接口的测试,抽象类的测试,关于这些类级别的测试,这里我就不做多的赘述了。 关于上面的几个测试就是说,我们不应该单纯的去测试类中的一些方法,而且要测试类的状态,也就是那些属性状态。我个人觉得没太大必要,实际编码测试中我们直接测试方法的...
阅读全文
posted @
2016-02-05 17:25
LinkinPark
阅读(2406)
推荐(0) 编辑
junit设计模式--适配器模式
摘要:适配器(Adapter)模式 在软件系统中,由于环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 这就要利用Adapter模式。...
阅读全文
posted @
2016-02-05 12:43
LinkinPark
阅读(258)
推荐(0) 编辑
junit设计模式--命令者模式
摘要:命令模式的意图 将一个请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作; 命令模式告诉我们可以为一个操作生成一个对象并给出它的一个执行方法。 命令模式的构成 1.客户角色: 创建一个具体命令对象,并确...
阅读全文
posted @
2016-02-05 11:28
LinkinPark
阅读(350)
推荐(0) 编辑
junit设计模式--组合模式
摘要:Composite,英语翻译下,复合,组合。 组合模式有时候又叫做部分-整体模式,它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户与复杂元素的内部结构解耦。将对象组合成树形结构以表示“部分-整体”的层次结构。Compos...
阅读全文
posted @
2016-02-05 10:26
LinkinPark
阅读(400)
推荐(0) 编辑
junit源码解析总结
摘要:前面的博客我们也已经整理到了,我们使用junit38,在写测试类的时候我们的测试类必须继承TestCase。这个所有测试类的父类在junit.framework包下面。 前面我们的整理都是说直接在IDE中直接运行测试类,右击然后run as junit。当然我们还可以自己写main方法来运行测试...
阅读全文
posted @
2016-02-04 11:31
LinkinPark
阅读(502)
推荐(0) 编辑
junit源码解析--捕获测试结果
摘要:OK,前面的博客我们整理了junit运行完了所有的测试用例,那么OK了,现在开始该收集测试结果了。 在这最后一步中,junit主要是玩一个类,TestResult。这里类中封装了几个参数,在初始化这个类的时候赋初始值: protected List fFailures; // 失败结果集 p...
阅读全文
posted @
2016-02-01 18:06
LinkinPark
阅读(868)
推荐(0) 编辑
junit源码解析--测试驱动运行阶段
摘要:前面的博客里面我们已经整理了junit的初始化阶段,接下来就是junit的测试驱动运行阶段,也就是运行所有的testXXX方法。OK,现在我们开始吧。 前面初始化junit之后,开始执行doRun方法。 Test suite = getTest(testCase); return doRun...
阅读全文
posted @
2016-02-01 17:25
LinkinPark
阅读(334)
推荐(0) 编辑
junit源码解析--初始化阶段
摘要:OK,我们接着上篇整理。上篇博客中已经列出的junit的几个核心的类,这里我们开始整理junit完整的生命周期。 JUnit 的完整生命周期分为 3 个阶段:初始化阶段、运行阶段和结果捕捉阶段。 这篇这里先来整理下junit的初始化阶段。也就是创建 Testcase 及 TestSui...
阅读全文
posted @
2016-02-01 15:09
LinkinPark
阅读(643)
推荐(0) 编辑
junit源码解析--核心类
摘要:JUnit 的概念及用途 JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个开源的单元测试框架。它属于白盒测试,只要将待测类继承 TestCase 类,就可以利用 JUnit 的一系列机制进行便捷的自动测试了。 JUnit 的设计精简,易学易用,但是功能却非常强大,这...
阅读全文
posted @
2016-02-01 11:55
LinkinPark
阅读(605)
推荐(0) 编辑