??xml version="1.0" encoding="utf-8" standalone="yes"?>国产无遮挡裸体视频在线观看 ,秋霞av国产精品一区,国产精品视频观看http://www.aygfsteel.com/zhoumiao0123/我要飞得更高...zh-cnFri, 20 Jun 2025 01:08:48 GMTFri, 20 Jun 2025 01:08:48 GMT60设计模式Q装饰器模式Decoratorhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/08/18/222892.html周大?/dc:creator>周大?/author>Mon, 18 Aug 2008 15:11:00 GMThttp://www.aygfsteel.com/zhoumiao0123/archive/2008/08/18/222892.htmlhttp://www.aygfsteel.com/zhoumiao0123/comments/222892.htmlhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/08/18/222892.html#Feedback1http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/222892.htmlhttp://www.aygfsteel.com/zhoumiao0123/services/trackbacks/222892.html         W一讲是装饰器。当初我在学装饰器模式的时候L感觉似懂非懂Q一直没有真正理解。其实装饰器也叫Ҏ工模式,再加上在我们的javacd中有很多是实C装饰器模式的cR比方说Q在d文g?br /> FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
q其实就是一个decorator模式。因为针对File的读取方式有很多Q如果每U都要采用承的ҎQ那么会产生很多的子c,那样昄是很烦的?br />           装饰器也UCؓҎ工模式。它的目的就是给一个对象动态地d一些功能。就像是l对象刷了一层漆Qɘq个对象更加丰富Q而不是通过l承来增加功能。而这些功能的d是动态的q行期的Q当然这里的动态ƈ不是像aop中的引介introductorQ大家不要؜淆?br />           在我们的目中,l常会遇到日志的情况。大凡我们会定义一个log接口像下面?br /> public interface Logger {
    public void log(String msg);
}
一般我们会把日志保存中文g中,所以有了一个FileLogger

public class FileLogger implements Logger {

 public void log(String msg) {
        //开始记录日志到文g?br />  }
}
此时如果在项目有些地斚w要对日志q行加密Q有些地方又不需要加密,或者有些地方生成的文g是以xml的方式。此时如果采用承的ҎQ也能实玎ͼ但是从面向对象的角度来说Qƈ不徏议对象的层次太深Q增加系l的复杂性,q样对于pȝ的扩展和l护都不是很方便。此时Decorator模式可以帮我们解决q些问题Q我们可以ؓq个一般的FileLogger对象上刷一层不同的漆,那么q些漆,从上面增加的功能角度来说Q就是加了一?#8220;加密”的漆Q或加了一?#8220;生成xml”的漆?br /> 先定义一个Decorator接口Q此接口也实CLogger接口
public class LoggerDecorator implements Logger{
   Logger logger;
   public LoggerDecorator(Logger logger){
        this.logger=logger;
   }
   //开始记录日?br />    public void log(String msg){
       //此处便是l实CLogger接口的,被刷了a漆的(增加了功能的例如加密{?对象记录日志
       logger.log(msg);
   }
}
public class EncryptDecorator extends LoggerDecorator{
    public EncryptDecorator(Logger logger){
        super(logger);
    }
    public void log(String msg){
        //刷加密字W串的a?br />         msg=this.encryptMsg(msg);
        //记录加密后的日志
        logger.log(msg);
    }
}
//客户端的调用
public DecoratorClient{
    public static void main(String args[]){
         Logger logger=new FileLogger();
         Logger decorator=new EncryptDecorator(logger);
         decorator.log("加密的字W串");
   }
}
q样基本把Decorator模式的应用v来,当然在项目中我们可能q需要更丰富一下我们的c,此处仅用q样的简单示例来讲述?/p>

]]>
强烈鄙视那些p{载的?q我一片净?!!http://www.aygfsteel.com/zhoumiao0123/archive/2008/08/15/222370.html周大?/dc:creator>周大?/author>Fri, 15 Aug 2008 15:35:00 GMThttp://www.aygfsteel.com/zhoumiao0123/archive/2008/08/15/222370.htmlhttp://www.aygfsteel.com/zhoumiao0123/comments/222370.htmlhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/08/15/222370.html#Feedback1http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/222370.htmlhttp://www.aygfsteel.com/zhoumiao0123/services/trackbacks/222370.html         |上google一下,x一些有用的资料Q结果是搜了不少Q谁知道都是转蝲Q而且相同的文章太多太多,辑ֈ了泛滥的地步Q然后冒充自q文章Q也不提是{载,貌似增加了网l搜索资料的途径Q实是浪费真正想找资料的朋友的时_D不知别人的旉都是有限的,每次打开一个页面结果却都是相同的内容,你叫人气不气Q扰׃整个|络的制序,损h利己Q滥宇充数?br />     |上的资料不是不可{载,但请转蝲者在盲目转蝲的同Ӟhq看法意见Q留下有用的信息Q否则ؕ贴在自己的blog只会让真正的有志之士所看不P如果您无法原创,p您把您的blog关闭?br />     清除|络垃圾Q还我们一片干净的网l空?!!

]]>
Java集合框架http://www.aygfsteel.com/zhoumiao0123/archive/2008/08/15/222326.html周大?/dc:creator>周大?/author>Fri, 15 Aug 2008 11:03:00 GMThttp://www.aygfsteel.com/zhoumiao0123/archive/2008/08/15/222326.htmlhttp://www.aygfsteel.com/zhoumiao0123/comments/222326.htmlhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/08/15/222326.html#Feedback0http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/222326.htmlhttp://www.aygfsteel.com/zhoumiao0123/services/trackbacks/222326.html         当然我们使用q些数据l构目的也是Z使用方便Q能够提供高效的存取。学q数据结构的朋友们都知道Q链表和哈希表的l构的效率都是较高的。ؓ了用不同的集合之间能够怺操作Q相互扩展,那么使用通用的接口将是一个较好的选择。所以整个集合框架被设计成了一pd的标准的接口。在CollectionscM有许多静态的法Ҏ。Iteratorq代器接口提供了通用的访问集合元素的方式Q因为每一个集合都实现了Iterator接口。除了集合,q提供了映射的接口和cR比方说Map提供了存储键值对。虽然它不是集合Q但也被整合C集合中。目前所有的集合都是Z泛型的?
        下面介绍集合框架中的几个常用的接口:
