??xml version="1.0" encoding="utf-8" standalone="yes"?>久久九九亚洲精品,2020亚洲男人天堂精品,亚洲AV本道一区二区三区四区 http://www.tkk7.com/JDeodar/Java Tipszh-cnSun, 11 May 2025 16:02:34 GMTSun, 11 May 2025 16:02:34 GMT60Appfuse1.9安装部vhttp://www.tkk7.com/JDeodar/archive/2006/01/20/28805.htmlJDeodarJDeodarFri, 20 Jan 2006 08:39:00 GMThttp://www.tkk7.com/JDeodar/archive/2006/01/20/28805.htmlhttp://www.tkk7.com/JDeodar/comments/28805.htmlhttp://www.tkk7.com/JDeodar/archive/2006/01/20/28805.html#Feedback0http://www.tkk7.com/JDeodar/comments/commentRss/28805.htmlhttp://www.tkk7.com/JDeodar/services/trackbacks/28805.html
2Q因为此前已l部|了appfuseQ更改目录;源代码放到appfuse_springmvc而不是默认的appfuse目录?br>刚进去,有一个错误,是antlr.jar找不刎ͼ实没有?br>在classpath中去掉,或者在.classpath中去掉此?br><classpathentry kind="lib" path="lib/struts-1.2.8/antlr.jar"/>
q个可是老问题了。原来的版本有了,怎么会一直没有解军_Q?br>
现在把项目中名称和数据库名称相关的名Uappfuse都修正ؓappfuse_springmvcQ以免和前面部v的appfuse冲突Q:
a: .project
<name>appfuse</name>

b: web.xml
<display-name>appfuse</display-name>

c: build.xml
<project name="appfuse" basedir="." default="package-web">

d: build.properties
webapp.name=appfuse

e: properties.xml  
<property name="database.name" value="appfuse"/>
<property name="database.url"
        value="jdbc:${database.type}://${database.host}/${database.name}?

useUnicode=true&amp;amp;characterEncoding=utf-8"/>


f: database.properties
hibernate.connection.url=jdbc\:mysql\://localhost/appfuse?useUnicode\=true&characterEncoding\=utf-8

g: metadata\conf\tomcat-context.xml 我用的是tomcat5.0.19。下面的部分
<Context path="/appfuse" docBase="appfuse" debug="99" reloadable="true">
  <Logger className="org.apache.catalina.logger.FileLogger" prefix="appfuse_log." suffix=".txt"

timestamp="true" />
- <!-- Resource name="jdbc/appfuse" auth="Container" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/appfuse">


h: web/common/taglibs.jsp
<%@ taglib uri="/WEB-INF/appfuse.tld"

3Q一切就l,按照readme.txt上说的来做(试׃必要了)?br>AQ首先运?ant setup-db Q我在eclipse中运ant执行此targetQ提C必Ljunit.jar拯到D:\eclipse\plugins\org.apache.ant_1.6.5\lib下,拯q去Q执行,提示同样的错误;原来q要把junit.jar加入classpath,如下Q在Preferences->Ant->runtime中的classpath栏中的Ant Home Entries(default) Add External JARs..把刚拯q去的junit.jar加入卛_Q再ơ运行OK?br>
BQ运?ant setup-tomcat deployQ首先必ȝ认几个环境变量的讄如CATALINA_HOME执行你的tomcat目录?br>
CQ终于运行v来了Q此时此d冒出来了Q另外一个大问题Q就是中文的问题Q存攑֜mysql5中的数据怎么昄都不对,我和前面装的那个appfuse比较hQ数据库链接一样都使用[?useUnicode\=true&characterEncoding\=utf-8]Q前面的appfuse没有中文问题?br>
奇怪,至今没有解决。望大侠们帮助呀Q?-所有的地方都是使用utf8字符?包括mysql?/b>


