文档库 最新最全的文档下载
当前位置:文档库 › JAVA ANNOTATION实例

JAVA ANNOTATION实例

JAVA ANNOTATION实例
JAVA ANNOTATION实例

Java Annotation实例:使用Annontaion简化开发

分类:J2SE基础2010-08-1316:002113人阅读评论(0)收藏举报javadaointerfaceobjecthibernatedelete

Part I

我并不是在卖弄自己的英语有多少的了不起,只不过对Annotation这一次的解释真的很懊恼,“注解”和“注释”这两个对Annotation的翻译我听着不爽,所以全文都用Annotation来表示。

Part II

相信Java的开发人员对Annotation这个名词一定是非常的熟悉了,如今许多优秀的开源框架,都会提供了Annotation的支持。如Spring、Hibernate、JUnit4等。但是这又是为什么那么多的程序员都热衷于Annotation的使用呢?我个人的原因是因为他确实的简化了我们的操作,虽然这样做使得代码和配置的分离难以实现。

Part III

下面我们就用一个权限控制的例子来说明一下,如何使用Annotation来简化我们的开发。

预期功能:

1.对于每个用户都设定一个对应的权限。

2.每个Dao的操作都加入对权限的检查。权限不足则抛出安全异常。

思考:

1.Dao层的方法只关心Dao的操作,对于权限的检查则不需要关心。因此我们可以用AOP来实现对权限的检查(在Java中使用动态代理来实现),实现权限检查和Dao操作的解耦。

2.每个用户都要有相应的权限,而且每个用户的操作都是在不同的线程上进行,因为我们必须要提供一个用户的权限上下文(RoleContext)来提供对权限的设置和获取。

3.对于Dao层的实现可以采用面向接口的编码方式,实现各层之间的解耦。由于每个Dao层所对应的实现类只有一个,因此,我们可以把实现类的信息作为元数据写入Dao接口中,所以这里最适合用Annotation来实现。

4.Dao层的方法所需要的权限信息与实现无关,因此这里也可以把权限的信息作为方法的元数据写入,所以这里也十分适合用Annotation来实现。

Part IV

首先我们把项目基本的架子搭建:

RoleContext作为一个提供用户权限上下文的单元存在,使用枚举来实现单例模式,ThreadLocal提供了对当前线程权限数据的访问。

Implment用来指定Dao接口对应的实现类。

Permission用于指定Dao层的方法的可访问的人员的访问权限。

到这里,这个基本的架子就搭建完成了。接下来,我们就要开始使用动态代理、反射以及Annotation来实现对权限的检查。

Part V

下面我们就要详细的解释一下以下的代码:

DaoProxyFactory.newRoleDaoProxy():

1.我们提供一个简单的工厂,用于生产一个代理对象。传入一个需要代理的接口,用于产生实现该接口的代理对象。

2.由于我们的接口上使用Implement这个Annotation来指定这个接口所对应的实现类,所以我们可以获取这个实现类会创建一个实际被代理的对象。

RoleInvocationHandler

1.顾名思义,这个类就是用来做权限控制的,这个类实现了InvocationHandler。

2.因为我们已经在接口上定义了哪些方法对应哪些被允许执行这个方法的权限,因此我们可以通过method.getAnnotation(Permission.class)这个方法来获得

权限的信息。

3.迭代方法的允许权限,并与当前线程用户的权限做比较,如果发现两者相等,说明当前用户的权限与方法执行的权限一致,因此跳出循环,执行outter标签后面的方法,允许用户执行。

4.迭代完成后,当前线程用户的权限没有与方法中定义的权限一致,说明用户无权执行这样的操作,因此跑出安全异常。

Part VI

通过这个例子,我们可以看到,用Annotation来简化我们的开发是如此的简单,世界是如此的美好。很多的程序员都觉得学习Annotation是一种负担,或者说XML可以完全取代Annotation的存在。但是我认为,一个事物的存在,必然有他的价值,没有任何的一个事物是能够完全取代另外一个事物。与其在作无谓的争论,不如花时间去研究如何更好的利用?而且Annotation的队伍这个在不断的壮大,这就是一种最好的证明。

annotation入门_

Java Annotation 入门
摘要: 本文针对 java 初学者或者 annotation 初次使用者全面地说明了 annotation 的使用方法、定义 方式、分类。初学者可以通过以上的说明制作简单的 annotation 程序,但是对于一些高级的 an notation 应用(例如使用自定义 annotation 生成 javabean 映射 xml 文件)还需要进一步的研 究和探讨。涉及到深入 annotation 的内容,作者将在后文《Java Annotation 高级应用》中谈 到。
同时,annotation 运行存在两种方式:运行时、编译时。上文中讨论的都是在运行时的 annota tion 应用,但在编译时的 annotation 应用还没有涉及,
一、为什么使用 Annotation:
在 JAVA 应用中,我们常遇到一些需要使用模版代码。例如,为了编写一个 JAX-RPC web serv ice,我们必须提供一对接口和实现作为模版代码。如果使用 annotation 对远程访问的方法代码 进行修饰的话,这个模版就能够使用工具自动生成。 另外,一些 API 需要使用与程序代码同时维护的附属文件。例如,JavaBeans 需要一个 BeanIn fo Class 与一个 Bean 同时使用/维护,而 EJB 则同样需要一个部署描述符。此时在程序中使用 a nnotation 来维护这些附属文件的信息将十分便利而且减少了错误。
二、Annotation 工作方式:
在 5.0 版之前的 Java 平台已经具有了一些 ad hoc annotation 机制。比如,使用 transient 修 饰符来标识一个成员变量在序列化子系统中应被忽略。而@deprecated 这个 javadoc tag 也是 一个 ad hoc annotation 用来说明一个方法已过时。从 Java5.0 版发布以来,5.0 平台提供了 一个正式的 annotation 功能:允许开发者定义、使用自己的 annoatation 类型。此功能由一个 定义 annotation 类型的语法和一个描述 annotation 声明的语法,读取 annotaion 的 API,一 个使用 annotation 修饰的 class 文件,一个 annotation 处理工具(apt)组成。
1

