视频项目时长的存储和程序设计方案---单例模式节省内存空间以及自定义注解

 一、苹果设备按钮(表单)样式外观设置

在苹果设备上,按钮等表单控件默认有苹果风格的外观,如图所示

 

如果需要需要和网页上显示一样的效果则需要修改以下的样式

如图网页效果

 

Css样式     -webkit-appearance:none;

-webkitiOSAndroid浏览器的内核名称

-moz     Firefox内核名称

-o     Opera

二、关于视频项目时长的存储和程序设计方案

数据库存储时使用int,而不是time,原因:

    int存储可以保存更大的值,比如对所有视频的时长求和会超过1000小时

    int存储可以很方便的计算,很方便进行比较

       (如:筛选时长大于1小时小于2小时的视频)

        不需要太多的类型转换和函数调用

在程序层面,为了提升用户体验,需要能够把秒数转换成“时间格式”01:30

TimeLength   [数据模型] 将秒数转换成  ---> 小时:分钟:秒,也能实现反向转换

TimeLengthFormatter  [格式化器]   SpringMVC结合,让SpringMVC能够TimeLength的转换功能

@TimeLengthFormat    [格式化注解]      可以应用到数据模型的属性上,让SpringMVC能够将表单数据绑定到数据模型的属性上

TimeLengthFormatterAnnotationFormatterFactory

TimeLengthFormatterFactory   [格式化器工厂]

 

三、使用单例模式节省内存空间

TimeLength很多时候会等于0,为了避免在内存中创建很多为0TimeLength对象、

      可以在TimeLenth类中增加一个public static final 的属性ZERO

          ZREO= new TimeLength(0,0,0);

当程序中需要一个等于0TimeLength时,直接使用

    TimeLength.ZERO

    而不是自己 new TimeLength()

这种情况通常要求类是不可变的,以防止ZERO内部被篡改

     这就要求去掉所有属性的setter方法

四、判断对象的断言

     通常不能写 TestCase.assertEquals(obj,new Object());

      因为obj是现在已经存在的对象,而new Object()将创建一个新对象,

      已经存在对象和新对象一定不是同一个对象

通常会用下面的方法写断言:

  方法1:通过toString()方法转换为字符串进行总量判断,前提是重写toString()方法

  方法2:通过比较各个属性值判断,进行分量判断

五、自定义注解

Retention注解

Retention(保留)注解说明,这种类型的注解会被保留到那个阶段. 有三个值:
1.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略
2.CLASS —— 这种类型的Annotations编译时被保留,class文件中存在,JVM将会忽略
3.RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用.

@Target注解

 目标、位置,注解可以标注的位置

Type   可以用在类、接口

Field   用在字段上

Parameter  用在参数上

Method  用在方法上

@Target:注解的作用目标

@Target(ElementType.TYPE)   //接口、类、枚举、注解

@Target(ElementType.FIELD) //字段、枚举的常量

@Target(ElementType.METHOD) //方法

@Target(ElementType.PARAMETER) //方法参数

@Target(ElementType.CONSTRUCTOR)  //构造函数

@Target(ElementType.LOCAL_VARIABLE)//局部变量

@Target(ElementType.ANNOTATION_TYPE)//注解

@Target(ElementType.PACKAGE) ///   

Documented 注解

Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中.

注意:定义注解使用的是@interface

在主机内部可以定义一些“方法”,这些“方法”就是注解中的“命名参数”

还可以使用defalut的命名参数

TimeLengthFormatterFactory implements AnnotationFormatterFactory<TimeLengthFormat>

格式化器注解工厂,负责将TimeLength小模型、

@TimeLengthFromatTimeLengthFormatter 组合起来实现注解驱动的数据绑定,

也就是将标记了@TimeLength Format注解的属性与表单提交的数据

  此工厂需要添加到SpringMVC的配置文件中

 


MyBatis自定义类型转换器

目标:将程序中的TimeLength对象转换成数据库中的int字段

    或者反向将数据库中的int转换成TimeLength对象

方法:

  方法一:直接实现TypeHandler接口

  方法二:从BaseTypeHandle继承(已经处理了null的情况,推荐)

TypeHandler类上标记注解以表明TypeHandler能够支持类型转换范围

    @MappedJdbcTypes     数据库类型  可以写多个类型

    @MappedTypes         java类型,可以写多个类型

 

原文地址:https://www.cnblogs.com/yangxiansen/p/7860016.html