- html5图片自动翻转,canvas实现图片镜像翻转的2种方式
weixin_39841136
html5图片自动翻转
1.通过canvas自带的画布方法进行翻转varimg=newImage();//这个就是img标签的dom对象img.src='./sy.png';img.onload=function(){//图片加载完成后,执行此方法ctx.drawImage(img,posx,posy,210,80);};play.addEventListener('click',function(){ctx.clear
- 2018-03-18 图片处理(一)----图片加载
紫杉叶子
笔记如下如图:2018-03-18_081925.png实现步骤:从sd卡中显示图片1.因为是android6.0系统,所以要动态申请读写sd卡的权限2.显示图片为了与屏幕大小更加的契合,要动态的获取对图片的一个采样率采样率:比如采样率为4,对于一个1000*1000的图片,宽和高:1000*1000---->高:1/4*宽:1/4=总:1/16----以1/16的大小来采样动态获取采样率//应该
- react-native-http-cache android编译错误
ablac
getSmallImageDiskStorageCache()改为getSmallImageFileCachegetMainDickStorageCache()改为getMainFileCacheios编译错误import"RCTHttpCache.h"注释下面三个//#import"RCTImageLoader.h"//#import"RCTImageCache.h"//#import"RCTB
- Android - 一张图片到底占用多少内存
世道无情
1.概述在做内存优化时,一般只要处理两点,应该就解决了绝大部分的问题。第一是内存泄露,第二就是图片问题。解决图片问题是实实在在能够看得见的,减少内存的占用。假设有一张图片是600*800,假设占用空间100k。2.容易混淆的概念?2.1:图片内存大小与占用空间大小?1>:图片内存大小:指图片加载到内存中,占用内存的大小;2>:占用空间大小:指在磁盘上占用的空间;2.2:一张图片占多少内存?图片高度
- Glide生命周期监听原理以及简单应用&利用空Fragment代理Activity
cry kid
Android架构师之路glide开发语言android
Glide关于生命周期监听的原理解析以及简单应用文章目录Glide关于生命周期监听的原理解析以及简单应用1.Glide生命周期监听原理1.1从Glide初始化开始分析1.2原理总结2.简单应用2.1应用场景1-主题切换之昼夜模式变化监听2.2应用场景2--SDK打开特定应用或Activity3.总结相信大家都用过Glide,Glide是一个快速高效的图片加载库,Glide提供了简单易用的API,可
- XrecyclerView实现上拉加载和下拉刷新+多条目(MVP获取数据)
✎ℳ๓Eternity✾
进阶
依赖implementation'com.jcodecraeer:xrecyclerview:1.5.9'implementation'com.android.support:recyclerview-v7:28.0.0'图片加载依赖implementation'com.github.bumptech.glide:glide:4.8.0'ActivitypublicclassShoppingAct
- 安卓开发中的Glide库的使用
我要最优解
androidglide
Glide是一个功能强大的Android图片加载库,它支持加载多种类型的图片格式。以下是Glide可以处理的一些常见图片类型:JPEG:支持加载JPEG格式的图片。PNG:支持加载PNG格式的图片,包括具有透明背景的图片。GIF:支持加载GIF动画,并能够播放动画或将其作为静态帧显示。WebP:支持加载Google的WebP格式图片,包括无损和有损压缩的变体。Bitmap:可以直接加载Androi
- Metal 案例04:加载图片
辉辉岁月
本案例的目的在于理解如何加载TGA图片,以及加载PNG/JPG图片加载TGA图片加载TGA图片的效果如图所示整体案例流程图如下所示准备工作在加载图片之前,需要作以下准备工作:UI视图控制器类OC与OC的.h桥接文件CJLImage类创建metal文件创建自定义render渲染循环类UI视图控制器类在viewDidLoad函数中创建MTKView对象、自定义render对象,并设置view的代理为r
- 前端html+js实现懒加载的两种常见方法
JSU_曾是此间年少
javascript前端html
忘记啥原因了,对图片懒加载有点好奇,于是乎查了一下有哪些方法,在这里记录下来使用H5标准内置标签loading参考:vue实现懒加载_vue懒加载-CSDN博客注意事项:需要设置图片的宽高,尽量设置高度大一点,这样效果明显一点。不设置浏览器将不知道实际占位大小,会直接把图像加载过来。代码示例:图片加载.ttt{width:100px;height:500px;display:block;}使用JS
- 游戏引擎phaser.js3的使用之图片资源加载及显示
m0_61177996
游戏引擎
上一篇有说基础的使用,这篇接着说如何把图片正确的加载进去首先在preload里面加载资源,引入你的图片加载进去functionpreload(){this.load.image('sky','assets/sky.png');this.load.image('ground','assets/platform.png');this.load.spritesheet('dude','assets/du
- ios 图片加载内存尺寸_iOS图片内存优化
weixin_39606244
ios图片加载内存尺寸
基于现在iOS11新生成的图片都是HEIF,该图片使用UIImage(named:name)已不在那么优雅,图片大小为1.8m大小的,读进手机内存,直接飙升了45M,这是我们不想看到的结果,一个页面有多个这样子的图的话,恐怕就是灾难了。既然原图不能读入,那么如何可以用更少的内存和CPU来解决呢?这就要先了解该图片的编码了。HEICHEIF带有元数据的HEIF的另一种形式。HEIC文件包含一个或多个
- webpack 打包后,图片加载错误
佩淇呢
webpackVue2webpack前端node.jsjavascriptvue
使用webpack打包后,图片没有加载出来,页面空白,报错图片引用的路径不对解决办法:1.找到config->index.js将assetsPublicPath:'/',改为assetsPublicPath:'./'build:{index:path.resolve(__dirname,'../dist/index.html'),assetsRoot:path.resolve(__dirname,
- vue 2.0+element ui 使用el-upload图片上传
TJJ.yaml
程序员vuevue.jsui前端vue
el-upload标签上传图片有两种方式:1、上传图片到服务器上,在数据库中存一个url;(以后迁环境的时候,必须将指定的文件夹一起迁移,比较繁琐2、将图片转为base64形势存放到数据库中;(较低一点很方便)两者在前端img标签中使用src,都可将图片展示出**下面介绍的是第二种方法**使用el-upload将图片加载成Base64格式,通过form统一上传给后端1、创建通用componentI
- android其他占用存储,Android如何梳理内存占用情况解决OOM问题
大龙说学区
android其他占用存储
不同Android版本,对一张图片的内存处理方式是不一样的,使用不正确会导致OOM的发生,这篇文章带你梳理内存占用情况,选择适合你的图片加载模式,解决OOM问题。一、背景你知道吗一张5.48MB,宽高像素为4896*6528的24位的静态图片,放在Android工程目录下面的res/drawable-[density]/不同文件夹下面,占据的内存是多少?使用Glide加载一张5.48MB,宽高像素
- Java-贪吃蛇游戏
YCY^v^
Java项目笔记贪吃蛇游戏java
视频效果:贪吃蛇视频效果,简单的小项目,Java项目-贪吃蛇注意images的图片是在proxiangmu下的,不可放在模块!!不然图片加载不出来1.准备工作JDK版本:JDK8.0开发工具:IDEA2.设计游戏图纸实现700*900宽度值为700像素,每个格子为25像素,共计有28个格子宽度值为900像素,每个格子为25像素,共计有36个格子3.画出700*900像素窗口编写具体代码如下:pac
- SpringBootWeb学习笔记——12万字大合集
扶摇|
javaj2eespringbootspringbootintellij-idea
0.写在前面注:这套笔记是根据黑马程序员B站2023-3-21的视频学习的成果,其中省略了前端基础部分、Maven部分和数据库基础部分,详情可见目录。注注:目前文章内结尾处多幅图片加载不出来,因为图片还存在本地没被传上来,过段时间再改~所有的Spring项目都基于SpringFrameworkSpringFramework配置繁琐,入门难度大文章目录0.写在前面1.SpringBootWeb入门简
- elementUI中的el-image 加载失败原因和解决方案
夏目友人帐...
vue微信javascripthtml
最近使用elementUI的el-image发现经常会出现加载src失败的情况,问题估计就是el-image的src路径一旦初始化加载失败的话就没有异步刷新:解决办法:1.给:src设置默认值,避免图片加载失败的情况2.加v-if判断:src中的value值是否为空或者:src的key值是否存在,是则加载图片,否则不加载3.vue项目error方法绑定once,为避免同一个失败链接无限触发erro
- 使用 cached_network_image 优化 Flutter 图片加载
岛上码农
在App中会经常遇到需要从后台拉取图片的场景,这一方面会给服务器带来网络带宽消耗,另一方面加载图片的等待过程也会影响用户体验。因此,往往会在App端对图片做缓存机制,以避免同一张图片反复发起请求。在Flutter中,cached_network_image即提供了缓存网络图片功能,同时还提供了丰富的加载过程指示。上一篇我们使用了列表,其中列表中有从网络下载图片。直接使用Flutter自带的Imag
- Flutter 封装Image控件,图片加载失败时加载默认图片
lucasDev
通常我们加载网络图片会使用官方自带的Image控件,例如:Image.network("https://www.gravatar.com/avatar/07e417fe88e9aed744c300d52148bf4a?s=328&d=identicon&r=PG&f=1");一旦加载的URL地址错误,或者网络加载失败都会抛出异常,而且该方法并没有提供失败或者错误回调,这样我们就没有办法在合适的时机
- JavaScript 判断图片加载完毕
歌声缓缓
node.completevarimg=document.getElementById("box")vartimer=setInterval(function(){if(img.complete){clearInterval(timer);alert("加载完毕>>>")}},1000)
- three.js 细一万倍教程 从入门到精通(三)
编程抗氧化
three.jsjavascript开发语言ecmascriptthree.jswebgl3D
目录五、详解PBR材质纹理5.1、详解PBR物理渲染5.2、标准网格材质与光照物理效果5.3、置换贴图与顶点细分设置5.4、设置粗糙度与粗糙度贴图5.5、设置金属度与金属贴图5.6、法线贴图应用5.7、如何获取各种类型纹理贴图5.8、纹理加载进度情况单张图片加载多张图片加载5.9、详解环境贴图5.10、经纬线映射贴图与HDR经纬线映射贴图HDR六、详解灯光与阴影6.1、灯光与阴影的关系与设置6.2
- 使用uBlock Origin将知乎网页版表情显示为纯文字标签
javascripthtml
知乎表情的实现方式:贴图知乎的表情事实上是一系列由方括号包裹的关键字标记的图片,和微信聊天中的表情类似。当我们将鼠标移到表情上时,就可以看到图片的alt信息,即表情的关键字:阻断图片加载看起来,要想实现将知乎表情显示为纯文本标签,我们只需要阻断知乎网页对表情包图片的加载即可,那根据HTML语法,图片的alt属性就会显示在页面上,达到了我们的目的。经过F12开发者工具审查页面发现,这些图片和正文中出
- 异步题
_William_Zhang
前端经常遇到的异步图片加载需要时间document.getElementsByTagName('img')[0].width//宽度为0console.log('done')document.getElementsByTagName('img')[0].onload=function(){console.log(this.width)//宽度不为0console.log('realdone')}c
- Android:Volley框架使用
偶是不器
Androidandroidvolley网络请求学习
3.15Volley框架使用Volley框架主要作为网络请求,图片加载工具。当应用数据量小、网络请求频繁,可以使用Volley框架。框架Github地址:https://github.com/google/volleyVolley框架的简单使用,创建项目Pro_VolleyDemo。将Github上下载Volley框架源代码,volley-master.zip。解压vlley-master.zip
- Android框架思考--工具类设计(Glide、Picasso切换实现)
AnonyPer
Android框架思考--工具类(Glide、Picasso切换)我们在设计一个项目框架的时候,除了选定基本的骨架如MVC、MVP等之外,还有诸如网络库的选择、图片处理库的选择,选定一个适合我们项目的库之外,针对解耦以及可替换方面的考虑,如何接入进我们的项目中也就需要考虑一番了。本文从一个图片库入手,整理一下我对这方面的思考。场景设定项目前期选定glide作为图片加载库,然后再项目中期,领导要求(
- Android webview中图片不显示问题
__素颜__
androidwebview加载的网页中有些图片显示不出来,比如加载网页中穿插的图片。效果图image.png问题分析:androidwebview从Lollipop(5.0)开始webview默认不允许混合模式,https当中不能加载http资源,而开发的时候可能使用的是https的链接,但是链接中的图片可能是http的,所以需要设置开启。//解决图片加载不出来问题if(Build.VERSIO
- iOS面试题:SDWebImage原理
IOS应用
SDWebImage一个为UIImageView提供一个分类来支持远程服务器图片加载的库。功能简介:1、一个添加了web图片加载和缓存管理的UIImageView分类2、一个异步图片下载器3、一个异步的内存加磁盘综合存储图片并且自动处理过期图片4、支持动态gif图5、支持webP格式的图片6、后台图片解压处理7、确保同样的图片url不会下载多次8、确保伪造的图片url不会重复尝试下载9、确保主线程
- 为自己的项目媒体资源添加固定高度
sasaraku.
前端媒体javascript前端
为自己的项目媒体资源添加固定高度未媒体资源添加固定高度,不仅有利于确定懒加载后的切确位置,还可以做骨架屏、loading动画等等,但是因为历史数据中很多没有加高度的媒体资源,所以一直嫌麻烦没有做。直到这个季度有一个自上而下(不可抗力)的push。一个需求需要在懒加载的情况下跳转到底部的一个坐标。一开始我们拟定的方案是中途查询,边查询边修改目标高度,但是这样做无法避免有些很大的图片加载慢的情况,跳转
- Selenium 之订制启动Chrome的选项(Options)
itbigold
使用selenium时,我们可能需要对chrome做一些特殊的设置,以完成我们期望的浏览器行为,比如阻止图片加载,阻止JavaScript执行等动作。这些需要selenium的ChromeOptions来帮助我们完成1、什么是chromeoptionschromeoptions是一个方便控制chrome启动时属性的类。通过selenium的源码,可以看到,chromeoptions主要提供如下的功
- Flutter cached_network_image 图片加载流程分析
QiShare
前言一天测试小姐姐拿着手机过来说,你这里图片下载有问题呀,为什么没有网络(开飞行模式)也弹Toast提示下载成功呀?下意识反应,肯定是Toast提示弹早了,刚点击按钮,还没开始下载就弹了Toast,赶紧拿手机过来操作验证一波。确实没有网络,弹了下载完成提示,去相册检查一下,嗯?图片下载成功了,还有这种操作?赶紧检查一下代码,发现项目中使用的cached_network_image三方库加载的图片,
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持