当前位置: 首页 > news >正文

网站模板尺寸wordpress手机主题漂亮

网站模板尺寸,wordpress手机主题漂亮,wordpress怎样修改备案号,互联网行业有哪些公司spring 面向接口编程介绍 在理想的面向对象系统中#xff0c;我们希望将每个对象设计为执行一项特定任务。 但是#xff0c;除了执行其主要任务之外#xff0c;对象还执行被动任务#xff0c;例如日志记录#xff0c;事务#xff0c;安全性#xff0c;缓存等。这些被动活… spring 面向接口编程 介绍 在理想的面向对象系统中我们希望将每个对象设计为执行一项特定任务。 但是除了执行其主要任务之外对象还执行被动任务例如日志记录事务安全性缓存等。这些被动活动是必需的但不是业务逻辑的一部分被称为“ 跨切问题 ”。 横切关注点系统中常用的功能 将横切关注点与业务逻辑分开可以是编写精心设计的解耦代码的重要一步。 让我们思考一下解决交叉切割问题的方法 遗产 继承立即在脑海中弹出我们可以继承通用功能并在对象中使用它。 但是继承通用功能需要我们设计一个基类。 如果我们在多个地方重用该类那么以后修改类可能会很困难。 继承以后很难修改非弹性代码 代表团 委派是处理交叉切割问题的更好方法。 记住组成要重于继承授权和组成要共同关注。 但是然后我们将不得不在许多地方进行调用以委托对象从而使其变得繁琐。 委派繁琐 面向方面的编程 这是否意味着我们要喝汤了。 相反这给我们留下了第三种也是最好的方法即面向方面的编程。 AOP避免了继承的脆弱性和委派的繁琐性。 AOP在相互交叉的关注点领域大放异彩 什么是AOP AOP允许我们将横切关注点模块化到称为Aspects的特殊对象中从而创建更清晰和分离的代码。 有了适当的方面对象就不必担心执行被动横切问题因为AOP会处理所有这些问题。 与AOP有关的术语 像任何成功的技术一样AOP也具有自己的术语和术语集。 让我们先看一下那些然后再进行更深入的了解AOP的工作。 关注点 -这些是基于其功能模块化的系统的一部分。 有两种类型的关注点。 1.核心关注点2.跨领域关注点。 核心关注点与系统的业务逻辑有关即系统执行的主动任务例如生成工资单获取员工记录进行银行转账等。跨部门关注点是执行主动任务例如日志记录缓存所需的被动任务等等 连接点–连接点是执行流程中的一个点其中发生了一些动作并且有可能应用Aspect跨领域关注点。 连接点可以是被调用的方法抛出异常或对象状态改变。 建议 – AOP中的每个方面都有其目的即必须完成的工作。 该作业必须在连接点处应用。 方面的工作或目的称为建议。 除了定义方面的工作之外建议还定义方面执行工作的时间。 应该在核心关注事项完成执行之前或之后应用作业还是在两者之前和之后应用作业。 切入点 –系统中可以有许多连接点但并非所有方面都由Aspect建议。 Aspect从Pointcut获得帮助以选择要在其中编织建议的Joinpoint。 方面 –建议和切入点定义了方面。 正如我们看到的建议定义了方面的工作以及何时执行。 虽然Pointcut定义了方面编织建议的位置。 因此工作的内容时间和地点定义了方面。 目标 –目标是被建议的对象。 核心关注。 在AOP的帮助下该对象可以自由地执行其主要任务而不必担心交叉问题。 代理 –将建议应用于目标对象时将创建一个代理对象。 AOP容器创建并管理对象的生命周期程序员无需担心它们。 编织 –编织是将Advice或Aspect应用于目标对象以创建代理对象的过程。 编织可以在编译时或类加载时或在运行时完成。 通常Spring AOP在运行时将方面编织到目标对象中。 那是要消化的一长串术语。 在继续之前请花点时间了解它们。 咨询类型 在沉迷于示例之前的最后一篇文章是了解建议的类型。 主要有4种建议。 建议之前 –在Joinpoint开始执行之前应用建议之前。 通过实现org.springframework.aop.MethodBeforeAdvice接口来创建BeforeAdvice。 要实现的方法是公共无效方法m对象args []对象目标抛出Throwable 返回建议之后–在Joinpoint完成执行之后应用建议之后。 AfterReturningAdvice是通过实现org.springframework.aop.AfterReturningAdvice接口创建的。 ThingableReturningMethod mObject args []Object target抛出之后 要实现的方法是公共无效 引发建议 –当Joinpoint在执行过程中引发异常时将应用引发建议。 围绕建议 –此建议围绕Joinpoint执行并在Joinpoint执行之前和之后执行。 这甚至可以用来控制Joinpoint的调用。 例 我们将尝试在SpringAOP的帮助下开发一个简单的缓存。 缓存具有三个主要的核心问题。 核心关注点 将对象保存在缓存中。 从缓存返回对象。 从缓存中删除对象。 现在除了这些核心问题之外缓存框架还有其他被动任务。 这些被动任务构成了交叉问题。 横切关注点 达到其大小限制时重新调整缓存大小。 LRU实施。 锁定对象以防止在读取对象时将其删除。 锁定高速缓存以防止在调整大小时阻止和读取/写入/删除高速缓存。 编码所有这些横切关注点可能是耗时且乏味的因此让我们简化示例当缓存已满时我们将仅实现调整大小逻辑。 因此在完成示例之后我们将拥有一个可以放置获取和删除对象的缓存。 例如缓存的最大大小已设置为10。 一旦高速缓存存储了10个对象则对高速缓存的任何添加都将导致通过删除第一个对象来删除重新调整大小高速缓存。 调整大小的操作由使用Spring AOP创建的Aspect控制。 这是示例中要遵循的步骤 可以从SVN此处下载示例代码 https : //www.assembla.com/code/weblog4j/subversion/nodes/31/SpringDemos/trunk 依赖关系 – AOP是spring的核心功能因此要使Spring AOP正常运行我们需要的是核心spring jar因此在您的POM中添加以下依赖关系。 dependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version/dependency 核心缓存对象。 package com.aranin.spring.aop;import java.util.Date; import java.util.LinkedHashMap; import java.util.Map;public class MyCache {private LinkedHashMapString, Object cacheMap new LinkedHashMapString, Object();private LinkedHashMapString, Date timeStampMap new LinkedHashMapString, Date();/*** defines the max size of hashmap*/private long maxsize 10; //should come from properties file or some configuration/*** how long the object should be stored before it is evicted from cache*/private long objectLifeTime 10000;private boolean lock false;public LinkedHashMapString, Object getCacheMap() {return cacheMap;}public void setCacheMap(LinkedHashMapString, Object cacheMap) {this.cacheMap cacheMap;}public LinkedHashMapString, Date getTimeStampMap() {return timeStampMap;}public void setTimeStampMap(LinkedHashMapString, Date timeStampMap) {this.timeStampMap timeStampMap;}public long getMaxsize() {return maxsize;}public void setMaxsize(long maxsize) {this.maxsize maxsize;}public long getObjectLifeTime() {return objectLifeTime;}public void setObjectLifeTime(long objectLifeTime) {this.objectLifeTime objectLifeTime;}public boolean isLock() {return lock;}public void setLock(boolean lock) {this.lock lock;}/*** This method is used to retrive the object from cache* param key* return*/public Object get(String key){return this.getCacheMap().get(key);}/*** this method is used for putting an object in cache* param key* param object*/public void put(String key, Object object){//get the curr dateDate date new Date(System.currentTimeMillis());//set object in cacheMapthis.getCacheMap().put(key,object);//put timestamp in cachethis.getTimeStampMap().put(key, date);}public void delete(String key){this.getCacheMap().remove(key);this.getTimeStampMap().remove(key);}public void clearAll(){this.setCacheMap(new LinkedHashMapString, Object());this.setTimeStampMap(new LinkedHashMapString, Date());}/*** remove last 2 entries* not worried about object life time* this is just an example*/public void resize(){System.out.println(inside resize);long size this.getCacheMap().size();System.out.println(size size);if(size this.getMaxsize()){System.out.println(max size has reached);Map.EntryString, Date firstEntry this.getTimeStampMap().entrySet().iterator().next();System.out.println(removing : firstEntry.getKey() value : firstEntry.getValue());this.timeStampMap.remove(firstEntry.getKey());Map.EntryString, Object firstCEntry this.getCacheMap().entrySet().iterator().next();System.out.println(removing : firstCEntry.getKey() value : firstCEntry.getValue());this.cacheMap.remove(firstCEntry.getKey());}System.out.println(leaving resize with size : this.getCacheMap().size());} } 这个课没什么好说的。 有两个LinkedHashMaps一个用于存储对象另一个用于存储将对象推入缓存时的时间戳。 最大大小设置为10并且具有getput和delete方法。 还有一个调整大小的方法Aspect将调用此方法稍后我们将进行检查。 调整建议 package com.aranin.spring.aop;import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method;public class ResizeAdvice implements MethodBeforeAdvice {Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println(invoking method.getName() on target.getClass() Object);if(method.getName().equals(put)){System.out.println(before invoking method.getName());((MyCache)target).resize();}} } 如您所见这是建议之前的一种方法。 类实现MethodBeforeAdvice接口该接口包含单个方法before。 如果您检查该方法则在我们调用put方法时将检查rezise方法是否被调用。 Spring上下文springaopdemo.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsdbean idresizeAdvice classcom.aranin.spring.aop.ResizeAdvice /bean idmyCache classcom.aranin.spring.aop.MyCache /bean idmyAOPCacheclassorg.springframework.aop.framework.ProxyFactoryBeanproperty nametarget refmyCache /property nameinterceptorNameslistvalueresizeAdvice/value/list/property/bean /beans 如果您注意到上述xml文件则MyCache和ResizeAdvice均已注册为spring bean。 文件中的主要bean是myAOPCache。 这是spring aop在核心类上应用建议后创建的代理对象。 代理对象由ProxyFactoryBean类创建。 我们将myCache对象的引用传递给代理对象并注册所有将应用于代理类的建议。 最后让我们检查Client这将有助于我们运行此演示。 package com.aranin.spring.aop;import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext;public class MyCacheClient {public static void main(String[] args){ApplicationContext springcontext new FileSystemXmlApplicationContext(D:/samayik/SpringDemos/src/main/resources/springaopdemo.xml);MyCache myCache (MyCache)springcontext.getBean(myAOPCache);myCache.put(1, 1);myCache.put(2, 2);myCache.put(3, 3);myCache.put(4, 4);myCache.put(5, 5);myCache.put(6, 6);myCache.put(7, 7);myCache.put(8, 8);myCache.put(9, 9);myCache.put(10, 10);System.out.println((String)myCache.get(1));System.out.println((String)myCache.get(2));System.out.println((String)myCache.get(10));myCache.put(11, 11);System.out.println((String)myCache.get(1));System.out.println((String)myCache.get(2));System.out.println((String)myCache.get(10));System.out.println((String)myCache.get(11));}} 在此类中我们启动弹簧容器并加载spingaopdemo.xml中存在的bean。 我们在缓存中推送10个对象当我们尝试推送第11个对象时第一个对象将被删除并插入第11个对象。 输出很大所以我没有发布输出。 上课并检查输出是否令您满意。 摘要 在这篇文章中我们学习了如何使用面向方面的编程更好地处理交叉问题。 AOP是一个强大的概念可让我们编写更简洁更解耦的代码。 AOP不提供任何新内容。 它所做的只是将业务逻辑与系统必须执行的其他普通任务分离。 它可以重用实现系统范围内交叉关注点的代码。 我们还学习了与AOP相关的各种术语。 最后但并非最不重要的一点是我们看到了一个简单的示例在该示例中我们使用Spring AOP创建了一个简单的方法前建议并将其应用于管理缓存系统。 注意 您可以自由使用和分发此代码中开发的缓存系统。 尽管不建议在生产系统中使用它。 一如既往我一直希望这篇文章作为集体学习的启动平台随意发表一两个关于您对AOP的看法以及如何计划在代码中使用它的评论。 祝您阅读愉快。 参考 Weblog4j博客上的JCG合作伙伴 Niraj Singh的《 Spring面向方面的编程》 。 翻译自: https://www.javacodegeeks.com/2013/10/aspect-oriented-programming-with-spring-2.htmlspring 面向接口编程
http://wiki.neutronadmin.com/news/430280/