JDeodar 2006-01-20 16:39 发表评论
]]>
诅RJ2EE Development without EJB?W记?/title><link>http://www.tkk7.com/JDeodar/archive/2006/01/18/28538.html</link><dc:creator>JDeodar</dc:creator><author>JDeodar</author><pubDate>Wed, 18 Jan 2006 09:42:00 GMT</pubDate><guid>http://www.tkk7.com/JDeodar/archive/2006/01/18/28538.html</guid><wfw:comment>http://www.tkk7.com/JDeodar/comments/28538.html</wfw:comment><comments>http://www.tkk7.com/JDeodar/archive/2006/01/18/28538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JDeodar/comments/commentRss/28538.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JDeodar/services/trackbacks/28538.html</trackback:ping><description><![CDATA[<b>Web Tier Design -- Web层设?/b><br><br><u><i><b>1、设计目?/b></i></u><br>AQ一个清晰的Web层?br>用MVC辑ֈQ控制器QControllerQ对象,接受用户输入的信息,q调用业务逻辑d建和更新模型对象。模型(ModelQ对象,提供要显C的数据Q提供控制器和视图之间的契约。视图(ViewQ对象,昄由控制器提供的模型对象?br>BQWeb层应该尽可能地薄?br><br><u><b><i>2、请求驱动的Web MVC框架</i></b></u><br>一个HTTPhq来Q被一个通用的分发器servletQdispatcher servletQ分析,再被分发C个对应的应用处理器。处理器依次处理UIҎ的控刉辑Q调用业务对象和理会话状态(如果需要)Q准备一个模型,再{发到一个视图。每个UI动作对应一个处理器Q后者通常被称为动作(actionQ或控制器(controllerQ,具体的名U虽框架而定?br>控制器可能被建模为可重用、线E安全的处理器,cMServletQ例如Struts和SpringQ;也可能实Cؓ“只使用一ơ”的command实例Q例如WebWorkQ?br>h驱动的Web MVC框架的设计模型通常包括六种cd的对象。在一些框架中有些对象同时扮演了几个角Ԍ<br>AQ控制器QcontrollerQ:它是由框架调用的lgQ负责处理HTTPhQƈ定一个要呈现的视图?br>BQ拦截器QinterceptorQ:它是由框架调用的lg......<br>CQcommand或formQ它是根据请求参数组装的JavaBeanQ?br>可用作中间层业务对象的方法参数。如果是只用一ơ(只在一ơ请求范围内有效Q的对象Q则通常UCؓcommand对象Q如果表C可重复提交的表单,则称为form对象?br>DQ验证器QvalidatorQ:用于验证command/form对象Q如果发现错误,则生成验证错误对象,交给视图昄。验证可以针Ҏ个对象,也可以针对特定的字段?br>EQ验证错误收集器Qvalidation errors holderQ:攉验证错误Qƈ其暴露l视囑֎昄。验证过E可能是~程实现的,也可能是由框架特有的JSP标签q行的?br>FQ模型(ModelQ:由控制器曝露l视囄一个或多个JavaBeanQ表C控制器和视图之间的数据U定?br>GQ视囑ּ用(view referenceQ:可能是一个符号名U、一个资源URL、或一个真实的视图对象。控制器q回视图引用Q由框架q行渲染?br><b><i><u><br>3、事仉动(event-drivenQ的Web MVC框架</u></i></b><br>Tapestry和JSF<img src ="http://www.tkk7.com/JDeodar/aggbug/28538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JDeodar/" target="_blank">JDeodar</a> 2006-01-18 17:42 <a href="http://www.tkk7.com/JDeodar/archive/2006/01/18/28538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>诅RJ2EE Development without EJB?W记?/title><link>http://www.tkk7.com/JDeodar/archive/2006/01/17/28311.html</link><dc:creator>JDeodar</dc:creator><author>JDeodar</author><pubDate>Tue, 17 Jan 2006 08:05:00 GMT</pubDate><guid>http://www.tkk7.com/JDeodar/archive/2006/01/17/28311.html</guid><wfw:comment>http://www.tkk7.com/JDeodar/comments/28311.html</wfw:comment><comments>http://www.tkk7.com/JDeodar/archive/2006/01/17/28311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JDeodar/comments/commentRss/28311.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JDeodar/services/trackbacks/28311.html</trackback:ping><description><![CDATA[<b>Remoting -- q程调用</b><br><br>分布式计第一法则Q不要分布你的对?-Martin Fowler《企业应用架构模式?br><br>l典的Javaq程Ҏ的根源,RMIQRemote Method InvocationQ是JDK1.1中引入的。基于Java的序列化机制通信协议时可接插的?br>所有的RMI服务必须要实现某个承自java.rmi.Remote的接口?br>保持q程通信无状态——这也是Mq程调用应该谨记的法则。如果真需要有状态的会话Q可以考虑用EJB的有状态的Session BeansQ或是具备HttpSession功能的web service?br><i><u><br><b>一、经典的J2SEq程ҎQRMI</b></u></i><br>A、访问和曝露RMI服务<br>讉KRMI服务Q只需通过java.rmi.Naming查找一个RMI的URL地址卛_。每ơ查N返回一个服务器端RMI服务实例的一个代理:和EJB不同Q没有组件池的概c?br><br>Spring环境中的讄<br>在Spring的bean工厂或应用上下文中,可以用RmiProxyFactoryBeancL定义RMI服务的客L代理?br>也可以借助RmiServiceExportercL露ؓRMI服务Q不q被曝露的beanlg必须遵@RMI服务的实现要求?br>Z避免让客L直接针对RMI接口~程QRMI服务的实现类在实现RMI服务接口之外Q也可以实现与RMI无关的业务接口(business interfaceQ[同样Ҏ的业务接口]。这P客户端只需要依赖普通的业务接口Q不需要依赖RMI接口?br>坏处Q必LM持“业务接口”与“远E接口”之间的同步?br><br>B、用RMI调用器实现透明q程调用<br>借助Java反射机制Q通过RMI调用器(RMI invokerQ发送方法调用?br><br><u><i><b>二、经典的J2EEq程机制QEJB</b></i></u><br><br><i><u><b>三、基于WSDL的web ServicesQJAX-RPC</b></u></i><br>J2EE1.4版本最大的q步在于对web services的支持,其下的基规则是WSDLQWeb Service Description LanuageQweb service描述语言Q和SOAPQSimple Object Access ProtocolQ简单对象访问协议)?br><br>WSDL是一UXML格式Q用于将|络服务描述Zl对消息的端Ҏ作,消息中包含面向文档或者面向过E的信息。操作和消息都将被抽象地描述Qƈ随后被绑定到具体的网l协议和消息格式Q用于定义一个端炏V彼此连接的具体端点可以组合ؓ抽象端点Q服务)?br>--WSDL是对远E服务的q_无关的描q?br><br>A、访问web service<br>每个ZWSDL的web service都由一个服务(serviceQ构成,其中定义了一个或者多个端口(portQ。每个端口对应服务器上的一个服务端点(service endpointQ,一个由WSDL定义的web service中可以汇聚多个端炏V这与经典的q程服务QEJBQ不同,后者不支持q样的分隔?br>Z讉K一个服务,JAX-RPC需要下列参敎ͼ<br>1、WSDL文档的URL<br>2、WSDL服务的命名空间URL<br>3、WSDL服务的名U?br>JAX-RPC提供了三U访问服务端点的途径Q?br>1、静态存根:--不推?br>2、动态代理:--一U通过Java接口讉Kq程服务的有效途径Qƈ且是可配|的?br>3、动态调用接口(DIIQ:--提供了最大限度的解耦?br><br>B、Spring环境中的配置<br>曝露一个JAX-RPC服务<br><br>C、Servlet和EJB端点<br>JAX-RPC规范描述了两U服务端点的实现Qservlet端点QServlet endpointQ模型和EJB端点QEJB endpointQ模型?br><b><br><i><u>四、轻量q程ҎQHessian和Burlap</u></i></b><br>RMI环境的配|相当麻烦,q且使用的网l端口常常被防火墙禁止。基于WSDL和SOAP的web service又很难以一U可UL的方式导出,q且׃它们的协议臃肿冗长,会浪费大量的带宽。基于HTTP的轻量q程调用协议解决了上qC个问题:它们可以在Q何标准的servlet容器之上q行Qƈ且可以穿Q何防火墙?br>1、访问和曝露Hessian和Burlap服务<br>2、在Spring环境中的配置<br>--JPetStore展示Spring环境中用Hessian和Burlap、RMI和JAX-RPCQ借助Apache AxisQ来曝露q程服务Q同时提供远E服务客L的示例?br><br><b>Replacing Other EJB Services -- 替换其他的EJB服务</b><br><br>1、持久化<br>2、远E调用机?br>3、CMT<br>4、线E管?br>5、SLSB实例?br>6、声明性、基于角色的安全?br><br><img src ="http://www.tkk7.com/JDeodar/aggbug/28311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JDeodar/" target="_blank">JDeodar</a> 2006-01-17 16:05 <a href="http://www.tkk7.com/JDeodar/archive/2006/01/17/28311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>诅RJ2EE Development without EJB?W记?/title><link>http://www.tkk7.com/JDeodar/archive/2006/01/13/27976.html</link><dc:creator>JDeodar</dc:creator><author>JDeodar</author><pubDate>Fri, 13 Jan 2006 14:24:00 GMT</pubDate><guid>http://www.tkk7.com/JDeodar/archive/2006/01/13/27976.html</guid><wfw:comment>http://www.tkk7.com/JDeodar/comments/27976.html</wfw:comment><comments>http://www.tkk7.com/JDeodar/archive/2006/01/13/27976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JDeodar/comments/commentRss/27976.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JDeodar/services/trackbacks/27976.html</trackback:ping><description><![CDATA[<b>Tansation Management -- 事务理</b><br><br>应用E序可以用于以下两种手段来管理容器事务,从而控制应用服务器的事务管理服?br>1、编E式事务理Q用JTA UserTransaction对象Q通过JNDI获取<br>2、声明式事务理Q通过使用l徏模型Q即EJB CMTQ,q是一U徏立在JTA基础设施之上的高层的服务<br>q两U方法通常都被命名为“受控的事务”(EJB CMTQ?br><br>容器理事务QContainer-Managed TransactionQ?br>优点Q把事务理从Java代码中挪CEJB部v描述W中。因此事务编E了一个无需编码的横切面?br>~点Q?br>1、只有EJB才能够用声明式事务理<br>2、声明式事务实际上也W合80-20原则<br>3、EJB CMT必须使用全局事务理Q如果仅需要单事务的资源,大材用?br><br>Spring的声明式事务理建立在Spring的AOP框架之上Q所以Spring的事务管理需要带有AOP功能的Spring Bean工厂?br>事物的传播类型:Q?U)<br>1、“required”运行在当前的事务范围内Q如果当前没有启动事务,那么创徏一个新的事?br>2、“supports”运行在当前的事务范围内Q如果当前没有启动事务,那么׃在事务范围内执行<br>3、“mandatory”运行在当前的事务范围内Q如果当前没有启动事务,那么抛出异常<br>4、“requires new”创Z个新的事务,如果当前启动了事务,那么挂v当前事务<br>5、“not supported”不在事务范围内执行Q如果当前启动了事务Q那么挂起当前事?br>6、“never”不在事务范围内执行Q如果当前启动了事物Q那么抛出异?br>默认的事务类型是“required”,适用于绝大多数的情况?br><br>~程式事务管理通常有以下两U用方式:一是通常的用方式,在一个catch代码块中对Q何异常进行回滚处理;二是通过一个“控制反转(IoCQ”模版类和一个回调实现?br>事物理最适合使用AOP?br><br>Spring的事务处理最重要的好处是Q在不需要Q何部|步骤和特定的需要的情况下,可以让POJO具备事务处理能力?br><br>YAGNIQYou Arent Gonna Need ItQ不要ؓ不必要的需求埋单)<br><b><br>Persistence -- 持久?/b><br>Patterns of Enterprise Application ArchitectureQ?002 Martin FowlerQ,常简UPOEAA -- 一定要?br><br>处理扚w存取和批量更新时QO/R映射会有问题Q不知道什么时候才能解决优化呢Q?br><br>下面的征兆,可以考虑使用O/R映射Q?br>1、针寚w域对象的“加?~辑/存储”流E,例如先加载一条品记录,对其q行修改Q然后更C数据库?br>2、对象以扚w查询的方式取出,但更新和删除则是单独q行?br>3、大量对象需要积极地~存Q通常出现在“读操作q多于写操作”的情况下,如web应用。)<br>4、在领域对象与数据库?字段之间有一个相当自然的对应关系?br>5、不需要对SQLq行特别的优化?br><br>l粒度的领域模型不应该用重量U的EJBlg来徏模,而应该用单的Java对象——POJOQPlain Old Java ObjectQ——来建模?br>所有的持久化技术必然会涉及对资源的理Q?br>1、连接工?br>2、连?br><br>DAO模式的用途是“与持久化相关的代码”从业务逻辑中分d来,换句话说Q把业务程和规则放在一边,与持久化相关的问题放在另一辏VDAO模式需要一个DAO接口Q以便将特定的数据访问实现细节隐藏v来?br><br>使用Spring框架q行数据讉K<br>1、Spring的bean工厂和应用上下文容器使得应用E序中的各种对象能够L地装配v来?br>2、Spring有一个清晰的事务模型<br>3、Spring提供了一个通用的数据库讉K异常体系?br>4、对于各U持久化方式QSpring用Ş式统一的模版机制解决了关闭q接、处理异常等问题?br><br>JdbcTemplate实例Q以及别的Spring模版Q都是线E安全的Q允许多U程复用。因此只需要在DAO初始化将一个JdbcTemplate实例提供l它Q所有的DAOҎ都可以用这同一个模版实例,不必担心M同步问题?br><br>Spring框架提供了另一个层ơ较高的JDBC抽象Q可询操作、更新操作或是存储过E?br><img src ="http://www.tkk7.com/JDeodar/aggbug/27976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JDeodar/" target="_blank">JDeodar</a> 2006-01-13 22:24 <a href="http://www.tkk7.com/JDeodar/archive/2006/01/13/27976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebWork 2.2: Released ->StrutsTi !http://www.tkk7.com/JDeodar/archive/2006/01/13/27865.htmlJDeodarJDeodarFri, 13 Jan 2006 02:46:00 GMThttp://www.tkk7.com/JDeodar/archive/2006/01/13/27865.htmlhttp://www.tkk7.com/JDeodar/comments/27865.htmlhttp://www.tkk7.com/JDeodar/archive/2006/01/13/27865.html#Feedback2http://www.tkk7.com/JDeodar/comments/commentRss/27865.htmlhttp://www.tkk7.com/JDeodar/services/trackbacks/27865.html?/b>”着赎ͼ什么时候才能?b>?/b>”着走呢Q什么时候才能?b>一?/b>”走Q不怎么_必须前进Q才能跟上发展的潮流Q原C动,M有一天会淡出在IT技术的圈圈。前一D|间有个韩? 《加油,金顺Q》,虽然没看q,来个引用吧,加aQ需要努力的Z?img src ="http://www.tkk7.com/JDeodar/aggbug/27865.html" width = "1" height = "1" />