1.Collection 允许处理一l对象,位于集合层次l构的顶?br /> 2.List  扩展Collection接口以处理序?br /> 3.Queue  扩展Collection接口以处理列表中的特D类型,其元素只能从前面删除
4.Set  扩展Collection接口以处理集合,集合中的元素必须是唯一?br /> 5.SortedSet  扩展Set接口以处理排序的集合
当然除了上述的接口外Q集合中q用Copmarator、Iterator、ListIterator{接??br />         Collection接口是构造集合框架的基础Q必被定义集合的Q意类实现Q同样它也是一个泛型接口?br />
Ҏ摘要
 boolean add(E o)
          保?collection 包含指定的元素(可选操作)?/td>
 boolean addAll(Collection<? extends E> c)
          指?collection 中的所有元素都d到此 collection 中(可选操作)?/td>
 void clear()
          U除?collection 中的所有元素(可选操作)?/td>
 boolean contains(Object o)
          如果?collection 包含指定的元素,则返?true?/td>
 boolean containsAll(Collection<?> c)
          如果?collection 包含指定 collection 中的所有元素,则返?true?/td>
 boolean equals(Object o)
          比较?collection 与指定对象是否相{?/td>
 int hashCode()
          q回?collection 的哈希码倹{?/td>
 boolean isEmpty()
          如果?collection 不包含元素,则返?true?/td>
 Iterator<E> iterator()
          q回在此 collection 的元素上q行q代的P代器?/td>
 boolean remove(Object o)
          从此 collection 中移除指定元素的单个实例Q如果存在的话(可选操作)?/td>
 boolean removeAll(Collection<?> c)
          U除?collection 中那些也包含在指?collection 中的所有元素(可选操作)?/td>
 boolean retainAll(Collection<?> c)
          仅保留此 collection 中那些也包含在指?collection 的元素(可选操作)?/td>
 int size()
          q回?collection 中的元素数?/td>
 Object[] toArray()
          q回包含?collection 中所有元素的数组?/td>
<T> T[]
toArray(T[] a)
          q回包含?collection 中所有元素的数组Q返回数l的q行时类型与指定数组的运行时cd相同?/td>
List接口Q?br /> 该接口扩展了Collection接口Q它声明集合是存储一个序列的元素。我们可以把它看成是动态数l。学q数据结构的朋友都知道,数组可以使用Z0的烦引,对于泛型的List接口而言Q他可以指定保存不同的对象类型?br />
Ҏ摘要
 boolean add(E o)
          向列表的Nq加指定的元素(可选操作)?/td>
 void add(int index, E element)
          在列表的指定位置插入指定元素Q可选操作)?/td>
 boolean addAll(Collection<? extends E> c)
          q加指定 collection 中的所有元素到此列表的l尾Q顺序是指定 collection 的P代器q回q些元素的顺序(可选操作)?/td>
 boolean addAll(int index, Collection<? extends E> c)
          指?collection 中的所有元素都插入到列表中的指定位|(可选操作)?/td>
 void clear()
          从列表中U除所有元素(可选操作)?/td>
 boolean contains(Object o)
          如果列表包含指定的元素,则返?true?/td>
 boolean containsAll(Collection<?> c)
          如果列表包含指定 collection 的所有元素,则返?true?/td>
 boolean equals(Object o)
          比较指定的对象与列表是否相等?/td>
 E get(int index)
          q回列表中指定位|的元素?/td>
 int hashCode()
          q回列表的哈希码倹{?/td>
 int indexOf(Object o)
          q回列表中首ơ出现指定元素的索引Q如果列表不包含此元素,则返?-1?/td>
 boolean isEmpty()
          如果列表不包含元素,则返?true?/td>
 Iterator<E> iterator()
          q回以正顺序在列表的元素上q行q代的P代器?/td>
 int lastIndexOf(Object o)
          q回列表中最后出现指定元素的索引Q如果列表不包含此元素,则返?-1?/td>
 ListIterator<E> listIterator()
          q回列表中元素的列表q代器(以正的序Q?/td>
 ListIterator<E> listIterator(int index)
          q回列表中元素的列表q代器(以正的序Q,从列表的指定位置开始?/td>
 E remove(int index)
          U除列表中指定位|的元素Q可选操作)?/td>
 boolean remove(Object o)
          U除列表中出现的首个指定元素Q可选操作)?/td>
 boolean removeAll(Collection<?> c)
          从列表中U除指定 collection 中包含的所有元素(可选操作)?/td>
 boolean retainAll(Collection<?> c)
          仅在列表中保留指?collection 中所包含的元素(可选操作)?/td>
 E set(int index, E element)
          用指定元素替换列表中指定位置的元素(可选操作)?/td>
 int size()
          q回列表中的元素数?/td>
 List<E> subList(int fromIndex, int toIndex)
          q回列表中指定的 fromIndexQ包?Q和 toIndexQ不包括Q之间的部分视图?/td>
 Object[] toArray()
          q回以正顺序包含列表中的所有元素的数组?/td>
<T> T[]
toArray(T[] a)
          q回以正顺序包含列表中所有元素的数组Q返回数l的q行时类型是指定数组的运行时cd?/td>
相对于Collection接口而言QList接口增加了add(int index, E element),add(int index,Collection c)ҎQ这些方法用于将元素插入到特定的位置Q这也是动态数l的Ҏ?br /> Set接口Q?br /> 该接口扩展了Collection接口Q但不允许有相同的存在的元素Q而上q的List接口却没有此U束Q其实很好理解,我们可以把它惌成数学中的集合,在那U集合中Q是不允许有相同的元素的?br /> SortedSet接口扩展了Set接口Q此接口是升序的集合Q由于是有序的,所有自然其中的数据元素是有意义的,否则升序的算法无从用v。自然就不能存在为null的对象。下表是该接口特有的ҎQ?br />
Ҏ摘要
 Comparator<? super E comparator()
          q回与此有序集合兌的比较器Q如果用元素的自然序Q则q回 null?/td>
 E first()
          q回此有序集合中当前W一个(最的Q元素?/td>
 SortedSet<E> headSet(E toElement)
          q回此有序集合的部分视图Q其元素严格于 toElement?/td>
 E last()
          q回此有序集合中最后一个(最大的Q元素?/td>
 SortedSet<E> subSet(E fromElement, E toElement)
          q回此有序集合的部分视图Q元素范围从 fromElementQ包括)?toElementQ不包括Q?/td>
 SortedSet<E> tailSet(E fromElement)
          q回此有序集合的部分视图Q其元素大于或等?fromElement?/td>
Queue接口Q?br /> q个接口?.4的版本中是没有,新增的。看名字q道是队列Q先q先出?br />
Ҏ摘要
 E element()
          索,但是不移除此队列的头?/td>
 boolean offer(E o)
          如果可能Q将指定的元素插入此队列?/td>
 E peek()
          索,但是不移除此队列的头Q如果此队列为空Q则q回 null?/td>
 E poll()
          索ƈU除此队列的_如果此队列ؓI,则返?null?/td>
 E remove()
          索ƈU除此队列的头?/td>
从队列顶部删除元??

]]>
谈UML建模http://www.aygfsteel.com/zhoumiao0123/archive/2008/07/29/218555.html周大?/dc:creator>周大?/author>Tue, 29 Jul 2008 14:51:00 GMThttp://www.aygfsteel.com/zhoumiao0123/archive/2008/07/29/218555.htmlhttp://www.aygfsteel.com/zhoumiao0123/comments/218555.htmlhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/07/29/218555.html#Feedback0http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/218555.htmlhttp://www.aygfsteel.com/zhoumiao0123/services/trackbacks/218555.html         首先我们得理解什么是面向对象(Object Oriented)。对象是各种各样的实体,x具体的事物也是抽象的事物。面向对象不光是对对象的属性和行ؓ建模Q它q包括其它方面。其中就有抽象、ѝ多态和装。抽象的概念很抽象,其意思是说抽象出你所需求的属性和操作Q即是所需的东ѝ它是一U从一般的观点看事物的ҎQ焦点应该集中在事物的本质性质上,而不要过分地去追求细节,应该是抽象出一般化的东ѝ世界是复杂的,但不能因为它复杂׃ȝ解它Q我们可以把它抽象化Q其实抽象后世界也不大?br />          l承Q顾名思意是子类拥有父类的所有的内部状态和q动规律。公q东西可以被子cd享,正所谓,子又有孙Q孙又有子,子子孙孙无穷溃也。当然不能像q样来设计?br />          多态:多个形态,同样的一U动作,在不同的对象q行演绎的时候可能演l的l节׃不一栗正所谓大安喜欢吃,但是男h吃饭跟女人吃饭就不一栗男的可能吃的快吃的多,女的吃的吃的慢Q但大家都是吃这个动作,换了个对象来吃,效果不一栗?br />          装QD个例子,Z在看电视ӞZ看到的是电视的屏q,电视的按钮,至于屏幕Z么上面会有美奻I按下按钮Z么会换台Qh们好象不必去兛_其是怎么工作的吧Q当然也有闲人喜Ƣ钻牛角。所以电视机封装了如何让屏q显C美女的工作。那么电视机的按钮和屏幕实际上就是电视机l我们这些喜Ƣ看电视的h的接口。我们关心的也只是这些接口。至于这些接口怎么实现的,请交l厂家吧Q世界也是pq个各司其职的hl成的?br />           重蝲Q说白了是做同一件事的几U不同的Ҏ。比方说Q在公司加班Q正常情况下Q默认是吃盒饭,有一天老板归来Q来一句走出去吃饭我请。如果用Ҏ来表C的话就是public void eat(盒饭c?a) public void eat(饭店ca ,老板cb )?br />           消息传递:在这个世界里Q光有对象是不够的,那样人都是行走肉。对象之间是要相互协作的。那么相互协作之间是通过怺发送消息的方式。比方说看电视,我们使用遥控器打开电视。那么遥控器对象向电视机对象发送了一个开机的消息。电视机对象接收了此消息后就打开了?br />           正如世界是一个由若干个对象以及对象之间的若干个错l复杂的关系l成的。那么对象与对象之间又会有什么样的关pdQ打开电视Ӟ我们说是你和电视Z间发了关联关pR再比方说你暗恋一个女生,你跟她之间Ş成了一个单向的兌关系。因为她不知道你暗恋她,当然你暗恋她Q她也暗恋你的情况也有可能出玎ͼ此处我们不予探讨。如果她也暗恋你Q那是一个双向的兌关系。对象之间的依赖关系说明是目标对象与源对象之间的依赖关系。依赖就是当目标对象有所变化的时候源对象也相应的发生改变?br />         攉pȝ需求时Q把用户的业务需求{换成开发h员能够理解的需求,q最l把需求{化ؓ代码。通过需求映ؓ代码Q可以保证代码满些需求,同时代码也可以回溯成需求。这Lq程q为徏模。徏模过E的l果可以跟踪业务需求,到要求、到模型Q到代码的全q程及其相反的过E,而不会在q个q程中迷路?br />         可视化徏模将模型中的信息用标准的囑Ş元素直观的表C。这个标准的囑Ş元素是本文中提到的UML。它的出Cؓ用户、开发h员、分析h员、测试h员、管理h员、需求调研h员等相关人员提供了沟通的桥梁。其中很直观的例子:对于用户来说Q他更关心自己需要在q个pȝ中操作什么,以及q些操作是否满了自q业务需要,那么利用模型他可以直观的看到自己与这个系l的交互Q根据这L交互保证需求的获取。对于分析h员来_他需要分析模型的对象之间的交互,以及q样的交互是否满系l的需要,是否可以保证q样的交互对于业务的解析Q解册己分析时存在的疑惑,同时也可以根据模型交互的l果向需求调研h员提出问题。对于开发h员来_他要考虑开发的对象以及q些开发对象需要完成的工作。对于测试h员来_他们Ҏ模型看到对象间的交互q且Ҏq些交互以及交互的出准备测试用例。在RUP中就可以同步地进行测试了Q而不是像瀑布模型那样最后才准备试。对于项目管理h员来_他需要看到系l中各个部分或者子pȝ之间的交互,在项目的实施q程Ҏ计划看到各个pȝ模型完成的情况及相应的进度。对于公司的ȝ人员来说可能只需要看到更高层的模型,看到各个子系l运行情늻果。可视化的徏模确实带来了pȝ的可控。通过先徏模再~写代码Q从一开始就保证了系l的l构合理。利用模型可以更方便地捕莯计缺P从而以较低的成本修正这些缺陗?br />         Rational Rose是分析和设计面向对象软gpȝ的强大的可视化工P可以用来先徏模系l再~写代码Q支持业务模型,帮助了解pȝ的业务,有助于系l分析,可以先设计用案例和Use Case框图Q显C系l的功能。也可以用Interaction框图昄对象之间如何配合Q提供所需的功能。Calss框图可以昄pȝ中对象及其相互关pRComponent框图可以演示cd何映到实现lg。最后Deployment框图可以昄pȝ的网l结构。Rose模型的四个社图是QUse Case视图、Logical视图、Component视图和Deployment视图。每个视N对不同对象,h不同的用途?br />         Use Case视图包括pȝ中的所有角艌Ӏ用案例和Use Case框图Q还包括一些Sequence或Collaboration框图。该视图是系l中与实现无关的视图。该视图xpȝ功能的高层ŞӞ而不xpȝ具体的实现方法。项目开始时Q开发小l可以选择使用Use Case视图中生成业务模型,完成了业务模型后便是使用案例模型。客戗分析h员和目l理利用使用案例、Use Case框图和用案例文档来定pȝ的高层视图。随着目的进行,开发小l的成员也可以通过Use Case视图了解正在建立的系l的使用案例文档Q通过使用案例描述事g程。利用Use Case视图Q测试h员开始编写测试脚本,技术h员开始编写文档。一旦用户同意了角色和用案例,q定了pȝ的范围。然后可以在Logical视图中l开发,xpȝ如何实现使用案例中提出的功能?br />         Logical视图Q关注系l如何实C用案例中提出的功能。提供系l的详细囑ŞQ描q组仉如何兌Q还包括特定的类、Class框图和StateChart框图Q利用这些元素,开发h员可以构造出pȝ的详l设计。该视图x的是pȝ的逻辑l构Q在q个视图中,要标识系l组Ӟ查系l的信息和功能,查组件之间的关系?br />         Component视图Q包括模型代码库Q可执行文gQ运行库和其他组件的信息。系l的Component视图可以昄代码模块间的关系。详l包括:lgQ代码的实际模块QComponent框图Q显C组件及其相互关p;包,相关lg的组。该视图的主要用h控制代码和编译部|应用程序的人。有些组件是代码库,有些是运行组件?br />         Deployment?图,x于系l的实际部v。还包括定wQ网l带宽,故障恢复和响应时间等。详l包括:q程Q是在自q内存I间执行的线E;处理器,M有处理功能的机器Q设备,包括M没有处理功能的机器,如打印机?br />         下面讨论UML以及UML的可视化工具l我们带来了什么样的好处。rose建立的业务模型关注系l针对的业务。业务模型包括:业务角色、业务用例、业务工人。业务模型研I的是业务的机构以及机构的角艌Ӏ在建立业务模型的过E中Q检查机构的l构和机构中的角色以及它们之间的怺关系Q还需要介l机构的工作,公司中的主要q程Q以及这些过E如何的工作Q效率如何,是否有Q何的瓉。简要的说就是要弄清楚业务的内部和外部,以及内外部如何进行通信。那么这些信息都被记录在业务模型中。业务模型中框图有助于外部世界和机构的关p,以及机构如何完成q些目标。业务模型的主要工具之一是工作流框图。这些框图描q机构中的特定过E流E;昄q个q程中参与的人员Q这个过E的步骤和参与这个过E的业务实体。业务过E徏模h员首先用工作框囑־模当前过E,然后可以分析q些框图Q寻扑ַ作流中的~陷和其他问题。完成业务模型的好处在于开始规划系l工作之前就完全了解了业务过E,q样可以事先确定最需要自动化的工作流领域和系l中最有助于机构开发的部分从而徏立对公司或者机构最有利的系l?br />         实体c:实体cL要永久保存的信息。实体类通常在事件流和Interaction框图中,是对用户最有意义的c,通常用业务域术语来命名。边界类Q边界类位于pȝ与外界的交界处,包括所以窗体、报表、打印机和扫描A{硬件的接口以及与其他系l的接口。要L和定义边界类Q可以检查Use Case框图。每个角Ԍ用例 交互臛_要有一个边界类。控制类Q控制类负责协调其它cȝ工作。每个用例通常都有一个控制类Q控制用例中的事件的序。在Interaction框图中,控制cd有协调责仅R?br />        
 



















        
       


]]>
Spring配置技?/title><link>http://www.aygfsteel.com/zhoumiao0123/archive/2008/07/28/218207.html</link><dc:creator>周大?/dc:creator><author>周大?/author><pubDate>Mon, 28 Jul 2008 15:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhoumiao0123/archive/2008/07/28/218207.html</guid><wfw:comment>http://www.aygfsteel.com/zhoumiao0123/comments/218207.html</wfw:comment><comments>http://www.aygfsteel.com/zhoumiao0123/archive/2008/07/28/218207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/218207.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhoumiao0123/services/trackbacks/218207.html</trackback:ping><description><![CDATA[<span>?/span><span>Spring</span><span>?/span><span>applicationContext.xml</span><span>中配|映文件的ҎQ?/span><br /> 1。减配|文仉配置信息的数?br /> 配置applicationContext.xml或者分布在其它的xml文g中的beanӞ讄bean与bean之间的相互依赖关pL一件痛苦且Ҏ出错的事。autowire属性的出现减轻了配|文件的定w?br /> <bean>的autowire属性有6个倹{分别ؓQ?br /> <p><span>a </span><span>No</span><span>Q即不启用自动装配?/span><span>Autowire</span><span>默认的倹{?br /> </span></p> <p><span>b </span><span>byName</span><span>Q通过属性的名字的方式查?/span><span>JavaBean</span><span>依赖的对象ƈ为其注入?br /> </span><span>c </span><span>byType</span><span>Q通过属性的cd查找</span><span>JavaBean</span><span>依赖的对象ƈ为其注入?br /> </span><span>d </span><span>constructor</span><span>Q?/span><span>byType</span><span>一P也是通过cd查找依赖对象?br /> </span><span>e </span><span>autodetect</span><span>Q在</span><span>byType</span><span>?/span><span>constructor</span><span>之间自动的选择注入方式?br /> </span><span>f </span><span>default</span><span>Q由上标签</span><span><beans></span><span>?/span><span>default-autowire</span><span>属性确定?br /> ?lt;beans default-autowire="byName">可以为本xml文g讄默认的自动装配的cd例如byNameQ当然在讄具体?lt;bean id="***" class="***" autowire="byType">Ӟ会自动改变默认的byName为byType?br /> 2。在web.xml中通过配置如下参数<br /> <br />     <context-param><br />         <param-name>contextConfigLocation</param-name><br />         <param-value>classpath*:spring/*.xml</param-value><br />     </context-param>    <br /> 会自动把WEB-INF/classes/sring目录下的所有以.xmll尾的文件加载spring容器q行理Q而不必手动编写每个applicationContex.xml,accessContext.xml{配|文件?br /> 3。利用属性ؓmappingDirectoryLocation来配|相关的目录位置Q从而避免ؓ该目录下的所有文件名q行配置<br /> <property name="mappingDirectoryLocation"><br /> <list><br /> <value>classpath:/package1/<value><br /> </list><br /> </property><br /> 如:<br /> <!-- 讄Hibernate3的SessionFactory --><br />     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><br />         <property name="dataSource"><br />             <ref bean="dataSource"/><br />         </property><br />         <property name="hibernateProperties"><br />             <props><br />                 <prop key="hibernate.dialect">net.sf.hibernate.dialect.SQLServerDialect</prop><br />                 <prop key="hibernate.show_sql">true</prop><br />                 <prop key="hibernate.generate_statistics">true</prop><br />                 <prop key="hibernate.connection.release_mode">auto</prop><br />                 <prop key="hibernate.autoReconnect">true</prop><br />             </props><br />         </property><br /> <span style="color: red">        <property name="mappingDirectoryLocations">        <br />             <list>       <br />                <value>classpath:com/apache/model</value>       <br />             </list><br />         </property>   </span><br />     </bean><br /> 4。消除ProxyFactoryBean的繁重配|?br /> a.通过l承于parent ProxyFactoryBean<br /> b.使用aop自动代理的方?br /> 在Spring中进行事务的理均是Zaop的方式,为每个需要事务管理的bean均设定相应的ProxyFactoryBean又是一仉常繁重的工作。用自动代理可以消除这L重复的工作。方法如下,声明DefaultAdvisorAutoProxyCreator为所有的advisor作ؓ代理Q在context上下文中查找所有的advisorQ然后自动代理那些被在pointcut加入了切面的bean。针对事务用spring中的事务的advisor,TransactionAttributeSourceAdvisor?br /> 该advisor有两U方式进行注入,一U是setter方式Q如下:<br />     <!-- 配置自动代理事务 --><br />     <bean id="transactionAdvisor" class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"><br />         <property name="transactionInterceptor" ref="transactionInterceptor"/><br />     </bean><br /> 另一U是constructor方式Q如下:<br />     <!-- 配置自动代理事务 --><br />     <bean id="transactionAdvisor" class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"><br />      <constructor-arg><br />         <ref bean="transactionInterceptor"/><br />      </constructor-arg>        <br />     </bean><br /> 以constructor方式q行注入?br /> </span></p> <img src ="http://www.aygfsteel.com/zhoumiao0123/aggbug/218207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhoumiao0123/" target="_blank">周大?/a> 2008-07-28 23:04 <a href="http://www.aygfsteel.com/zhoumiao0123/archive/2008/07/28/218207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用Springq行软g的设计与开?未完待箋)http://www.aygfsteel.com/zhoumiao0123/archive/2008/07/28/218187.html周大?/dc:creator>周大?/author>Mon, 28 Jul 2008 14:15:00 GMThttp://www.aygfsteel.com/zhoumiao0123/archive/2008/07/28/218187.htmlhttp://www.aygfsteel.com/zhoumiao0123/comments/218187.htmlhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/07/28/218187.html#Feedback0http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/218187.htmlhttp://www.aygfsteel.com/zhoumiao0123/services/trackbacks/218187.htmlpȝ实现规范Q以面向接口的方式进行编E?br /> 下图Z层逻辑l构的简易关pd

 

 