相关文章:

  • 广告公司网站建设策划书关于做网站的合同
  • 最火爆的国际贸易网站海外购物网
  • wordpress源码书籍seo蜘蛛池
  • 嘉兴建企业网站做类似淘宝的网站设计需要什么
  • 南头专业外贸网站建设公司自建wordpress主题
  • 宜黄住房和城乡建设部网站免费ppt模板下载百度云
  • 建网站的外包公司重庆手机网站制作价格
  • 如何为自己的店铺做网站深圳seo优化排名公司
  • 做网站业务好干吗公司如何申请一个网站网址
  • asp网站开发上传组建成都的网站建设开发公司
  • 银川做网站哪家好刚成立公司如何做网站
  • 网站查询域名ipcms网站搭建
  • linux 做网站哪里可以注册免费域名
  • 有什么好的网站推荐一下h5商城网站怎么做
  • 怎么做定位钓鱼网站北京免费网站建设模板
  • 网站被百度k是什么意思北京城乡建设门户网站
  • 先做网站后付款全国领先网站制作
  • app开发哪个公司好优化大师软件下载
  • 网站重复犀牛云做网站费用
  • 免费行情软件网站下载ww全国大型免费网站建设
  • 深圳南头高端网站建设建设路小学家校互动平台网站
  • 做网站的岗位好吗台州网站制作开发
  • 建行商城网站wordpress微语插件
  • 工作室网站域名重庆网站建设公司电话
  • 灵台教育局网站师资队伍建设网站推广的实际案例
  • 网站建设哪家质量好电子游戏网站建设
  • 深圳做网站j华信科中国建设银行登录入口
  • 做问卷的几个网站襄阳做网站的公司
  • 网站开发去哪里培训开发一款app软件可以赚多少钱
  • 西安大型网站建设公司排名投标文件网站开发技术部分