JDeodar 2006-01-13 10:46 发表评论
]]>
诅RJ2EE Development without EJB?W记?/title><link>http://www.tkk7.com/JDeodar/archive/2006/01/11/27644.html</link><dc:creator>JDeodar</dc:creator><author>JDeodar</author><pubDate>Wed, 11 Jan 2006 13:55:00 GMT</pubDate><guid>http://www.tkk7.com/JDeodar/archive/2006/01/11/27644.html</guid><wfw:comment>http://www.tkk7.com/JDeodar/comments/27644.html</wfw:comment><comments>http://www.tkk7.com/JDeodar/archive/2006/01/11/27644.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JDeodar/comments/commentRss/27644.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JDeodar/services/trackbacks/27644.html</trackback:ping><description><![CDATA[<b>Declarative Middleware Using AOP Concepts -- ZAOP概念的声明性中间g</b><br><br>    AOP的全U是面向斚w~程(Aspect-Oriented Programming)Q这是Gregor Kiczales?996q在PARC提出的一个术语。AOP是一U与OOP截然不同的看待应用程序结构的方式Q按照AOP的观念,pȝ被分解ؓ斚w(aspect)或者关注点(concern),而不是对象?br><font color="#008000"><i>    曄有一位同行把他理解ؓ面向切面~程Q更h几何学的味道Q也很容易理解?/i></font><br><br>    <b>AOP的目?/b>是将横切?crosscutting)的问题以一U更加通用的方式模块化Q从而提升程序的模块化程度?br><br>    <font color="#008000"><i>AOP应该看作是OOP的补充,而不是竞争对手、替代者,AOP不仅可以减少重复代码的麻烦,而且为系l的领域模型的设计上带来一U更加完善的理念?br></i></font><br>    几个关于AOP术语定义Q?br>1、关注点(concern)Q一个关注点可以是一个特定的问题、概c或是应用程序的兴趣区间--总而言之,应用E序必须辑ֈ的一个目标?br>2、横切关注点(crosscutting concern)Q如果一个关注点的实C码散落在很多个类或方法之中,q之ؓ“横切关注点”?br>3、方?aspect)Q一个方面是对一个横切关注点的模块化Q它那些原本散落在各处的、用于实现这个关注点的代码规整到一处?br>4、连接点(join point)Q程序执行过E中的一点,例如Q?br>    Ҏ调用(method invocation)Q对ҎQ可能包括构造子Q的调用?br>    字段讉K(field access)Q读或写实例变量?br>    异常抛出(throws)Q特定的异常被抛出?br>5、增?advice)Q在特定q接Ҏ行的动作?-很多AOP框架都以拦截?interceptor)的Ş式来表现增强---所谓拦截器是这L一个对象:当连接点被调用到Ӟ它会收到一个回调信息?br>6、切入点(pointcut)Q一l连接点的ȝQ用于指定某个增强应该在何时被调用。切入点常用正则表达式或别的通配W语法来描述?br>7、引?introduction)Qؓ一个现有的JavacL接口dҎ或字Dc?br>8、؜入?mixin inheritance)Q一个“؜入类”封装了一l功能,q组功能可以被“؜入”到现有的类当中Qƈ且无L助于传统的承手Dc?br>9、织?weaving)Q将斚w整合到完整的执行程Q或完整的类Q此时被植入的便是引介)中?br>10、前增强(before,pre)Q在q接点调用之前,首先调用增强?br>11、后增强(after,post)Q在q接点调用之后,再调用增强?br>12、环l增?around)Q这cd强可以完全控制执行流E?br>13、拦截器(interceptor)Q一UAOP的实现策略?br>14、AOP代理(AOP proxy)Q即被增?advice)的对象引?--也就是说QAOP增强在其上执行的这样一个对象引用?br>15、目标对?target object)]<br>16、增强器(advisor)Spring引入的概念,׃个部分组成:一个增强,以及一个用于说明“在何处q行增强”的切入炏V增强器完整地模块化了一个方面。这P切入点和增强也可以各自独立地复用?br><br>    Decorator模式Q需要针Ҏ个目标类单独~写一个定制的装饰器?br>    Observer模式Q必L入一些与业务逻辑无关的代码?br>    Chain of ResponsibilityQ责任链Q模?允许一个请求在一条对象链上传播,直到其中的某一个对象负责处理请求ؓ止?br><br>    Servlet2.3规范引入的servlet拦截器会在处理webh的前后被调用?br><br>    AOP技术的主要{略QJ2SE动态代理、动态字节码生成、Java代码生成、用定制的cd载器、语a扩展?br><br>    动态代?dynamic proxies)Q是一U强大的语言l构?br>    动态代理最大的好处在于Q这是一U标准的Java语言Ҏ。除了AOP框架之外不需要第三方库,也不会受到应用服务器的Q何媄响?br>    动态代理的最大局限性在于:它只能针Ҏ口进行代理,不能针对cR不是坏?-因ؓAOP主要针对业务对象Q而业务对象通常应该是放在业务接口之后的?br><br>    动态字节码生成(dynamic byte code generation)Qؓ了针对JavacL供代理,我们需要动态代理之外的工具Q那是动态字节码生成。Java的反和c装载机刉非常开放?-最行的工具CGLIB(Code Generation Library)。CGLIB是通过l承来实C理的Q所以无法ؓfinalҎ提供代理?br><br>    Java代码生成Q由于前两者的出现Q其正在退出流行?br><br>    使用定制的类加蝲?-Q?br><br>    语言扩展<br><br>    AOP实现QAspectJ、AspectWerkz、JBoss4、Spring<br>    AspectJ可以对Q何方法调用、字D访问、对象构造、异常抛行增强?br>    AspectWerkz和AspectJ已合q?br>    JBoss4的AOP框架和JBoss应用服务器的邦定Q损害了J2EE“可UL性”的优点?br><br>    <font color="#008000">AOP在J2EE应用中的价值大多体现在Ҏ拦截?-q几q_q会是这样么Q?/font><br><br>    通常AOP用于业务对象提供增强Q在q种情况下,拦截的性能开销Ҏ不成问题。关键:什么粒度夏使用AOP?br>    一ơ涉及凡是的Ҏ调用需要耗费的时间是毫秒U的--在服务器环境下通常在几毫秒臛_几毫U的范围。从比较来看Q一ơ数据库只读讉K的时间开销通常是数十毫U,通过览器访问web面的网lgq则是百毫秒U的。也是_对于一个由q程客户端发赗需要涉及一Cơ数据库讉K的业务操作来_“通过反射调用业务Ҏ”的旉开销完全可以忽略不计?br><br>    <b>AOP最有h值的用?/b>是在业务方法的_度上提供通用的企业服务Q譬如声明性事物管理和声明性安全检查等?br><br>    AOP和IoC之间有特别紧密地合作关系?br><br>    Spring中的AOP实践<br>    1、用ProxyFactoryBeanQ创建AOP代理的基本途径?br>    2、便利的FactoryBeanQ例如TransactionProxyFactoryBeanQ声明性的事物理Q?br>    3、自动代?br><br>    <b>AOP使我们开始在领域模型的层面上分析和识别横切关注点Q就像分析和识别对象一栗?/b><img src ="http://www.tkk7.com/JDeodar/aggbug/27644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JDeodar/" target="_blank">JDeodar</a> 2006-01-11 21:55 <a href="http://www.tkk7.com/JDeodar/archive/2006/01/11/27644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>诅RJ2EE Development without EJB?W记?/title><link>http://www.tkk7.com/JDeodar/archive/2006/01/09/27284.html</link><dc:creator>JDeodar</dc:creator><author>JDeodar</author><pubDate>Mon, 09 Jan 2006 09:40:00 GMT</pubDate><guid>http://www.tkk7.com/JDeodar/archive/2006/01/09/27284.html</guid><wfw:comment>http://www.tkk7.com/JDeodar/comments/27284.html</wfw:comment><comments>http://www.tkk7.com/JDeodar/archive/2006/01/09/27284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JDeodar/comments/commentRss/27284.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JDeodar/services/trackbacks/27284.html</trackback:ping><description><![CDATA[    自己虽然研究q一点Spring,也写q一点利用Spring的代码,但是从来没有认真的从头到研究qSpringQ导致其中细节概忉|؜乱,再看到第7章,Spring框架介时Q又体会Cq一点,希望能够快抽出旉Q能够详l阅L关Spring的文章和书籍Q从中体会和理解<b>IoC的“精”和Spring的“细节?/b>?br><b>1、核心bean工厂</b><br>    1.1 基础接口Q?br>          BeanFactory<br>          ListableBeanFactoryQ只可用于当前的工厂实例Q而不能进入工厂的层体系Q?br>          beanFacoryUtilsQ可以遍历整个工厂体p)<br>    1.2 通过XMLl装beanQ?br>          定义beanlgQ借助标准的java.beans.PropertyEditor机制Qbean工厂可以自动把Stringcd的D{换ؓ适当的类型)<br>          讉KbeanlgQ?b>a:</b>XmlBeanFactory?b>b:</b>DefaultlistableBeanFactory和XmlBeanDefinitionReaderQ?br>    1.3 非XML格式的Bean声明<br>          d属性文件或资源包(PropertiesBeanDefinitionReaderQ?br>          ~程方式注册QRootBeanDefinition和MutablePropertyValuesQ?br>    1.4 l装应用对象<br>          bean工厂可以Ҏbean属性中描述的对象依赖来l装QwireQbean实例Q得Spring容器能够对受对象进行依赖决议(dependency resolvingQ?br>    1.5 自动装配QautowireQ?br>          byType、byNameQ推荐byType(出错可能?<br>    1.6 依赖查(dependency checkingQ?br>          <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">bean </span><span style="color: rgb(255, 0, 0);">id </span><span style="color: rgb(0, 0, 255);">="****"</span><span style="color: rgb(255, 0, 0);"> class</span><span style="color: rgb(0, 0, 255);">=""</span><span style="color: rgb(255, 0, 0);"> autowire</span><span style="color: rgb(0, 0, 255);">="byType"</span><span style="color: rgb(255, 0, 0);"> dependency-check</span><span style="color: rgb(0, 0, 255);">="objects"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><img src="http://www.tkk7.com/images/dot.gif"><img src="http://www.tkk7.com/images/dot.gif">.</span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">></span></div><br>          gؓ“object”时Q表C只做对象间兌的检查;<br>          gؓ“simple”时Q表C只查基本类型的属性(原始cd或者StringQ;<br>          gؓ“all”时Q表C检查所有的cdQ?br>          gؓ“none”,表示不进行依赖检查;<br>    1.7 生命周期回调<br>          在beanlg声明中指定回调方?br>             <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);"> <</span><span style="color: rgb(128, 0, 0);">bean </span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="*****"</span><span style="color: rgb(255, 0, 0);"> class</span><span style="color: rgb(0, 0, 255);">="****"</span><span style="color: rgb(255, 0, 0);"> init-method</span><span style="color: rgb(0, 0, 255);">="initialize"</span><span style="color: rgb(255, 0, 0);"> destory-method</span><span style="color: rgb(0, 0, 255);">="shutdown"</span><span style="color: rgb(0, 0, 255);">/></span></div><br>          ***cd需提供无参数、访问别ؓpublic的initialize和shutdown两个Ҏ卛_Q不必实CQ何SpringҎ的接口(不依赖SpringQ?br>          只要有可能,应该量使用JavaBean的属性或者构造子参数Q而不是实现Spring生命周期Ҏ?br>    1.8 复杂的属性?br>          数组和Listl装方式一P<br> <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 128);">1</span> <span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="myArrayList"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">2</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">list</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">3</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">ref </span><span style="color: rgb(255, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">="ABean"</span><span style="color: rgb(0, 0, 255);">/></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">4</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">ref </span><span style="color: rgb(255, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">="BBean"</span><span style="color: rgb(0, 0, 255);">/></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">5</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);">myArrayValue</span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">6</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);">myListValue</span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">7</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">list</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">8</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">></span></div><br>          Map和Properties都一个Key?但是不一P废话一句)Q?br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="myMap"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">map</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">entry </span><span style="color: rgb(255, 0, 0);">key</span><span style="color: rgb(0, 0, 255);">="myMapKey"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">ref </span><span style="color: rgb(255, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">="myBean"</span><span style="color: rgb(0, 0, 255);">/></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">entry</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">entry </span><span style="color: rgb(255, 0, 0);">key</span><span style="color: rgb(0, 0, 255);">="yourMapKey"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);">yourMapValue</span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">entry</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">map</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">></span></div><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="myProperties"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">props</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">prop </span><span style="color: rgb(255, 0, 0);">key</span><span style="color: rgb(0, 0, 255);">="myPropKey"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);">            myPropValue<br></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">prop</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"><</span><span style="color: rgb(128, 0, 0);">prop </span><span style="color: rgb(255, 0, 0);">key</span><span style="color: rgb(0, 0, 255);">="yourPropKey"</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);">            yourPropValue<br></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">prop</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">props</span><span style="color: rgb(0, 0, 255);">></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);"></</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">></span></div><br><b>2、工厂bean</b><br>    2.1 工厂beanQfactory beanQ?- 它们实现了org.springframework.beans.factory.FactoryBean接口Q?br><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">interface</span><span style="color: rgb(0, 0, 0);"> FactoryBean{<br>    object getObject() </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> Exception;<br>    Class getObjectType();<br>    </span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);"> isSingleton();<br>}</span></div>    2.2 Spring内徏的资源工厂,包括Q?br>          2.2.1 org.springframework.jndi.JndiObjectFactoryBean:一个通用的工厂beanQ通过JNDI查找而获得的对象。JNDI查找由Spring--而不是应用代?-来执行;<br>          2.2.2 org.springframework.orm.hibernate.LocalSessionFactoryBean:用于在本地装配Hibernate SessionFactory的工厂beanQ?br>          2.2.3 org.springframework.aop.framework.ProxyFactoryBean:一个通用的工厂beanQ用于获得AOP代理?br>          2.2.4 org.springframework.transaction.interceptor.TransactionProxyFactoryBean:用于为对象创Z务代理,用于实现h用的声明性食物管理;<br>          2.2.5 org.springframework.remoting.rmi.RmiProxyFactoryBean:q个工厂bean可以为通过RMI讉K的远E对象创Z个代理;<br>          以上为常用的Q不常用的不列了......<br><b>3、Spring 应用上下?br></b>    应用上下文是应用E序的中心注册机构?  <br>    3.1 除了支持bean工厂的全部功能之外,应用上下文还具备了下列功能:<br>        <b>*支持不同信息?/b>。可以用l一的方式根据键获得本地化的信息Q而不依赖地称的信息来源。默认的实现是从资源l定中读取信息?br>        <b>*讉K文g资源?/b>不依赖于实际资源环境Q例如文件系l或ServletContextQ的情况下,Ҏ相对路径载入资源?br>        <b>*支持应用事g</b>。监听器QSpring AOP框架可以作ؓ“事?监听”机制的替代品)?br>    3.2 讉K信息源以及访问文件资源,引用对象依赖更专用的接口--org.springframework.context.ResourceLoaderAware接口--卛_?br>    3.3 信息源,在应用上下文声明一个名为messageSource的MessageSourc对象Q默认实现是ResourceBundleMessageSource,它对标准的java.util.ResourceBundleq行了封装,它唯一需要的参数是basename,也就是资源包的文件名--只读取一ơ,攑օ~存Q也提供了“ReloadableResourceBundleMessageSource?可重新加??br>    3.4 文g资源<br>          实现ResourceLoadAware接口?br>    3.5 Bean Factory 后处?br>          ----------<br><img src ="http://www.tkk7.com/JDeodar/aggbug/27284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JDeodar/" target="_blank">JDeodar</a> 2006-01-09 17:40 <a href="http://www.tkk7.com/JDeodar/archive/2006/01/09/27284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 Jakart Commons Lang 学习一http://www.tkk7.com/JDeodar/archive/2006/01/07/27007.htmlJDeodarJDeodarSat, 07 Jan 2006 10:21:00 GMThttp://www.tkk7.com/JDeodar/archive/2006/01/07/27007.htmlhttp://www.tkk7.com/JDeodar/comments/27007.htmlhttp://www.tkk7.com/JDeodar/archive/2006/01/07/27007.html#Feedback0http://www.tkk7.com/JDeodar/comments/commentRss/27007.htmlhttp://www.tkk7.com/JDeodar/services/trackbacks/27007.htmlJakarta Commons Cookbook
》关于利?commons 包来实现Q生成)toString()、hashCode()、equals()、compareTo()的几个方法,其中感觉利用其在~程中能够带来一些便利,好像在网上某一文章中说到利用生成的toString()不能输出List、Map{对象,l过试验QList和Map中的对象值是可以输出的?br>

JDeodar 2006-01-07 18:21 发表评论
]]>诅RJ2EE Development without EJB?W记?/title><link>http://www.tkk7.com/JDeodar/archive/2006/01/05/26766.html</link><dc:creator>JDeodar</dc:creator><author>JDeodar</author><pubDate>Thu, 05 Jan 2006 11:01:00 GMT</pubDate><guid>http://www.tkk7.com/JDeodar/archive/2006/01/05/26766.html</guid><wfw:comment>http://www.tkk7.com/JDeodar/comments/26766.html</wfw:comment><comments>http://www.tkk7.com/JDeodar/archive/2006/01/05/26766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/JDeodar/comments/commentRss/26766.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/JDeodar/services/trackbacks/26766.html</trackback:ping><description><![CDATA[1、IOC的实现策?ul><li>依赖查找QDependency LookupQ?/li></ul>        <font color="#008000"><i>EJB和其他一些J2EE APIQ例?servletQ都提供了依赖查扑Ş式的IOCQ容器管理对象的生命周期Q受对象则负责查找自己的依赖关pR?/i></font><br><ul><li>依赖注入QDependency InjectionQ?/li></ul>       <i><font color="#008000">让容器去全权负责依赖查询Q受对象只需暴露JavaBean的SetterҎ或者带参数的构造子Q容器可以在初始化时组装对象的依赖关系。由于这U方式不依赖于特定的容器API或接口,UC为“基于语a的IoCQlanguage-base IoCQ”?/font><br><br></i>2、代码风?br><ul><li>针对接口~程、而非针对cȝE,从而在可接插性方面获得最大限度好处?/li></ul>        <font color="#008000"><i>接口~程何等重要?/i></font><br><ul><li>保每个业务对象有自q明确责QQ通过对象之间的协作将责Q区分明确?/li></ul>        <font color="#008000"><i>良好的设计和高素质的E序员才能得以保证?/i></font><br><ul><li>优先考虑使用Strategy设计模式Q而不是具体ѝ?/li></ul>        <font color="#008000"><i>Strategy设计模式q需要多加学习和实践?/i></font><br><ul><li>但凡容器可以解决的问题(比如JNDI查询Q,׃要自q写代码来解决?/li></ul>        <font color="#008000"><i>容器的发展,l我们带来了很大的便利?br><br>下图Z中的一张图Q又重新划了一边,理解方便?br><img src="http://www.tkk7.com/images/blogjava_net/jdeodar/J2EE/IoC.gif" alt="IoC.gif" title="IoC实现{略" border="0" height="262" width="477"><br></i></font><img src ="http://www.tkk7.com/JDeodar/aggbug/26766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/JDeodar/" target="_blank">JDeodar</a> 2006-01-05 19:01 <a href="http://www.tkk7.com/JDeodar/archive/2006/01/05/26766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>诅RJ2EE Development without EJB?W记一 http://www.tkk7.com/JDeodar/archive/2006/01/04/26614.htmlJDeodarJDeodarWed, 04 Jan 2006 14:24:00 GMThttp://www.tkk7.com/JDeodar/archive/2006/01/04/26614.htmlhttp://www.tkk7.com/JDeodar/comments/26614.htmlhttp://www.tkk7.com/JDeodar/archive/2006/01/04/26614.html#Feedback0http://www.tkk7.com/JDeodar/comments/commentRss/26614.htmlhttp://www.tkk7.com/JDeodar/services/trackbacks/26614.html
阅读《J2EE Development without EJB》中文版

