读《J2EE Development without EJB》 笔记三

Posted on 2006-01-09 17:40 JDeodar 阅读(463) 评论(0)  编辑  收藏 所属分类: J2EE
    自己虽然研究过一点Spring,也写过一点利用Spring的代码,但是从来没有认真的从头到尾的研究过Spring,导致其中细节概念混乱,再看到第7章,Spring框架简介时,又体会到了这一点,希望能够尽快抽出时间,能够详细阅读有关Spring的文章和书籍,从中体会和理解IoC的“精神”和Spring的“细节”
1、核心bean工厂
    1.1 基础接口:
          BeanFactory
          ListableBeanFactory(只可用于当前的工厂实例,而不能进入工厂的层级体系)
          beanFacoryUtils(可以遍历整个工厂体系)
    1.2 通过XML组装bean:
          定义bean组件(借助标准的java.beans.PropertyEditor机制,bean工厂可以自动把String类型的值转换为适当的类型)
          访问bean组件(a:XmlBeanFactory、b:DefaultlistableBeanFactory和XmlBeanDefinitionReader)
    1.3 非XML格式的Bean声明
          读取属性文件或资源包(PropertiesBeanDefinitionReader)
          编程方式注册(RootBeanDefinition和MutablePropertyValues)
    1.4 组装应用对象
          bean工厂可以根据bean属性中描述的对象依赖来组装(wire)bean实例,使得Spring容器能够对受管对象进行依赖决议(dependency resolving)
    1.5 自动装配(autowire)
          byType、byName,推荐byType(出错可能小)
    1.6 依赖检查(dependency checking)
         
<bean id ="****" class="" autowire="byType" dependency-check="objects">.</bean>

          值为“object”时,表示只做对象间关联的检查;
          值为“simple”时,表示只检查基本类型的属性(原始类型或者String);
          值为“all”时,表示检查所有的类型;
          值为“none”,表示不进行依赖检查;
    1.7 生命周期回调
          在bean组件声明中指定回调方法
            
<bean id="*****" class="****" init-method="initialize" destory-method="shutdown"/>

          ***类只需提供无参数、访问级别为public的initialize和shutdown两个方法即可,不必实现任何Spring特有的接口(不依赖Spring)。
          只要有可能,应该尽量使用JavaBean的属性或者构造子参数,而不是实现Spring生命周期方法。
    1.8 复杂的属性值
          数组和List组装方式一样;
1 <property name="myArrayList">
2     <list>
3         <ref bean="ABean"/>
4         <ref bean="BBean"/>
5         <value>myArrayValue</value>
6         <value>myListValue</value>
7     </list>
8 </property>

          Map和Properties都一个Key值,但是不一样(废话一句);
 1 <property name="myMap">
 2     <map>
 3         <entry key="myMapKey">
 4             <ref bean="myBean"/>
 5         </entry>
 6         <entry key="yourMapKey">
 7             <value>yourMapValue</value>
 8         </entry>
 9     </map>
10 </property>
 1 <property name="myProperties">
 2     <props>
 3         <prop key="myPropKey">
 4             myPropValue
 5         </prop>
 6         <prop key="yourPropKey">
 7             yourPropValue
 8         </prop>
 9     </props>
10 </property>

2、工厂bean
    2.1 工厂bean(factory bean)-- 它们实现了org.springframework.beans.factory.FactoryBean接口;
public interface FactoryBean{
    object getObject() 
throws Exception;
    Class getObjectType();
    
boolean isSingleton();
}
    2.2 Spring内建的资源工厂,包括:
          2.2.1 org.springframework.jndi.JndiObjectFactoryBean:一个通用的工厂bean,通过JNDI查找而获得的对象。JNDI查找由Spring--而不是应用代码--来执行;
          2.2.2 org.springframework.orm.hibernate.LocalSessionFactoryBean:用于在本地装配Hibernate SessionFactory的工厂bean;
          2.2.3 org.springframework.aop.framework.ProxyFactoryBean:一个通用的工厂bean,用于获得AOP代理。
          2.2.4 org.springframework.transaction.interceptor.TransactionProxyFactoryBean:用于为对象创建事务代理,用于实现简捷易用的声明性食物管理;
          2.2.5 org.springframework.remoting.rmi.RmiProxyFactoryBean:这个工厂bean可以为通过RMI访问的远程对象创建一个代理;
          以上为常用的,不常用的不列了......
3、Spring 应用上下文
    应用上下文是应用程序的中心注册机构。  
    3.1 除了支持bean工厂的全部功能之外,应用上下文还具备了下列功能:
        *支持不同信息源。可以用统一的方式根据键获得本地化的信息,而不依赖地称的信息来源。默认的实现是从资源绑定中读取信息。
        *访问文件资源。不依赖于实际资源环境(例如文件系统或ServletContext)的情况下,根据相对路径载入资源。
        *支持应用事件。监听器(Spring AOP框架可以作为“事件-监听”机制的替代品)。
    3.2 访问信息源以及访问文件资源,引用对象依赖更专用的接口--org.springframework.context.ResourceLoaderAware接口--即可。
    3.3 信息源,在应用上下文声明一个名为messageSource的MessageSourc对象,默认实现是ResourceBundleMessageSource,它对标准的java.util.ResourceBundle进行了封装,它唯一需要的参数是basename,也就是资源包的文件名--只读取一次,放入缓存;也提供了“ReloadableResourceBundleMessageSource”(可重新加载)。
    3.4 文件资源
          实现ResourceLoadAware接口。
    3.5 Bean Factory 后处理
          ----------

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 10, comments - 2, trackbacks - 0, articles - 0

Copyright © JDeodar