引用: |
在轻量开发中Q您基本上可以: * 合ƈq程、技术和原理? * 优先选择较简单的技术? * 在一个稳固、轻量的基上,q行构徏? * 量争取最可能的透明性? * 使用您可以利用的技术,如依赖注入和 AOP?/TD> |
引用: |
现在Q您已经大概了解了轻量容器。您了解了以下的基本设计理论Q? * 构徏一个接?POJO 的容器,而不是受限制的组? * 使用依赖注入来松散、解析依赖? * 使用拦截?AOPQ将服务?POJO 相关?/TD> |
引用: |
Spring 的重大意? 对于那些使用 Spring 的hQSpring 无疑是革命性的。它的一些简单思想引发了媄响深q的l果Q? * Spring 有力地开拓了企业U服务容器。您不再“隶属”于容器提供?API 或服务。可以?Spring 上下文管理预打包的服务,整合W三Ҏ务或自己~写服务? * Spring 在可试性方面有了长的q步。通过 SpringQ能够用依赖注入将模拟对象插入到难以接触的位置Q在容器外运行对象(因ؓq些对象?POJOQ,甚至使用容器提供不可预知的数据? * Spring 的胶水代码得只要编写很的代码可以轻松插入企业服务。编写的代码少Q维护和扩展代码时工作量p? * Spring 代表一个开放源码项目,重新定义?Java 商业组开发Y件的方式。Spring 对于最?EJB 规范的媄响是不容|疑的,同时也是非常重要的?/TD> |
引用: |
哪一个最好? 目前Q只有一个真正的{案。HiveMind h有趣的创斎ͼPicoContainer h易于使用的模型(理论上)Q但Cg已经投票选择?Spring Framework。随着旉的推U,新的容器可能会成长,HiveMind 可能不断获得市场份额Q但目前QSpring 是您的最佳选择? 如果您愿意冒一些险Q而用不太成熟或不太行的容器,您可能决定实?HiveMindQ如果需要模块别的配置Q或 PicoContainerQ如果想要微的容器Q。如果需要许多胶水代码来集成持久引擎、事务处理策略和安全性等斚wQSpring h最完整的组件堆。但误住:您可以在 HiveMind 容器中?Spring lg?/TD> |
引用: |
本文介绍合力完成一U不同的zdQ应用程序开发。敏捷开发流E,比如极限~程QExtreme ProgrammingQXPQ和 ScrumQ寻求降低流E开销。尽存在许多不同的程Q但它们当中都有一些共同的势Q? * 来重视客户参与,而非重量U需求文? * 通过重构改进质量和设计;重的、自动化的单位测试;q箋集成 * 团队,较少的正式沟通和更多的非正式沟通(15 分钟的站立早会,更多的配对编E) * 短而一致的周期Q最后是客户反馈 敏捷Ҏ剔除了不需要的程Q直到只留下完成工作所必需的流E。尽许多编Eh员理解轻量、敏h法的强大功能Q但许多理人员习惯使用更传l的程。如果您认ؓ敏捷可以帮助您,那么通过应用下列思想来学习如何协调传l管理与敏捷开发流E: * 您使用的语a改ؓ侧重于原则,而非程? * 创徏而灵巧的团队? * 重视可测量的交付? * 重视U性? * 重构代码q自动化试? * 获得客户反馈?/TD> |
引用: |
话 1Q技术L最要紧的? 不论您是在谈?RDBMS q是持久性框Ӟ持久关系都是长期的。您需要知道您选择的方案将长时间拥有市Z额。如果不是,您将冒着被迫d指定框架的风险,而这q您的意愿? 话 2Q对象关pL程序(Object Relational MappersQORMQ隐藏了所有的数据库问题? 持久性框架简化了一些问题,但引入了一些其他的问题。如果您不理解底层架构,那么找懂的h问,或者不要用对象关pL架? 话 3QJDBC L?ORM 要快? 当然了,一个非常协调的特定 Java 实现L会打败普通的 ORMQ但是您很难扑ֈ一个非常协调的 JDBC 应用E序。JDO ?Hibernate 之类的框架提供许多方法来提升性能? 话 4QORM L合适的工具? 常常Q您会发现要求更好的讉K SQL 的问题。您也会发现面向批处理的而非交互式的问题Q或要求直接讉K数据库行Q而非完整的对象模型。这些问题ƈ没有充分利用 ORM。更p糕的是Q一些解x案也怼事? 话 5QJava ?ORM 解决Ҏ是处理持久性的惟一的好Ҏ? 其他语言同样有具有竞争力的持久性策略。Microsoft] {略們于接受关pL据库q与行集一起工作。您让应用程序与关系模式紧密l合Q但是您获得了一U能力,可以l定行集到用L面控Ӟq整个应用程序中它们与~存{略集成Q甚臌防火墙与缓存代理。Ruby 语言?RailsQ后者有一个有效的记录框架。对于许多类型的问题Q记录框架比 Java 技术解x案更加动态和高效? |
引用: |
而言之,Java 语言不是一U生产效率非帔R的程序语a。创做了一些聪明的妥协来从 C++ 夺取控制权,但我们开始ؓ那些妥协付出代h了。在 Beyond Java 一书中Q我详细讨论了这些问题。我仍然为大多数的项目?Java 语言。很Ҏ扑ֈ适合我需要的框架。我能很快地扑ֈE序员和工具。它是一U经q验证的~程语言。我的许多客h太多的遗留代码,修改h工作量太大? 但是Q我已经开始ؓ某些已付目使用不同的语a。对于大型关pL据库上的Z Web 的用L面,Ruby on Rails 是有效的。对于要求有限的可~性和可用性但要求复杂D的应用程序,Seaside 是有效的。许多语a处理丰富的客L开发要?Java 语言好? 我还发现Q如果赢利较大,处于创业阶段的公司愿意承担更多的风险。如果生产效率是首要兛_的问题,团队很小Qƈ且您正在解决一个很适合于动态语a的问题,那么使用动态语a是很有意义的。通过q移CU更加动态的语言和一个更加适合目的框Ӟ我ؓ一个客戯省了 60Q的目预算。通过q移CU技能要求没?Java 语言那么严格的语aQ我让另一个客户减了 30Q?多的职员? 底线Q有Ӟ当考虑轻量U开发时Q值得q Java 语言看一看。在接下来的几篇文章中,我将d Java 语言来探索一U新的语a和几个轻量框架?/TD> |
引用: |
In mid-1999, Tennessee rivers were low, but the Ocoee River was flowing well. As I approached a rapid called Hell Hole, I could see the other tourists shudder with fear, but I wasn't worried. In this massive raft, we had nothing to worry about. In fact, up ahead, a kayaker was playing in the hole, and his body slowly slid down, as if he were on an elevator. We passed over, and he came right back up, still surfing the hole. Strange and wonderful. My raft might be bigger and safer, but there were things it just couldn't do. In his tiny kayak (called a playboat) he could surf the waters beneath the surface to do things seeming alien to those of us in the raft. The Seaside framework is like that. You wouldn't use it for all Web development, but under these circumstances, you might give it a try: * You have sophisticated work flow and want to manage flow from one simple program. * You don't want to stay with a safe, conservative language, like the Java?programming language. * You like Smalltalk or one of the Smalltalk dialects. * You have a start-up company in which picking a productive technology is much more important than picking a fast one. This article gives a high-level tour of Seaside. If you like what you see, you'll have enough information to dive deeper. |
代码: |
<beans> <bean id="MyFirstBean" class="package.MyFirstBeanClass"> <property name="myField" ref local="MySecondBean"/> </bean> <bean id="MySecondBean" class="package.MySecondBeanClass"> </bean> </beans> |
代码: |
<beans> [1] <bean id="accountValidator" class="jpetstore.domain.logic.AccountValidator"/> [2] <bean id="orderValidator" class="jpetstore.domain.logic.OrderValidator"/> [3] <bean id="petStoreTarget" class="jpetstore.domain.logic.PetStoreImpl"/> [4] <property name="AccountDao"><ref bean="accountDao"/></property> <property name="categoryDao"><ref bean="categoryDao"/></property> <property name="productDao"><ref bean="productDao"/></property> <property name="itemDao"><ref bean="itemDao"/></property> <property name="orderDao"><ref bean="orderDao"/></property> </bean> [5] <bean id="petStore" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref bean="transactionManager"/></property> <property name="target"><ref bean="petStoreTarget"/></property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> </beans> |
代码: |
InputStream stream = getClass( ). getResourceAsStream("context.xml"); |
代码: |
XmlBeanFactory beanFactory = new XmlBeanFactory(stream); |
代码: |
Customer cust = (Customer)beanFactory.getBean(myCustomer); |
代码: |
protected static final String CONTEXT_FILE = "WEB-INF/applicationContext.xml"; Biz biz; // session façade FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(CONTEXT_FILE); biz = (Biz) ctx.getBean("biz"); |
代码: |
[1] public class CartItem implements Serializable { /*Private Fields*/ private Item item; private int quantity; private boolean inStock; /*JavaBeans Properties*/ [2] public boolean isInStock() { return inStock; } public void setInStock(boolean inStock) { this.inStock = inStock; } public Item getItem( ) { return item; } public void setItem(Item item) { this.item = item; } public int getQuantity( ) { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } [3] public double getTotalPrice() { if (item != null) { return item.getListPrice( ) * quantity; } else { return 0; } } /*Public methods*/ public void incrementQuantity( ) { quantity++; } } |