以上是简易的pȝ逻辑l构Q?/span>***Actionl承?/span>xwork?/span>SupportActionQ通过Spring来进行管理,在整?/span>Spring的容器中Q?/span>Spring负责理整个pȝ的所?/span>BeanQƈ负责初始?/span>Bean之间的依赖关pR?/span>***Action中注入了服务层对?/span>***ServiceImpl,?/span>ServiceImpl又注入了***DaoImpl对象。下面会逐步l化上面的关pd?/span>

先看下面的web.xml配置

web.xml

    <display-name>Struts Blank</display-name>

    <context-param>

        <param-name>webAppRootKey</param-name>

        <param-value>wxy.root</param-value>

    </context-param>

    <!-- spring xml文g配置目录?/span>class目录下的spring目录?/span>WEB-INF/classes/spring -->

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath*:spring/*.xml</param-value>

    </context-param>

    <!-- 配置log4j的日志信?/span>WEB-INF/classes/config/log4j.properties -->

    <context-param>

        <param-name>log4jConfigLocation</param-name>

        <param-value>classpath*:config/log4j.properties</param-value>

    </context-param>

    <!-- 配置Character Encoding Filter -->

    <filter>

        <filter-name>encodingFilter</filter-name>

        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        <init-param>

            <param-name>encoding</param-name>

            <param-value>UTF-8</param-value>

        </init-param>

    </filter>

    <!-- 配置Struts2 -->

    <filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>encodingFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

   

    <welcome-file-list>

        <welcome-file>index.html</welcome-file>

    </welcome-file-list>

    <!-- 载入Spring ApplicationContext -->

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    <!-- Spring hIntrospector防止内存泄漏 -->

    <listener>

        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>

    </listener>
未完待箋.

 

]]>
Spring AOP配置Ҏ(AOP 我较为欣赏的另一U方式的开?http://www.aygfsteel.com/zhoumiao0123/archive/2008/06/15/208106.html周大?/dc:creator>周大?/author>Sun, 15 Jun 2008 08:53:00 GMThttp://www.aygfsteel.com/zhoumiao0123/archive/2008/06/15/208106.htmlhttp://www.aygfsteel.com/zhoumiao0123/comments/208106.htmlhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/06/15/208106.html#Feedback0http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/208106.htmlhttp://www.aygfsteel.com/zhoumiao0123/services/trackbacks/208106.html    在AspectJ5中增加了对Java5注解的完全支持,可以使用Java注解来取代专门的AOP语法Q把普通的Javac?POJO)声明为切面模块。?lt;aop:aspectj-autoproxy/>来开启在POJO中通过注解来标识切面模块的识别功能。但目前Spring只支持其中部分标{,包括@Before,@AfterReturning,@AfterThrowing,@After,@Around{几U?br /> 2.ZSchema模式配置Spring AOP
通过Spring配置文g中通过AspectJ切入点语a表达式来定义切入点,q|相关的增强Advice实现Ҏ
<aop:config>
    <aop:pointcut id="somePointcut" ../>
    <aop:advisor id="someAdvisor" ../>
    <aop:aspect id="someAspect" ref="someBean">
        <aop:adviceType id="someAdvice" ../>
    </aop:aspect>
</aop:config>
3.ZSpring API的配|文?br /> 包括如下内容Q?br /> 1.0个或多个切入点定义Bean,必须实现Pointcut接口
2.1个或多个通知实现Bean,必须实现Advice接口
3.0个或多个引介Bean,实现IntroductionInfo接口
4.1个或多个切面装Bean,必须实现Advisor接口
5.1个或多个真实业务Bean
6.1个或多个代理Bean


]]>
目理中的人文理http://www.aygfsteel.com/zhoumiao0123/archive/2008/06/15/208081.html周大?/dc:creator>周大?/author>Sun, 15 Jun 2008 08:10:00 GMThttp://www.aygfsteel.com/zhoumiao0123/archive/2008/06/15/208081.htmlhttp://www.aygfsteel.com/zhoumiao0123/comments/208081.htmlhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/06/15/208081.html#Feedback0http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/208081.htmlhttp://www.aygfsteel.com/zhoumiao0123/services/trackbacks/208081.html 2.不可~少的周末ȝ交流
3.改善工作环境Q排除干?br /> 4.合理制定q度计划Q不提倡加?

]]>
Portal(转蝲)http://www.aygfsteel.com/zhoumiao0123/archive/2008/03/30/189616.html周大?/dc:creator>周大?/author>Sun, 30 Mar 2008 09:24:00 GMThttp://www.aygfsteel.com/zhoumiao0123/archive/2008/03/30/189616.htmlhttp://www.aygfsteel.com/zhoumiao0123/comments/189616.htmlhttp://www.aygfsteel.com/zhoumiao0123/archive/2008/03/30/189616.html#Feedback0http://www.aygfsteel.com/zhoumiao0123/comments/commentRss/189616.htmlhttp://www.aygfsteel.com/zhoumiao0123/services/trackbacks/189616.html

q里所说的Portal是指JCP-JSR168规范所描述的:Portal是一个基于Web的应用,通常它提供个性化、单点登录、内定w成和昄{功能。Portal技术包括三个方面:

1Q?nbsp; Portal服务?Portal Server)Q?/p>

2Q?nbsp; Portlet容器Q?Portlet Container)

3Q?nbsp; Portlet?/p>

1) Portal Server 的定义是

一?PortalQ门L站)是指一?Web-based 的系l,通常都会提供个h化设|、单一登陆、以及由各种不同来源或不同网站取得各式各L信息Qƈ且将q些信息攑֜|页之中l合而成的呈现^収ͼ门户|站会有_y的个人化讄L供定制的|页Q当不同{的用者来览该页面将获得不同的信息内宏V?

负责接收HTTPhQ调用portletQƈportlet产生的内容聚集到portal pageq回l客戗?/p>

2) Portlet Container 的定义是

portlet container 是提?portlets 执行的环境,包含了许?portlets q且理他们的生命周期,他也会永q保存着 portlets 的喜好设|,一?portlet container 接收到来?portal 的请求后Q接着这个请求传递给存在 container ?portlet 执行。portlet container 没有义务ȝ?portlets 产生的信息內容,q个工作必须?portal 来处理。portal ?portlet container 可以攑֜一赯为同一个系l的lgQ或者分开成ؓ两个独立的组件?

负责提供portlet的运行时环境Q管理portlet的生命周期,q负责提供portlet持久化能力?/p>

3) Portlet 的定义是

一?Portlet 是以 Java 技术ؓ技术的 Web lgQ由 Portlet Container 所理Q专门处理客L request 以及产生各种动态的信息内容。Portlets 为可插式 ( pluggable ) 的客L面组Ӟ提供呈现层成Z个信息系l。这些由 portlet 产生的内容也被称为片D?(fragment)Q而片D|h一些规则的Markup( HTML、XHTML、WML )Q而且可以和其他的片段l合而成一个复杂的文g。?Portlet 中的内容正常来说是与其他 Portlet 的内容聚合而成Z?Portal |页。?Portlet 的生命周期是?Portlet Container 所理控制的。客L?portlets 的互动是?portal 通过典型?request/response 方式实现Q正常来_客户会和 portlets 所产生的内容互动,举例来说Q根据下一步的q接或者是认送出的表单,l果 portal 会接收?portlet 的动作,这个处理状况{向到目标 portlet。这?portlet 内容的生可能会因ؓ不同的用者而有不同的变化,完全是根据客户对于这?portlet 的设|?/p>

Portal主要是解决企业信息和应用的前端集成问题,它负责连l企业后台EAIQ集成企业的l构和非l构化信息,q提供统一的访问企业信息和应用的入口?/p>

(摘自JSR168规范文档)

portlet ?servlet 的关p?br /> Portlet ?Servlet 是兄弟有那么一点点怼却又有那么一点点不同Q因?Servlet ?Portlet 不尽然相同,所以研I小i決定将 portlets 定义成ؓ一个新的组Ӟ因此定义?portlets 一个新的ƈ且明的界面与行为。ؓ了尽可能与现有的 servlet l合辑ֈ重复使用的目的,portlet 的规范利用了 servlet 的规范,许多观念都很怼的,l合 portlets、servlets ?jsp 在同一个网站系l中Q我们称?portlet application 。在同一?portlet application 中,他们分享同一?classloaderQcontext ?session?

1) Portlet ?Servlet 的相g?/p>

@ portlets 也是 Java 技术的 web lg
@ portlets 也是有特定的 container 在管?br /> @ portlets 可以动态生各U内?br /> @ portlets 的生命周期由 container 所理
@ portlets 和客L的互动是通过 request/response 的机?

2) Portlet ?Servlet 也有一些不?/p>

@ portlets 只?markup 信息片段Q不是完整的|页文g。?Portal 会将所有的 Portlet markup 信息?D|C个完整的 Portal |页?br /> @ portlets 不会?URL 有直接的关系
@ 客户端必通过 portal pȝ才能?portlets 互动
@ portlets 有一些定义好?request 处理Qaction request 以及 render request?br /> @ portlets 默认定义 portlet modes 及窗口状态可以指出在|页中该 portlet 的哪个功能正在执行及现在?状态?br /> @ portlets 可以在同一?portal |页之中存在多个?

3) Portlet 有一些附加的功能?Servlet 所没有?/p>

@ Portlets 能够存取及储存永久配|文件及定制资料?br /> @ portlets 可以存取使用者数?br /> @ portlets h URL 的重写功能在文g中去动态徏立连l,允许 portal server 不用ȝ道如何在|页的片 D之中徏立连l及动作?br /> @ portlets 可以储存临时性的数据?portlet session 之中Q拥有两个不同的范围Q?br /> application-wide scope ?portlet private scope ?

4) Portlet 不具有一些功能, 但是 Servlet 却有提供

@ servlet h讄輸出的文字编? character set encoding)方式
@ servlet 可以讄 HTTP 输出?header
@ servlet 才能夠接收客户对?portal 发出?URL h

ZPortal开发项目的优势
1、可以与以后新开发的或已集成到Portal中的企业应用实现无缝集成?/p>

2、可以分享Portal服务器和Portlet容器提供的种U功能。这要视Portal服务器提供商而定?/p>

3、由于Portlet已规范化QJSR168Q,所以应用中开发的Portlet可以部v在不同的Portal服务器上?br />

 

]]>
վ֩ģ壺 ʯ¥| | ƺ| | | ¡| | | | ̨| ԭƽ| ξ| | ԭ| Ϫ| ɽ| | | | | | ҵ| ŷ| Ȫ| Դ| | Ҧ| | | ־| Ӷ| | ն| | | | ̶| ɽ| | Ѩ| ۩|