spring学习总结(一)

来源:互联网 发布:四川广电网络在线直播 编辑:程序博客网 时间:2024/05/17 06:37

第一讲 Spring基本用法

一、spring入门

1、设值注入

  1. IOC容器通过成员变量的setter方法来注入依赖的对象。
  2. 在依赖的对象中要有setter方法。
  3. Xml中配置:
    1. 如果A依赖于对象B,B的配置:<bean id=”B” class=”cc.wsyw126.service.imp.B”/>
    2. A的配置:
      <bean id=”A” class=”cc.wsyw126.service.imp.A”/><property name=”变量名” ref=”B”/></bean>
    3. Id:指定该Bean的唯一标示
    4. class:指定该Bean的实现类,此处不可用接口类,必须用实现类。

      2、构造器注入

  4. 在构造实例时,完成依赖关系的初始化。
  5. 要有参数为依赖对象B的构造器。
  6. XML配置:
    1. A的配置:
      <bean id=”A” class=”cc.wsyw126.service.imp.A”/><constructor-arg ref=”B”/></bean>
    2. B的配置同设值注入

二、Spring容器

  1. spring容器最基本的接口时BeanFactory,它有一个子接口ApplicationContext。
  2. ApplicationContext的实现类有:FIleSystemXmlApplicationContext,ClassPathXmlApplicationContext,AnnotationConfigApplicationContext。在web应用中经常使用xml和annotation这两个ApplicationContext。
  3. 使用BeanFactory创建BeanFactory的实例。
    1. //搜索类加载器路径下的beans.xml文件创建Resource对象Resource isr = new ClassPathResource(“beans.xml”);
    2. //搜索文件系统的当前路径下的beans.xml文件创建Resource对象Resource isr = new FileSystemResource(“beans.xml”);
    3. a和b任选其一,后跟下面的代码
      DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();new XmlBeanDefinitionReader(beanFactory).loadBeanDefinitions(isr);
  4. 如果有多个配置文件,那么使用ApplicationContext创建BeanFactory的实例。
    1. ApplicationContext appcontext = new ClassPathXmlApplicationContext(“beans.xml”,”service.xml”);
    2. ApplicationContext appcontext = new FIleSystemXmlApplicationContext(“beans.xml”,”service.xml”);
  5. 类加载器目录:指的就是src目录。

三、让Bean获取它所在的Spring容器

  1. 可以让它实现BeanFactoryAware接口,在该接口中有一个方法:setBeanFactory(BeanFactory beanFactory),这个参数指向创建它的BeanFactory。
  2. 实现ApplicationContextAware接口,在该接口中有一个方法:setApplicationContext(ApplicationContext ctx),这个参数指向创建它的BeanFactory。
  3. 在国际化的时候,需要用ctx,所以这时候就需要获得ctx,就用这种方法。

四、Spring容器中的bean

  1. Bean的定义
    1. default-lazy-init:指定该元素下配置的所有bean默认的延迟初始化行为。
    2. default-merge:指定该元素下配置的所有bean默认的merge行为。
    3. default-autowire:指定该元素下配置的所有bean默认的自动装配行为。
    4. default-autowire-candidates:指定该元素下配置的所有bean默认是否作为自动装配的候选bean。
    5. default-init-method:指定该元素下配置的所有bean默认的初始化方法。
    6. default-destroy-method:指定该元素下配置的所有bean默认的回收方法。
  2. 上述的定义均可在每个子元素中指定——属性名去掉default即可。
    1. 区别:只对特定的bean有作用。对所有的bean有作用。
    2. 当两个定义不一致时,子元素的属性会覆盖的属性。
  3. Bean 的作用域
    1. Singleton:单例模式,在整个spring容器中,singleton作用域的bean将只生成一个实例。
    2. Prototype:每次通过容器的getBean()方法获取prototype作用域的bean时,都将产生一个新的bean实例。
    3. Request:对于一次HTTP请求,request作用域的bean将只生成一个实例。在同一次HTTP请求中,得到的bean都是一个。
    4. Session:对于一次HTTP请求,session作用域的bean将只生成一个实例。在同一次HTTP会话中,得到的bean都是一个。
    5. Global session:每个全局的HTTP session对应的一个bean实例。在典型的情况下,仅在使用portlet context的时候有效。
    6. Bean默认的作用域是:singleton。使用<bean... scope=”prototype”/>进行配置。

五、使用自动装配注入合作者的bean

  1. Spring的自动装配可以通过元素的default-autowire属性指定,该属性对配置文件中所有的bean起作用。
  2. 通过元素的autowire属性指定,该属性只对该bean起作用。
  3. 两种方式中属性可以接受的值:
    1. no:不使用自动装配。需通过ref元素指定。
    2. byName:根据setter方法名进行自动装配。
    3. byType:根据setter方法的形参类型进行自动装配。
  4. 个人觉得基于面向接口编程的思想下,使用byName不如使用byType,然后用ref指定装配的类型(或者用注释指明)
  5. 通过元素中指定default-autowire-candidates属性将一批bean排除在自动装配之外。该属性允许使用模式字符串。
  6. 注入嵌套bean:某个bean所依赖的bean不想被spring容器直接访问,则可以使用嵌套bean。注入嵌套bean
  7. 配置xml
    1. 形参类型是基本类型、String、日期等,直接使用value指定字面值即可。
    2. 形参类型是复合类,那就需要传入一个java对象作为实参。方法有二:
      1. 使用ref引用一个容器中已配置的bean。
      2. 使用元素配置一个嵌套bean。
    3. 注入的是集合类型:
      1. List和数组配置一样
        1. 小学
      2. Map
        1. <entry key="语文" value="82"/>
        2. < entry key="原始社会" value-ref="stoneAxe"/>
      3. Set
      4. 对于list、set、map等元素配置集合类型的参数值,还可以继续配置集合元素。故可以接受下面的子元素:
        1. value:执行集合元素是基本数据类型或字符串类型的值。
        2. ref:指定集合元素是容器中的另一个bean实例。
        3. bean:指定集合元素是一个嵌套bean。
        4. list、set、map:指定集合元素又是集合。

六、spring配置数据源

  1. 有三种方式(dbcp,c3p0,jndi)

七、抽象bean和子bean

  1. 把多个配置中相同的信息提取出来,集中成模板,需要为该bean添加属性:abstract=”true”。
  2. 通过为子bean指定parent属性就可以指定该bean是一个子bean,parent属性指定该bean所继承的父bean的id。

八、强制初始化bean

  1. 指定属性depends-on=””

九、容器中bean的声明周期

  1. 依赖关系注入之后的行为:
    1. 使用init-method属性。配置xml中指定init-method,在类中添加方法init()。
    2. 实现InitializingBean接口。实现方法:afterPropertiesSet()。
  2. Bean销毁之前的行为:
    1. 使用destroy-method属性。配置init-method,在类中添加方法close()。。
    2. 实现DisposableBean接口。实现方法:destroy()。
    3. 创建实例->注入依赖关系->调用afterPropertiesSet->调用init-method方法->对外提供服务->调用destroy->调用destroy-method方法。
0 0
原创粉丝点击