shiro入门教程

一、介绍: shiro是apache提供的强大而灵活的开源安全框架,它主要用来处理身份认证,授权,企业会话管理和加密。 shiro功能:用户验证、用户执行访问权限控制、在任何环境下使用session API,如cs程序。可以使用多数据源如同时使用oracle、mysql。单点登录(sso)支持。remember me服务。详细介绍还请看官网的使用手册:https://www.wendangku.net/doc/904859063.html,/reference.html 与spring security区别,个人觉得二者的主要区别是: 1、shiro灵活性强,易学易扩展。同时,不仅可以在web中使用,可以工作在任务环境内中。 2、acegi灵活性较差,比较难懂,同时与spring整合性好。 如果对权限要求比较高的项目,个人建议使用shiro,主要原因是可以很容易按业务需求进行扩展。 附件是对与shiro集成的jar整合及源码。 二、shiro与spring集成 shiro默认的配置,主要是加载ini文件进行初始化工作,具体配置,还请看官网的使用手册(https://www.wendangku.net/doc/904859063.html,/web.html)init文件不支持与spring的集成。此处主要是如何与spring及springmvc集成。 1、web.xml中配置shiro过滤器,web.xml中的配置类使用了spring的过滤代理类来完成。 Xml代码 2、在spring中的application.xml文件中添加shiro配置:

Java代码

anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro.web.filter.authc.FormAuthenticatio nFilter authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenti cationFilter logout org.apache.shiro.web.filter.authc.LogoutFilter noSessionCrea tion org.apache.shiro.web.filter.session.NoSessionCreati onFilter perms org.apache.shiro.web.filter.authz.PermissionsAuthor izationFilter port org.apache.shiro.web.filter.authz.PortFilter rest org.apache.shiro.web.filter.authz.HttpMethodPermiss ionFilter roles org.apache.shiro.web.filter.authz.RolesAuthorizatio nFilter ssl org.apache.shiro.web.filter.authz.SslFilter user https://www.wendangku.net/doc/904859063.html,erFilter

JAVA线程池原理333

在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。 线程池工作原理:

线程池为线程生命周期开销问题和资源不足问题提供了解决方案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使应用程序响应更快。而且,通过适当地调整线程池中的线程数目,也就是当请求的数目超过某个阈值时,就强制其它任何新到的请求一直等待,直到获得一个线程来处理为止,从而可以防止资源不足。 线程池的替代方案 线程池远不是服务器应用程序内使用多线程的唯一方法。如同上面所提到的,有时,为每个新任务生成一个新线程是十分明智的。然而,如果任务创建过于频繁而任务的平均处理时间过短,那么为每个任务生成一个新线程将会导致性能问题。 另一个常见的线程模型是为某一类型的任务分配一个后台线程与任务队列。AWT 和 Swing 就使用这个模型,在这个模型中有一个 GUI 事件线程,导致用户界面发生变化的所有工作都必须在该线程中执行。然而,由于只有一个 AWT 线程,因此要在 AWT 线程中执行任务可能要花费相当长时间才能完成,这是不可取的。因此,Swing 应用程序经常需要额外的工作线程,用于运行时间很长的、同 UI 有关的任务。 每个任务对应一个线程方法和单个后台线程(single-background-thread)方法在某些情形下都工作得非常理想。每个任务一个线程方法在只有少量运行时间很长的任务时工作得十分好。而只要调度可预见性不是很重要,则单个后台线程方法就工作得十分好,如低优先级后台任务就是这种情况。然而,大多数服务器应用程序都是面向处理大量的短期任务或子任务,因此往往希望具有一种能够以低开销有效地处理这些任务的机制以及一些资源管理和定时可预见性的措施。线程池提供了这些优点。 工作队列 就线程池的实际实现方式而言,术语“线程池”有些使人误解,因为线程池“明显的”实现在大多数情形下并不一定产生我们希望的结果。术语“线程池”先于Java 平台出现,因此它可能是较少面向对象方法的产物。然而,该术语仍继续广泛应用着。 虽然我们可以轻易地实现一个线程池类,其中客户机类等待一个可用线程、将任务传递给该线程以便执行、然后在任务完成时将线程归还给池,但这种方法却存在几个潜在的负面影响。例如在池为空时,会发生什么呢?试图向池线程传递任务的调用者都会发现池为空,在调用者等待一个可用的池线程时,它的线程将阻塞。我们之所以要使用后台线程的原因之一常常是为了防止正在提交的线程被阻塞。完全堵住调用者,如在线程池的“明显的”实现的情况,可以杜绝我们试图解决的问题的发生。 我们通常想要的是同一组固定的工作线程相结合的工作队列,它使用 wait() 和

