您的位置:首页 > 产品设计 > 产品经理

Expert one on one J2EE development without EJB 摘要(4)

2008-10-23 16:36 447 查看
 
轻量级容器与控制反转
 
管理业务对象,通常都是容器的活。
 
容器去负责装配运行期间的应用对象,而无需在应用代码中查找定位。
 
所谓容器,是指应用代码的运行框架。应用对象在容器里运行,所谓的被容器管理。web容器用户管理servlet及其相关依赖对象。
 
 
任何容器都应该提供下列服务:
声明周期管理:容器用于控制应用对象运行的生存周期--最起码,容器必须将创建新对象的逻辑从使用者那里抽象出来。更精密的生命周期管理可能包括很多的回调机制,在需要激活对象,或者容器本身即将析构时,可以通过这些回调机制通知被管理的对象。
查找服务:容器提供途径,用户获得受管对象的引用
配置管理
依赖决议
 
ejb容器并不管理ejb组件之间的关系,仅仅提供了jndi定位服务。
 
容器,尽管java接口提供了很好的契约-实现分离,但还必须有某种途径帮我们找到一个接口的实现。
 
通过ioc去消除所有的查找代码,让容器自动决定对象间的依赖关系。
 
ioc有两种实现方式:依赖查找和依赖注入。
 
依赖注入:让容器全权负责依赖查询,受管对象只需暴露javabean的setter方法或者带参数的构造,是容器可以在初始化时组装对象的依赖关系。由于这种方式不依赖于特定的容器api或接口,称之为“基于语言的ioc”
 
一个好的ioc组件根本就不需要自己动手查找资源和依赖对象--ioc容器环境中也会提供这样的查找能力。
 
Spring也定义了回调方法(可选),用于实现基于回调的、依赖查询式的Ioc。以引入依赖Spring API为代价,受管对象可以获取一些回调函数,并可以利用这些回调函数查找其他对象、执行额外的初始化操作、或者在容器关闭时释放资源。
 
确保每个业务对象有自己明确的责任,通过对象之间的协议将责任区分明确。轻量级容器管理细粒度的对象协作,如果你编写了一个大包大揽的上帝对象,实际上是浪费这种管理能力。
优先考虑使用策略设计模式,而不是具体继承。即优先考虑委派而非继承。
 
你可以在应用服务器之外做一些集成测试。由于轻量级容器的启动几乎没有任何开销,因此你完全可以在Junit测试用例中实例化一个容器,并用它来配置应用对象。
 
spring是一个完整的应用框架
spring提供了很多即拿即用的bean工厂实现。
 
 
应用上下文是对bean工厂的扩展:它在bean工厂的基础上增加了对信息源和资源加载的支持,并提供了接入现有系统的能力。
 
Spring AOP的主要用途是为pojo提供声明性的企业级服务。
自动代理。spring在AOP框架之上提供了更高级别的抽象。
spring定义了一组通用的数据访问异常类型,在创建通用的DAO接口时可以用这些异常类型抛出有意义的异常信息,不依赖底层持久机制。
 
 
在web.xml中定义一个监听器(ContextLoaderListener),用于加载应用上下文(root application context)。这个监听器的定义如下:
 

 
 
初始化完成之后,整个web应用都可以从ServletContext的一个属性中取得根应用的上下文,就像取得其他对象一样。任何能够访问ServletContext的web资源都可以访问应用上下文对象:

 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息