W二章(目标Q、第三章Q各U架构)
1、提升生产率更好的办?BR>
 A:架构
  1Q、避免不必要的架构复杂性;
  2Q、避免不必要C用EJBQ?FONT color=#008000>Q简化架构及~程复杂度)
  3Q、用抽象层J2EE或J2SE核心API的复杂性隐藏v来;Q降低程序员~程隑ֺQ?BR>  4Q、尽量用O/R映射工具化持久层Q?FONT color=#008000>QHibernate或者iBATISQ?BR>  5Q、用一个好的应用框架?EM>QSpring或者PicoContainerQ?BR> BQ关注,以及Ҏ?BR>  1Q、专注!弄清自己要解决什么问题,专心把这个问题解军_?FONT color=#008000>Q“方法论”需要好好学习实践)
  2Q、选择一个合适的参考架构,从一个模板应用开始?FONT color=#008000>QAppFuse在代码上有很多值得借鉴的地方)
  3Q、用敏L开发过E?FONT color=#008000>Q敏捷开发需要深入了解学习,值得借鉴的地方很多)
 CQ用合适的工具?BR>  1Q、好的IDEQEclipse或者IntelliJQ?FONT color=#008000>Q个人喜ƢEclipseQ?BR>  2Q、一个单元测试工PJUnitQ?BR>  3Q、一个标准构建工PAntQ?BR>  4Q、一个好的XML~辑器或者IDE插gQ?BR>  5Q、一个有效的源码控制pȝQƈ且与IDE良好集成?/FONT>