RESTEasy入门经典

RESTEasy是JBoss的开源项目之一,是一个RESTful Web Services框架。RESTEasy的开发者Bill Burke同时也是JAX-RS的J2EE标准制定者之一。JAX-RS 是一个JCP制订的新标准,用于规范基于HTTP的RESTful Web Services的API。 我们已经有SOAP了,为什么需要Restful WebServices?用Bill自己的话来说:"如果是为了构建SOA应用,从技术选型的角度来讲,我相信REST比SOAP更具优势。开发人员会意识到使用传统方式有进行SOA架构有多复杂,更不用提使用这些做出来的接口了。这时他们就会发现Restful Web Services的光明之处。" 说了这么多,我们使用RESTEasy做一个项目玩玩看。首先创造一个maven1的web 项目 Java代码 1.mvn archetype:create -DgroupId=org.bluedash \ 2. 3.-DartifactId=try-resteasy -DarchetypeArtifactId=maven-archetype -webapp 准备工作完成后,我们就可以开始写代码了,假设我们要撰写一个处理客户信息的Web Service,它包含两个功能:一是添加用户信息;二是通过用户Id,获取某个用户的信息,而交互的方式是标准的WebService形式,数据交换格式为XML。假设一条用户包含两个属性:Id和用户名。那么我们设计交换的XML数据如下: Java代码 1. 2. 1 3. liweinan 4. 首先要做的就是把上述格式转换成XSD2,网上有在线工具可以帮助我们完成这一工作3,在此不详细展开。使用工具转换后,生成如下xsd文件: Java代码 1. 2. 4.

Java多线程技术及案例

Java多线程技术及案例 进程和线程: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。 线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 多进程是指操作系统能同时运行多个任务(程序)。 多线程是指在同一程序中有多个顺序流在执行。 Java中多线程的多种实现方式 Java中有多种多线程实现方法,主要是继承https://www.wendangku.net/doc/904859063.html,ng.Thread类的方法和 https://www.wendangku.net/doc/904859063.html,ng.Runnable接口的方法。 继承Thread类 Thread是https://www.wendangku.net/doc/904859063.html,ng包中的一个类,从这个类中实例化的对象代表线程,启动一个新线程需要建立一个Thread实例。 使用Thread类启动新的线程的步骤如下: 1.实例化Thread对象 2.调用start()方法启动线程 构造方法:

