`

Spring 备忘 (二)

阅读更多

Spring 学习笔记 (二)

 

10. bean配置的类必须要有一个无参构造器.(p549)

    构造注入配置constructor-arg中配置的value后,最好配置一个type表名数据类型. (p550)

    lazy-init:

      一个设置为lazy-init属性的bean,就意味要延迟加载,也就是IoC 容器将第一次被用到时才开始实例化。

      bean的默认lazy-init=false,不需要延迟加载,IoC 容器将在服务器启动的时候,会解读ApplicationContext.xml文件,

      不管你是不是要使用该bean,都会先进行实例化。这会造成启动的时候,特别的慢。但是,也是最保险的方法。

      据说,在spring设置lazy-init=true的情况下,一个应用可以从 55 秒下降到 8 秒!

    配置bean时,指定name属性指定别名,属性值可使用逗号冒号分号指定多个值,使用指定的任何一个值可访问这个bean.

    

11. bean的作用域

    5种: singleton,prototype,request,session,global session.

    

12. bean的创建方式

    (1) 用构造器创建,配置时,普通配置(设置注入,则类必须要有无参构造器);构造注入,传递相关构造函数的参数

    (2) 使用静态工厂方法,配置一个class:静态工厂类的类名;factory-method:静态方法来产生bean实例的

        配置片段:

        

<bean id="dog" class="test.bean.Being" factory-method="getBeing">
          <!-- 静态工厂方法的参数,配置和普通bean的构造注入配置相同,使用constructor-arg -->
          <constructor-arg value="cat">
          <!-- property 配置普通的依赖注入属性,给调用工厂方法生成的 bean注入属性值 -->
          <property name="msg" value="我是猫">
        </bean>

 

        使用这个配置,Spring先通过调用静态工厂方法创建bean,然后再设置这个bean的属性.

    (3) 调用实例工厂方法.这种方式需要事先配置一个工厂bean,这个bean实例有工厂方法,负责产生具体的bean.

        

<!-- 作为工厂实例的bean -->
        <bean id="personFactory" class="test.PersonFactory" />
        
        <!-- 使用factory-bean 配置工厂实例 -->
        <bean id="chinese" factory-bean="personFactory" factory-method="getPerson">
          <!-- 通过constructor-arg 属性为工厂方法传递参数 -->
          <constructor-arg value="chinese">
        </bean>

 

        

13. 抽象bean和子bean

    重象bean相当于一个bean配置模板,需要设置bean标签属性 abstract="true".抽象bean不会被Spring容器实例化,所以可以不必配置

    class属性.子bean继承抽象bean配置时,需要为bean标签加一个parent属性.

    

14. 工厂bean

    工厂bean是实现了FactoryBean接口的bean,配置了这个bean,在通过id调用getBean时,返回的不是这个工厂bean实例,而是

    调用这个工厂的getObject()方法后返回的返回值.

    如果要获取这个工厂bean本身的实例,则在传递给getBean方法的id前加"&".

    

15 强制初始化bean

    下面的配置片段,depends-on="manager"表示在初始化bean1之前会强制初始化manager

    

    <bean id="bean1" class="..." depends-on="manager">
      <property name="manager" ref="manager">
    </bean>
    
    <bean id="manager" class="..." />

 

    

16. 获取bean本身的id,可以让bean实现BeanNameAware接口,该接口中有个setBeanName(String name)方法.这个setter方法 

    由Spring容器调用,初始化bean时,会调用这个方法,把bean的id设置进来.

    

17. bean的生命周期

    singleton作用域的bean的生命周期使用Spring管理,

    prototype的Bean,Spring负责创建,每次产生一个全新的实例,然后不再跟踪

    这个实例的生命周期,客户端代码自己管理.

    singleton作用域的bean的生命周期分为:

    (1) 注入依赖关系之后:

        配置init-method属性或者让bean实现initializingBean接口(void afterPropertiesSet() throws Exception) 

        如果同时配置了init-method,又实现了接口,则先调用接口方法,然后再调用init-method

    (2) bean销毁之前

        配置destory-method属性 或者 实现 DisposableBean接口

        同时配置,则先执行那个接口方法,然后再执行destory-method属性中配置的bean的方法;

        

        优雅关闭Spring容器,调用AbstractApplicationContext的registerShutdownHook()方法,

        JVM就会在关闭前优雅的关闭Spring容器,并保证在关闭Spring容器之前调用singleton Bean的

        析构回调方法.

        

18. 协调作用域不同步的Bean

    

    问题描述: 用户多次请求singleton的bean,该bean被注入了prototype的属性,由于注入只发生一次,导致

    每次请求singleton时,获得的prototype都是同一个prototype类型的bean,这就违背了prototype的初衷.

    

    解决方式:使用lookup方法:让Spring重写容器中获取prototype类型的bean的抽象方法,返回查找到容器中其他bean.

    

    (1) 配置一个prototype的bean(A),供别的bean依赖

    (2) 在一个singleton的bean(B)中,创建一个抽象的方法,获取上面的被依赖bean

    (3) 在bean(B)的配置中使用lookup-method属性配置,配置片段如下:

        

      <!-- 被依赖的bean,配置scope="prototype" ,范围要配置为prototype,
             如果singleton的,则还是只有一个实例 
        -->
        <bean id="A" class="..." scope="prototype">
        
        <bean id="B" class="....">
          <lookup-method name="getAxe" bean="A">
        </bean>

 

   

分享到:
评论

相关推荐

    Spring 备忘 (一)

    这个备忘系列将探讨 Spring 的主要组成部分和使用方法。 **IoC 容器** IoC 是 Spring 的核心概念,它通过反转对象创建和管理的控制权,使得开发者不再手动实例化对象,而是由框架负责对象的生命周期。Spring 提供...

    struts+spring+hibernate3+webligic812环境配置备忘录

    以下是基于标题“struts+spring+hibernate3+webligic812环境配置备忘录”的详细知识点解析: ### 一、环境搭建与配置 #### 1. WebLogic Server安装与配置 - **安装过程**:首先,下载WebLogic Server 8.1.2版本的...

    Spring 3.1配置文件示例(备忘)

    这篇备忘录将深入探讨 `applicationContext.xml` 文件在 Spring 3.1 中的角色、结构和常见配置元素。我们将讨论如何通过 XML 配置来管理 Bean、属性注入、AOP(面向切面编程)、事务管理和资源加载。 首先,`...

    基于SpringBoot+Vue的备忘录系统源码+sql数据库(课程大作业).zip

    基于SpringBoot+Vue的备忘录系统源码+sql数据库(课程大作业).zip 基于SpringBoot+Vue的备忘录系统源码+sql数据库(课程大作业).zip 基于SpringBoot+Vue的备忘录系统源码+sql数据库(课程大作业).zip 【资源说明】 项目...

    SSHF备忘之依赖包(struts2+spring2.5+hibernate+freemarker)

    其核心模块包括`spring-aop.jar`、`spring-beans.jar`、`spring-context.jar`、`spring-core.jar`、`spring-jdbc.jar`、`spring-orm.jar`、`spring-test.jar`和`spring-tx.jar`。`spring-web.jar`则用于Web应用。 3...

    移动平台多媒体备忘录

    【移动平台多媒体备忘录】是一个专为手机用户设计的应用程序,它允许用户在移动设备上创建、存储和管理多媒体内容的备忘录。这款应用不仅涵盖了文本记录,还支持图片、音频和视频等多媒体形式,极大地丰富了备忘录的...

    Spring2.5.3+Struts2.0.11.1+Hibernate3.2.6整合备忘 (转载)

    Spring2.5.3+Struts2.0.11.1+Hibernate3.2.6整合备忘 (转载)

    Spring_Batch系列文章汇总

    作者通过博客园分享自己在学习和应用Spring_Batch过程中的心得体会和经验教训,目的是为了备忘和引发更深入的讨论,以便收集更多的反馈和建议。希望这样的开放心态能吸引更多经验丰富的开发者参与讨论,共同推动...

    s2sh框架实例——个人备忘录系统源码

    在个人备忘录系统中,Spring可能用于创建数据访问对象(DAO)、业务服务接口及其实现,以及事务管理。 3. **Hibernate框架**:Hibernate是持久层框架,它简化了与数据库的交互。在这个系统中,Hibernate可能用于...

    备忘录模块

    在IT行业中,备忘录模块通常是指一个软件或应用程序中的功能部分,用于帮助用户记录、存储和管理重要的信息和待办事项。这个模块是许多个人和企业日常工作中不可或缺的工具,尤其是在java web环境下,它能够无缝集成...

    myfaces+ajax4jsf+spring+jpa+chartCreate 配置备忘.part1

    myfaces+ajax4jsf+spring+jpa+chartCreate 配置备忘 完整eclipse项目源代码

    java开发备忘录

    - **Spring框架**:依赖注入、AOP、事务管理等,简化企业级应用开发。 - **JDBC**:Java Database Connectivity,用于连接和操作数据库。 9. **Java SE新特性** - **Lambda表达式**:简化函数式编程,从Java 8...

    10备忘录系统(ssm+mysql)

    基于SSM(Spring+SpringMVC+MyBatis)框架和MySQL数据库的备忘录系统,其功能设计通常围绕着用户的日常备忘需求展开,旨在提供一个高效、便捷的信息记录和检索平台。以下是对该系统功能的详细描述: 1. 用户管理 ...

    Android大作业,基于bomb的云备忘录项目源码.zip

    在这个云备忘录项目中,Spring Cloud可能被用来实现服务注册与发现、API网关、负载均衡等功能,提高系统的可扩展性和可靠性。 3. **SSM框架**: SSM是Java Web开发常用的三层架构,包括Spring Framework(负责依赖...

    java ssm备忘录管理系统毕业论文.docx

    Java SSM备忘录管理系统毕业论文 本文主要介绍了基于 Java SSM 框架和 MySQL 数据库的备忘录管理系统的设计与实现。该系统旨在解决传统备忘录管理中的问题,实现信息化和网络化,提高备忘录管理的效率和经济性。 ...

    beiwanglu.rar_备忘录代码

    【标题】"备忘录代码"指的是一个编程项目,它实现了备忘录功能。备忘录应用程序是常见的软件工具,允许用户记录、存储和管理日常生活中的待办事项、提醒和其他重要信息。在这个“beiwanglu.rar”压缩包中,包含的...

    code-memo:代码备忘录, 包含mybatis、spring、spring-boot、hbase、hive、guava、jdk等示例代码

    包括mybatis、spring、spring-boot、hbase、hive、impala、guava、jdk等 包含的模块 spring-demo mybatis-demo spring-mybatis-jetty springboot-demo opensource-utils spring-demo spring依赖注入相关demo,包括...

    Java反射备忘录

    9. AOP(面向切面编程)与反射:反射常用于实现AOP框架,如Spring,通过动态代理实现切面逻辑。 10. 动态代理:Java的`java.lang.reflect.Proxy`类允许创建动态代理,实现接口并在运行时拦截方法调用,这与反射密切...

Global site tag (gtag.js) - Google Analytics