2、OO比J2EE重要
 1Q优雅的装领域概念Q隐藏实现细节;
 2Q借助多态描q实现各不相同的对象之间的共通性;
 3Q达C码复用;
 4Q在无须修改现有代码的前提下获得扩展性?BR>
3、针Ҏ口编E?/FONT>
 1Q好处:斚w试、方便用动态代理;Q还有更多的好处Q需要亲自体会)
 2Q针Ҏ口编E,不要针对cȝE。这是一个最基本的OO原则?EM>QGang of FourQGoFQ设计模式值得仔细阅读

4、J2EE应用pȝ最x案的目标
 最单、最Ҏ试、符合OO原则、便于维护、便于扩展?nbsp;Q业务系l达到最x我们的目标,q就需要更多的付出Q?/FONT>



JDeodar 2006-01-04 22:24 发表评论
]]>
վ֩ģ壺 ޾ƷĻAV| ˾þۺ| ձVAҹӰԺ| ɫžžȫƵ| jjzzjjzz߹ۿ| ëƬȫѹۿ| ޳aƬ߹ۿ | ޴߶ר| 붯xxxxx| þþþavëƬ| һëƬһëƬëƬ| Ӱ޴ɫ| AVƬ߹ۿ| ޹Ʒþþ| Ƶ| ڳ˾Ʒձ| ޳꿴Ƭ߹ۿ| պƷרվ| ޸Ƶվ| պשר2020| jizzѲ| þ޾ƷVA| avվëƬ| AVרAVѿ| ޾Ʒ߹ۿ̬ͼ| 97߹ѹۿ| ޾ƷGVͬ| ҹþþþþþþþ| ޸Ƶ| ˳վ߹ۿ| ƷۺϾþĻ| þֻоƷ10| ѵĻɫվ| ޾ƷƵѿ| ѹСƵ߹ۿ| AV߲Ų| ޹ƷAV | ˵վ| ɫͼ| ձvaƵۿ| avŷǮ|