public Thread(String threadName); public Thread(); 例程: publicclass Thread1extends Thread{//定义一个类继承Thread privateint count=1000; publicvoid run(){//重写run方法 while(true){ System.out.print(count+" "); if(--count==0){ return; } } } publicstaticvoid main(String[] args){ Thread1 th1=new Thread1();//实例化继承了Thread的类 Thread1 th2=new Thread1(); th1.start();//调用start()方法, th2.start(); for(int i=0;i<1000;i++){ System.out.print("A "); } }

ERDAS IMAGINE快速入门

实验一ERDAS IMAGINE快速入门 一、背景知识 ERDAS IMAGINE是美国ERDAS公司开发的遥感图像处理系统,后来被Leica公司合并。它以其先进的图像处理技术,友好、灵活的用户界面和操作方式,面向广阔应用领域的产品模块,服务于不同层次用户的模型开发工具以及高度的RS/GIS(遥感图像处理和地理信息系统)集成功能,为遥感及相关应用领域的用户提供了内容丰富而功能强大的图像处理工具,代表了遥感图像处理系统未来的发展趋势。 ERDAS IMAGINE是以模块化的方式提供给用户的,可使用户根据自己的应用要求、资金情况合理地选择不同功能模块及其不同组合,对系统进行剪裁,充分利用软硬件资源,并最大限度地满足用户的专业应用要求,目前的最高版本为9.1。ERDAS IMAGINE面向不同需求的用户,对于系统的扩展功能采用开放的体系结构以IMAGINE Essentials、IMAGINE Advantage、IMAGINE Professional的形式为用户提供了低、中、高三档产品架构,并有丰富的功能扩展模块供用户选择,使产品模块的组合具有极大的灵活性。 ?IMAGINE Essentials级:是一个花费极少的,包括有制图和可视化核心功能的影像工具软件。该级功能的重点在于遥感图像的输入、输出与显示;图像库的 建立与查询管理;专题制图;简单几何纠正与非监督分类等。 ?IMAGINE Advantage级:是建立在IMAGINE Essential级基础之上的,增加了更丰富的图像光栅GIS和单片航片正射校正等强大功能的软件。IMAGINE Advantag提供了灵活可靠的用于光栅分析,正射校正,地形编辑及先进的影像 镶嵌工具。简而言之,IMAGINE Advantage是一个完整的图像地理信息系统 (Imaging GIS)。 ?IMAGINE Professional级:是面向从事复杂分析,需要最新和最全面处理工具,

ppt演示文稿配色方案有哪几种

ppt演示文稿配色方案有哪几种 PPT配色方案是指所有幻灯片、单个幻灯片、备注页或讲义的多种均衡颜色组合。通俗地说,就是演示文稿中几种主要对象分别要采用什么颜色。以下是为您带来的关于PPT演示文稿配色方案,希望对您有所帮助。 PPT演示文稿配色方案 配色方案可以从预定方案中选择,也可以自己定义。如果当前文稿应用了设计模板,那么用户可以从设计模板所包含的预定配色方案中选择一种。当用于整个文稿时,以后新插入的幻灯片将会自动应用所选定的配色方案。 方法: (1)单击“视图”→“任务窗格”,把“任务窗格”前面勾上。 (2)用鼠标右键单击幻灯片,在右键菜单中选择“幻灯片设计”。 (3)单击“幻灯片设计-配色方案”菜单命令。 (4)这时打开了“幻灯片设计-配色方案”任务窗格。 (5)用鼠标指向“应用配色方案”列表框中的任何一种配色方案图标,则图标旁显示一个下拉箭头,单击此箭头,出现下拉列表。 (6)如果想使一整套演示文稿全部应用此配色方案,则单击“应

用于所有幻灯片”按钮;如果只想使当前幻灯片应用此配色方案,则单击“应用于选定幻灯片”的按钮。则演示文稿应用此配色方案。 不同色调的感觉色彩的调子能激起人们的心理活动并引起快感与产生美感。 红色调它给人热情、欢乐之感。人们用它来表现火热、生命、活力与危险等信息。 蓝色调它给人冷静、宽广之感。人们用它来表现未来、高科技、思维等信息。 黄色调它给人温暖、轻快之感。人们用来表现光明、希望、轻快、注意等信息。 绿色调它给人清新、平和之感。人们用来表现生长、生命、安全等信息。 橙色调它给人兴奋、成熟之感。是很受人们欢迎的颜色。 紫色调它给人幽雅、高贵之感。人们用来表现悠久、深奥、理智、高贵、冷漠等信息。 黑色调它给人高贵、时尚之感。人们用来表示重量、坚硬、男性、工业等信息。 白色调它给人以纯洁、高尚之感。人们用来表示洁净、寒冷等信息。

手把手教你做一个java线程池小例子

废话不多说开整 我用的是eclipse(这应该没多大影响) 建一个工程java工程和web工程都行然后建一个包建一个类带main方法 首先贴出来的是内部类 //继承了runnable接口 class MyTask implements Runnable { private int taskNum; public MyTask(int num) { this.taskNum = num; } @Override public void run() { System.out.println("正在执行task "+taskNum); try { //写业务 Thread.currentThread().sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("task "+taskNum+"执行完毕!"); } } 接下来就是这个类 public class testOne { public static void main(String[] args) { ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 7, 10, https://www.wendangku.net/doc/904859063.html,LISECONDS, new ArrayBlockingQueue(2),new ThreadPoolExecutor.DiscardOldestPolicy() );

for(int i=0;i<15;i++){ MyTask myTask = new MyTask(i); executor.execute(myTask); System.out.println("线程池中线程数目: "+executor.getPoolSize()+"队列等待执行的任务数目:"+ executor.getQueue().size()+"已经执行完别的任务数目: "+executor.getCompletedTaskCount()); } executor.shutdown(); } } 接下来在说明一下ThreadPoolExecutor的参数设置ThreadPoolExecutor(int corePoolSize,//线程池维护线程的最少数量 int maximumPoolSize,//线程池维护线程的最大数量 long keepAliveTime,//线程池维护线程所允许的空闲时间 TimeUnit unit, 线程池维护线程所允许的空闲时间单位 BlockingQueue workQueue,线程池所使用的缓存队列 RejectedExecutionHandler handler线程池对拒绝任务的处理策略 ) handler有四个选择: ThreadPoolExecutor.AbortPolicy() 抛出java.util.concurrent.RejectedExecutionException异常 ThreadPoolExecutor.CallerRunsPolicy() 重试添加当前的任务,他会自动重复调用execute()方法 ThreadPoolExecutor.DiscardOldestPolicy() 抛弃旧的任务 ThreadPoolExecutor.DiscardPolicy() 抛弃当前的任务 上面是一个例子接下来再来一个例子

计算机控制系统实例

第11 章计算机控制系统实例 本章的教学目的与要求 掌握各种过程通道的结构、原理、设计及使用方法。 授课主要内容 硫化机计算机群控系统 主要外语词汇 Sulfurate Machine: 硫化机重点、难点及对学生的要求说明:带“ *** ”表示要掌握的重点内容,带“ ** ”表示要求理解的内容,带“ *”表示要求了解的内容,带“☆”表示难点内容,无任何符号的表示要求自学的内容 硫化机计算机群控系统的软硬件设计*** ☆ 辅助教学情况 多媒体教学课件( POWERPOINT ) 复习思考题 硫化机计算机群控系统的软硬件设计 参考资料刘川来,胡乃平,计算机控制技术,青岛科技大学讲义 硫化机计算机群控系统 内胎硫化是橡胶厂内胎生产的最后一个环节,硫化效果将直接影响内胎的产品质量和使用寿命。目前国内大部分生产厂家都是使用延时继电器来控制硫化时间,由于硫化中所需 的蒸汽压力和温度经常有较大的波动,单纯按时间计算可能会产生过硫或欠硫现象,直接影响了内胎的质量。 因此,设计一种利用先进计算机控制技术的硫化群控及管理系统,不仅能提高企业的自动化水平,也能降低硫化机控制装置的维护成本和硫化操作人员的劳动强度,提高硫化过程中工艺参数的显示和控制精度,同时也避免了个别硫化操作人员为提高产量而出现的“偷时”现象(即操作人员缩短硫化时间,未硫化完毕就开模) ,使内胎的产品质量得到保证。 1. 系统总体方案 内胎硫化过程共包括四个阶段: 合模、硫化、泄压、开模。由于所有硫化机的控制方式相同,所以特别适合群控。在自动模式下,当硫化操作人员装胎合模后,由控制系统根据温度计算内胎的等效硫化时间并控制泄压阀、开模电机的动作。为克服温度波动的影响,经过大量实验,选用阿累尼乌斯(Arrhenius) 经验公式来计算等效硫化时间。 某橡胶制品有限公司硫化车间共有内胎硫化机96 台,为便于整个生产过程的控制和管理拟采用计算机群控及管理系统。根据企业的现场情况,借鉴DCS (Distributed Control System ,集散控制系统) 系统结构,使用PLC 作为直接控制级,完成现场的控制功能; 使用工业控制计算机作为管理和监视级。系统总体方案见图11.8。 PLC 通过温度采集模块采集现场的96 台硫化机温度信号,进行等效计算后,按设定 型号的参数计算硫化机的硫化时间并对泄压阀、开模电机动作进行控制,完成内胎的整个硫

二次开发入门MapBasic--MapInfo教程

MapInfo教程--二次开发入门摘要:MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。 一、利用MapBasic开发 MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。 二、利用OLE自动化开发 1. 建立Mapinfo自动化对象 基于OLE自动化的开发就是编程人员通过标准化编程工具如VC、VB、Delphi、PB等建立自动化控制器,然后通过传送类似MapBasic语言的宏命令对Mapinfo进行操作。实际上是将Mapinfo用作进程外服务器,它在后台输出OLE自动化对象,供控制器调用它的属性和方法。 OLE自动化开发的首要一步就是建立Mapinfo自动化对象,以Delphi为例(后面都是如此),你可设定一个Variant类型的全程变量代表OLE自动化对象,假设该变量名为olemapinfo,那么有: oleMapinfo := CreateOleObject('Mapinfo.Application') 一旦OLE自动化对象建立,也就是后台Mapinfo成功启动,你就可以使用该对象的Do方法向Mapinfo发送命令,如: oleMapinfo.Do('Set Next Document Parent' + WinHand + 'Style 1') 这一命令使Mapinfo窗口成为应用程序的子窗口,WinHand是地图窗口句柄,style 1 是没有边框的窗口类型。你还可以使用自动化对象的Eval方法返回MapBasic表达式的值,如下面语句返回当前所打开的表数: TablesNum:=olemapinfo.eval('NumTables()') 你也可以直接调用Mapinfo菜单或按钮命令对地图窗口进行操作,如地图放大显示:oleMapinfo.RunMenuCommand(1705) 2. 建立客户自动化对象触发CallBack 基于OLE自动化开发的难点在于所谓的CallBack,Mapinfo服务器对客户程序地图窗口的反应叫CallBack,假如你在地图窗口中移动地图目标,Mapinfo能返回信息告诉你地图目标当前的坐标位置,这就是CallBack功能。如果你想定制自己的地图操作工具或菜单命令,你必须依靠CallBack。但是想捕获CallBack信息,你的客户程序必须具备接收CallBack信息的能力,为此需要在客户程序中定义自己的OLE自动化对象,如: //定义界面 IMyCallback = interface(IDispatch) ['{2F4E1FA1-6BC7-11D4-9632-913682D1E638}'] function WindowContentsChanged(var WindowID: Integer):SCODE;safecall; function SetStatusText(var StatusText: WideString): SCODE; safecall; //定义界面实现

java深入理解线程池

深入研究线程池 一.什么是线程池? 线程池就是以一个或多个线程[循环执行]多个应用逻辑的线程集合. 注意这里用了线程集合的概念是我生造的,目的是为了区分执行一批应用逻辑的多个线程和 线程组的区别.关于线程组的概念请参阅基础部分. 一般而言,线程池有以下几个部分: 1.完成主要任务的一个或多个线程. 2.用于调度管理的管理线程. 3.要求执行的任务队列. 那么如果一个线程循环执行一段代码是否是线程池? 如果极端而言,应该算,但实际上循环代码应该算上一个逻辑单元.我们说最最弱化的线程池 应该是循环执行多个逻辑单元.也就是有一批要执行的任务,这些任务被独立为多个不同的执行单元.比如: int x = 0; while(true){ x ++; } 这就不能说循环中执行多个逻辑单元,因为它只是简单地对循环外部的初始变量执行++操作. 而如果已经有一个队列 ArrayList al = new ArrayList(); for(int i=0;i<10000;i++){ al.add(new AClass()); } 然后在一个线程中执行: while(al.size() != 0){ AClass a = (AClass)al.remove(0); a.businessMethod(); } 我们说这个线程就是循环执行多个逻辑单元.可以说这个线程是弱化的线程池.我们习惯上把这些相对独立的逻辑单元称为任务. 二.为什么要创建线程池? 线程池属于对象池.所有对象池都具有一个非常重要的共性,就是为了最大程度复用对象.那么 线程池的最重要的特征也就是最大程度利用线程. 从编程模型模型上说讲,在处理多任务时,每个任务一个线程是非常好的模型.如果确实可以这么做我们将可以使用编程模型更清楚,更优化.但是在实际应用中,每个任务一个线程会使用系统限入"过度切换"和"过度开销"的泥潭. 打个比方,如果可能,生活中每个人一辆房车,上面有休息,娱乐,餐饮等生活措施.而且道路交道永远不堵车,那是多么美好的梦中王国啊.可是残酷的现实告诉我们,那是不可能的.不仅每个人一辆车需要无数多的社会资源,而且地球上所能容纳的车辆总数是有限制的. 首先,创建线程本身需要额外(相对于执行任务而必须的资源)的开销.

Maya从入门到精通经典讲解

Maya绝技83式从入门到精通 第1招、自制MAY A启动界面 在安装目录下的BIN文件夹中的MayaRes.dll文件,用Resource Hacker打开。在软件的目录树中找到“位图”下MAY ASTARTUPIMAGE.XPM并保存。图片分辨率要一致,然后选择替换位图,把自己修改的图片替换保存,即可。 第2招、控制热盒的显示 MAYA中的热盒可以按着空格键不放,就可以显示出来。并且按下鼠标左键选择Hotbox Style 中的Zones Only可以不让热盒弹出。如果选择Center Zone Only可以连AW的字样也不会出现。完全恢复的快捷键是ALT+M。 第3招、创建多彩的MAY A界面 MAYA默认界面色彩是灰色的,如果你想尝试一下其他的色彩界面,可以自行修改。方法是选择Windows/Settings/Preferences/Colors... 第4招、创建自己的工具架 把自己最常用的工具放置在工具架的方法是,按下Ctrl+Shift的同时,点选命令,该命令就可以添加到当前的工具架上了。 第5招、自定义工具架图标 我们将一行MEL添加到工具架上的时候,图标出现MEL字样,不容易区分,此时可以选择Windows/Settings/Preferences/Shelves选择新添加的命令,单击Change Image按钮,选择要替换的图片,选择Save All Shelves按钮,就替换成功。 第6招、自定义标记菜单 执行Windows/Settings/Preferences/Marking Menus设置相关参数,然后在Settings下符合自己操作习惯来设置参数,最后单击Save即可。 第7招、自定义物体属性 如果想添加一个属性,并且把其他数据进行设置表达式或者驱动关键帧,就必须在属性对话框中点击Attributes/add... 第8招、选择并且拖动 打开Windows/Settings/Preferences在Selection中,勾选Click Drag Select然后点击Save这样就可以了。 第9招、界面元素隐藏或显示 执行Display/UI Elements下的Show UI Elements或者Hide UI Elements可以对于全界面下元素显示或者隐藏。 第10招、改变操纵器的显示大小与粗细 打开Windows/Settings/Preferences在Manipulators中修改Line Size可以改变操纵器的显示粗细,按下小键盘的“+”“-”可以改变操纵器的显示大小。

史上最全配色方案设计专用

C40 MD CBO MD Y75K3 Y3OKD Y5K0 Y55 KO Y3O KO CO Mb ¥30 KO CC co ica CO M30 Y3C KD Y1DKD YD KB CW KGO ¥0 KO 稳定情绪的冷色系配色: 温暖雅致的暖色系配色: C70 CEO CM C30 Clio C50 C100 C60 CM C40 C51 C70 C20 CO CIO C30 C40 C$0 C20 W 1440 M)〕 M70 WO M80 WO M1Q UD [■lu WO M40 M30 M30 M 100 M LOO M40 ¥70 Y70 Y40 ¥80 Y30 YO YO YO YU ¥20 Y10 YE Y100 YLOO Y30 Y60 Y100Y100Y100Y100 KB KD 530 KO K10 KIO K10 KIO 期 KO JOO KD KO KO KO KO KO KO KO KO C50 CIO GEO CTO MIO MO MO M30 YC Y20 YLO YO KO KO KO KO C20 C20 C40 M40 M30 M100 M10D Y1U0 YIM Y60 Y20 KEO KSO K 罚 CM CSO C30 C30 M30 M30 MED M90 YIOOYIOOYIOOYIOQ KO KO KO KO 呦 4O&O O ? M TK 30 知刃 Q C3M Y K 305050o O 8 ? O CMYK D1O5OQ CO M Y K OM2O0 CMYK 90060o 0 M Y K ow M M Y K C5MO 刃 Ko 常沪 COO COO CSO C30 MIO M90 MO Mluij Y1UQY100Y1WYO KO' KO KO KO 晶亮的透明感、丝丝凉的清凉感以及冰爽的感觉: 体现冷色 调、都市感的配色,营造温和、安逸的气氛: 暗色调中展现高雅的都市成人氛围: 儿童浅色配色,尽可能用多种较高明度和纯度的色彩: COW CO Miso CO ICO CO MSO CIO ICO Y30KD ¥30 KO Y10 KO YO NO ¥0 KO 排除甜蜜感的成人感配色: 演绎华丽感和平衡感的彩虹色: 利用色相浓淡变化实现多色配色,将多种色彩统一在稳定的色调中,色彩不会显得突兀: 营造健康新概念的维生素色: 体现人工化学效果的配色,霓虹灯广告牌和荧光涂料等体现的人工化学效果配色: Cjq MIO C40 MIO C50 A£lO CCO M3O C9O M60 ¥0 KD ¥0 KD W KD ¥0 KD VO KO C50 M?O ¥1? KO E15 MID ¥5 KO C20 MIO Y7 KC C3C MI5 CSS M15 ¥10 KD YWEO CIO M6O 口5 M50 C401XS5 C35 BffZO C?0 M95 KD YS5 K1O Y3O K5 ¥40 K5 K5 C?5 UL5 匚20 M20 C20 1^0 C^O M100 C20 M100 C40 M1(M YIM K50 Y)0C K50 Y100 KSO ¥40 K5C ¥20 K50 ceo moo cioc c LOO wo doo wo ceo mo Y2OK50 Y2OK5O Y20 KM Y60 K50 Y100 K50 CIO kQC C30 &£1M) C^O M100 050 MlOO C100 M20 CXl M20 Vloa XO Y100 KO Y30 KE Y^O ED VO KD Y100 K?

WGCNA新手入门笔记2(含代码和数据)

WGCNA新手入门笔记2(含代码和数据) 上次我们介绍了WGCNA的入门(WGCNA新手入门笔记(含代码和数据)),大家在安装WGCNA包的时候,可能会遇到GO.db这个包安装不了的问题。主要问题应该是出在电脑的防火墙,安装时请关闭防火墙。 如果还有问题,请先单独安装AnnotationDbi这个包,biocLite("AnnotationDbi") 再安装GO.db,并尝试从本地文件安装该包。 如果还有问题,请使用管理员身份运行R语言,尝试上述步骤。 另外如果大家问题解决了请在留言处留个言,告知大家是在哪一步解决了问题,谢谢!因为本人没有进行单因素实验,不知道到底是哪个因素改变了实验结果。。。 今天给大家过一遍代码。网盘中有代码和数据。 链接:https://www.wendangku.net/doc/904859063.html,/s/1bpvu9Dt 密码:w7g4 ##导入数据## library(WGCNA)options(stringsAsFactors = FALSE)enableWGCNAThreads()

enableWGCNAThreads()是指允许R语言程序最大线程运行,像我这电脑是4核CPU的,那么就能用上3核: 当然如果当前电脑没别的事,也可以满负荷运作 samples=read.csv( 'Sam_info.txt',sep = 't',https://www.wendangku.net/doc/904859063.html,s = 1)expro=read.csv( 'ExpData.txt',sep = 't',https://www.wendangku.net/doc/904859063.html,s = 1)dim(expro) 这部分代码是为了让R语言读取外部数据。当然了在读取数据之前首先改变一下工作目录,这一点在周二的文章中提过了。R语言读取外部数据的方式常用的有read.table和read.csv,这里用的是read.csv,想要查看某一函数的具体参数,可以用?函数名查看,比如: 大家可以注意到read.table和read.csv中header参数的默认值是不同的,header=true表示第一行是标题,第二行才是数据,header=false则表示第一行就是数据,没有标题。##筛选方差前25%的基因## m.vars=apply(expro, 1,var)expro.upper=expro[which(m.vars>quantile(m.vars, probs = seq( 0, 1, 0.25))[ 4]),]dim(expro.upper)datExpr= as.data.frame(t(expro.upper));nGenes = ncol(datExpr)nSamples = nrow(datExpr) 这一步是为了减少运算量,因为一个测序数据可能会有好几

色彩配色方案

配色方案 没有进行美术专业训练,在配色时只能凭感觉,学习过配色理论后,我们就可以合理使用色彩,给人以美的享受。配色原理主要根据色相和色调进行了一系列的分类。最基本的有5种配色方法。 基本色相的配色关系 ◆同一色相配色:采用不同色调的同一色相; ◆类似色相配色:采用两侧相近颜色; 注:这两种配色总体上会给人一种安静整齐的感觉。如在鲜红色旁边使用了 暗红色时,会给人一种较协整齐的感觉。 ◆补色配色:完全相反的颜色;如红色对面的青绿色是红色的补色。 ◆相反色配色:是指搭配使用色相环中相距较远颜色的配色方案,蓝紫色到黄绿 色范围之间的颜色为红色的相反色相。 注:这种配色方法更具有变化感。 基于色调的配色关系:

◆同一色调配色:是指选择同一色调不同色相颜色的配色方案;例如使用鲜红 色与鲜黄色的配色方案 ◆类似色调配色:在色调表中比较靠近基准色调。如上图 ◆相反色调配色:是指使用与基准色调相反色调的配色方案 五种配色方法: 一、基于色相进行配色的具体关系 色相配色的特点:可以获得稳定的效果 类似色相配色:冷静而稳重的感觉 补色与相反色相配色:强烈而鲜明的效果 A.相反色相、类似色调配色 这种配色方案是采用相反色相类似色调的配色方案。虽然使用了相反的色相,便通过使用类似的色调可以得到特殊配色效果。而影响这种配色方案效果的最重要的因素在于使用的色调,当使用了对比度较高的鲜明色调,所使用色相效果将被突出从而得到较强的动态效果;当使用了对比度较低的黑暗色调时,即使使用了多种不同的色相也能够得到较安静沉重的效果,这是因为使用暗色调时色相的差异也会变得不太明显。

背景中的黄色与人物中的蓝色构成了相反色的配色,但通过使用类似色调造出了安静平和的氛围。 B.相反色相、相反色调配色 利用相反色相和相反色调的配色方案,国为采用了相反的色相和色调,所以得到的效果具有强烈的变化感和逆向性。如果说类似色调配色方案能够凝造整齐的氛围,那么相反色调配色方案凝造出的就是一种强弱分明的氛围。影响这种配色方案效果的最大的因素在于所选颜色在整体画面中所占的比例。 在图中,高对比度的红色与背景中的暗绿色形成鲜明的对比。相反色相、相反色调配色方案通常用于突出显示较暗背景中的某一个较亮对象

自动控制在生活中的应用举例

模块一多泵切换恒压供水系统控制方案 一、预备知识 1、变频器恒压供水系统 在生产、生活的实际中,用户用水的多少是经常变动的,因此供水不足或供水过剩的情况时有发生。而用水和供水之间的不平衡集中反映在供水的压力上,即用水多而供水少,则压力低;用水少而供水多,则压力大。保持供水压力的恒定,可使供水和用水之间保持平衡,即用水多时供水也多,用水少时供水也少,从而提高了供水的质量。 图1 住宅区恒压供水示意图 恒压供水是指在供水网中用水量发生变化时,出水口压力保持不变的供水方式。供水网系出口压力值是根据用户需求确定的。传随着变频调速技术的日益成熟和广泛的应用,利用内部包含用PID调节器、单片机、PLC 等器件有机结合的供水专用变频器构成控制系统,调节水泵输出流量,以实现恒压供水。变频器恒压供水,如上图1所示。 利用变频器内部的PID调节功能,如图2,目标信号SP是一个与压力的控制目标相对应的值,通常用百分数表示。

图2变频器PID调节功能 2、“一拖多”恒压供水 实际应用中,单台水泵供水一般不能满足用水要求,常用多泵单变频恒压供水。即是“一拖多”控制方案,这种多台泵调速的方式,系统通过计算判定目前是否已达到设定压力,决定是否增加(投入)或减少(撤出)水泵。 由于“一拖多”变频恒压供水系统需要涉及压力PID控制、工频和变频等功能,所以需要由专门的程序控制来实现。目前的“一拖多”变频供水系统主要由3种方式:1)微机控制变频恒压供水系统 此系统以多台水泵并联供水,系统设定一个恒定的压力值,当用水量变化而产生管网压力的变化时,通过远传压力表,将管网压力反馈给PI控制器,通过PI控制器调整变频器的输出频率,调节泵的转速以保持恒压供水。微机控制变频恒压供水系统如图3所示。 图3 微机控制变频恒压供水系统

色彩配色方案

色彩配色方案 用色彩在场景中营造和谐或紧张的气氛,或将重心集中到关键影像的主题上,都能产生惊人的效果。今天我们要讲的是 5种常见的配色方案,能帮助大家理解加深对电影色彩配色的理解。 色彩产生的影响 色彩经常在我们没有觉察到的情况下,影响我们的心理和生理。掌握色彩的知识,我们就能巧妙的将色彩加以运用。用色彩在场景中营造和谐或紧张的气氛,或将重心集中到关键影像的主题上,都能产生惊人的效果。 红色给人的感觉是紧张,而蓝色会让人感觉到平和冷静。一些颜色明显是和特定的地点有关联,还有一些颜色给人以时间感。 色轮 我们先来看一些基础的后期应用。这些都和色轮有关。接触过3路色彩校正的人应该对这些不陌生。 在控制色彩方面,色轮是很基本的工具,是色彩理论在定义其他东西的标准。 简化形式的色轮由RYB上12种色彩组成。RYB模式中,原色是红黄蓝。二级色是绿橙紫,这三种色彩可以用两种原色混合得到。而六种三级色可以通过原色和二级色的混合得到。 我们先感受一下。上面的图中,右边的色彩是暖色,左边的色彩是冷色。暖色明亮有活力,冷色给人的感觉是冷静平静。 1. 互补/对比色 色轮上,两种颜色位置相对,形成互补色。这是目前应用最广泛的色彩方案。常见的例子是橙色和蓝色或青色。这对颜 色一个是暖色一个是冷色,形成了强烈的对比效果。其饱和度需要调整,而视觉上互补色是很自然很舒服的。

橙色和蓝色常和冲突动作联系起来,无论是从内部还是外部。一个人物内心的矛盾冲突能由外部环境的色彩反映出来。 LIGHT MEDIUM CASK GENERAL SFECTR'JM UGHT MEDIUM CASK GENERAL SPECTRJM 这是一个典型的红色和绿色互补色。

相关文档
相关文档 最新文档