Spring 学习笔记(二)

一 基于XML配置元数据的基本结构:

   <?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <bean id="..." class="...">
      <!-- collaborators and configuration for this bean go here -->
    </bean>
    <bean id="..." class="...">
      <!-- collaborators and configuration for this bean go here -->
    </bean>
    <!-- more bean definitions go here... -->
   </beans>


二 实例化容器:   
   Resource resource =new FileSystemResource("beans.xml");      BeanFactory factory=new XmlBeanFactory(resource);
 

Resource reource =new ClassPathResource("beans.xml"); BeanFactory factory=new XmlBeanFactory(resource); 


     
ApplicationContext context=new ClassPathXmlApplicationContext  (new    String("applicationContext.xml","applicationContext-part2.xml"));
//of course,an applicationContext is just an beanFactory
BeanFactory factory=(BeanFactory)context;


三 组成基于XML配置的多种元数据:
  两种方式:
   [list]
  • (1)
  •   将文件路径作为字符串数组传递给ApplicationContext构造器,如:
       ClassPathXmlApplicationContext  (new    String("applicationContext.xml","applicationContext-part2.xml"));
  • (2)<import resource="..."/>方式
  •    
         <beans>
         <import resource="services.xml"/>
           <import resource="resources/messageSource.xml"/>
           <import resource="/resources/themeSource.xml"/>
            <bean id="bean1" class="..."/>
           <bean id="bean2" class="..."/>
        </beans>

         此处相对路径,斜杠可以忽略...
    [/list]


    四 多种bean:
        在容器内部,这些bean定义由 BeanDefinition对象来表示,该定义将包含以下信息:

        
    • 全限定类名:这通常就是已定义bean的实际实现类。如果通过调用static   factory方法来实例化bean,而不是使用常规的构造器,那么类名称实际上就是工厂类的类名。
    • bean行为的定义,即创建模式(prototype还是singleton)、自动装配模式、依赖检查模式、初始化以及销毁方法。这些定义将决定bean在容器中的行为用于创建
    • bean实例的构造器参数及属性值。比如使用bean来定义连接池,可以通过属性或者构造参数指定连接数,以及连接池大小限制等。
    • bean之间的关系,即协作 (或者称依赖)。

    bean定义
     [img]C:\Documents and Settings\Administrator\桌面\22.bmp[/img]
      除了通过bean定义来描述要创建的指定bean的属性之外,某些BeanFactory的实现也允许 将那些非BeanFactory创建的、已有的用户对象注册到容器中,比如使用  DefaultListableBeanFactory的registerSingleton(..) 方法。不过大多数应用还是采用元数据定义为主。
      BEAN的别名,两种方式:
      
    <alias name="fromName" alias="toName"/>或
      <bean id="bean2" alias="toName" class="..."/>

    实例化BEAN
       在极少数情况下,容器将调用类的静态工厂方法来创建bean实例,
     class属性将用来指定 实际具有静态工厂方法的类(至于调用静态工厂
     方法创建的对象类型是当前class还是其他 的class则无关紧要)。
        用构造器来实例化
       
    <bean id="exampleBean" class="examples.ExampleBean"/>
       <bean name="anotherExample" class="examples.ExampleBeanTwo"/>

            给构造函数指定参数以及为bean实例设置属性将在随后的部份中谈及。

        使用静态工厂方法实例化
           
    <bean id="exampleBean"
                  class="examples.ExampleBean2"
                  factory-method="createInstance"/>

        给工厂方法指定参数以及为bean实例设置属性将在随后的部份中谈
           
        使用实例工厂方法实例化
        
     <!-- the factory bean, which contains a method  called              createInstance() -->
         <bean id="myFactoryBean" class="...">
             ...
         </bean>
          <!-- the bean to be created via the factory bean -->
         <bean id="exampleBean"
               factory-bean="myFactoryBean"
               factory-method="createInstance"/>

    使用容器  
      
    InputStream is = new FileInputStream("beans.xml");
      BeanFactory factory = new XmlBeanFactory(is);

      BeanFactory提供的方法极其简单。它仅提供了六种方法供客户代码调用:
         [list=1]
       
    •  boolean containsBean(String):如果BeanFactory包含给定名
    • 称的bean定义 (或bean实例),则返回true
    •     Object getBean(String):返回以给定名字注册的bean实例。
    • 根据bean的配置情况,如果为singleton模式将返回一个共享的实例,否则
      将返回一个新建的实例。如果没有找到指定的bean,该方法可能会抛出
      BeansException异常(实际上将抛出NoSuchBeanDefinitionException
      异常),在对bean进行实例化和预处理时也可能抛出异常
    •     Object getBean(String, Class):返回以给定名称注册的bean实例,
    • 并转换为给定class类型的实例,如果转换失败,相应的异常    (BeanNotOfRequiredTypeException)将被抛出。上面
      的getBean(String)方法也适用该规则。
    •     Class getType(String name):返回给定名称的bean的Class。
    • 如果没有找到指定的bean实例,则抛出NoSuchBeanDefinitionException异常。
    •     boolean isSingleton(String):判断给定名称的bean定义
    • 或bean实例)是否为singleton模式(singleton将在bean的作用域中讨论)
      如果bean没找到,则抛出NoSuchBeanDefinitionException异常。
    •     String[] getAliases(String):返回给定bean名称的所有别名。






    你可能感兴趣的:(spring,数据结构,bean,xml,Go)