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>
相关推荐
struts+spring+hibernate3+webligic812环境配置备忘录
NULL 博文链接:https://jackyin5918.iteye.com/blog/1912089
NULL 博文链接:https://java-doom.iteye.com/blog/2126725
Spring2.5.3+Struts2.0.11.1+Hibernate3.2.6整合备忘 (转载)
日常SSHF开发中,经常因为Jar包问题头痛。本文档收集了struts2+spring2.5+hibernate+freemarker 所用到的最基本依赖包,对解决Jar包问题非常有帮助。
myfaces+ajax4jsf+spring+jpa+chartCreate 配置备忘 完整eclipse项目源代码
包括mybatis、spring、spring-boot、hbase、hive、impala、guava、jdk等 包含的模块 spring-demo mybatis-demo spring-mybatis-jetty springboot-demo opensource-utils spring-demo spring依赖注入相关demo,包括...
这是个人练习的spring配置定时任务方面的例子,备忘用,不建议下载
2021年Spring该存储库将(希望)跟踪我在2021年Spring学期的笔记。 我还将尝试记录所做的任何修订以供将来参考。最初设定每个文件夹都包含一个班级的相关注释。 注释使用Markdown编写,并在必要时添加LaTeX。 编辑器...
基于SpringBoot+Vue的备忘录系统源码+sql数据库(课程大作业).zip 基于SpringBoot+Vue的备忘录系统源码+sql数据库(课程大作业).zip 基于SpringBoot+Vue的备忘录系统源码+sql数据库(课程大作业).zip 【资源说明】 项目...
spring mvc freemarker 自定义标签demo spring mvc 通过自定义的标签在jsp页面调用,初学,记录下做个备忘
这是spring 测试的示例,个人备忘用!
基于springboot+vue的备忘录管理系统源码+数据库文件(课程设计).zip已获导师指导并通过的97分的高分大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于springboot+vue...
在应用程序网络中添加有用的ReactJ(前端)和Spring Boot(后端)的修饰符和高级注释。 目录 Propos du Projet 事前和事后证明书均以书面形式发表,有能力的人可享有恢复原状的权利。 注释中的“有附加条件的注释...
Android大作业,基于bomb的云备忘录项目源码.zip
开机 我介绍 Spring Boot 的演讲的存储库。 大多数谈话都是实时代码,所以这些实际上只是保存点和备忘单。
java二八杠源码Java备忘单 以 Jet Speed 回顾 Java 9 概念。 完整的 Java 课程 介绍 背景 Java的流行 平台独立或便携 面向对象语言 安全 丰富的API 很棒的 IDE 无所不在 Web 应用程序(Java EE(JSP、Servlets)、...
2018Spring网络应用程序 我们将使用react来构建一个习惯跟踪应用程序(例如,您可以使用此Web应用程序跟踪您的新年愿望,其中一个是学习React吗?) 技术: 资源: 备忘单: es6 React 轴距 Lodash 日程 1级 ...
前端大作业基于SpringBoot + Vue的备忘录系统源码+数据库 项目结构 sql => 数据库 memo-java => 后端 memo-vue => 前端 开发环境 MySQL 5.7 JDK 8 技术栈 前端 vue2 Element UI 后端 SpringBoot MybatisPlus