Spring深入浅出教程
最全最经典spring_mvc教程

spring mvc学习教程(一)-入门实例引言1.MVC:Model-View-Control框架性质的C层要完成的主要工作:封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。
2.简要概述springmvcSpring C 层框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器,也即使用了一种被称为Front Controller 的模式(后面对此模式有简要说明)。
Spring 的C 层框架使用了后端控制器来、映射处理器和视图解析器来共同完成C 层框架的主要工作。
并且spring 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个对象,即我们后面会经常用到的ModelAndView 对象。
一、入门实例1. 搭建环境在spring的官方API文档中,给出所有包的作用概述,现列举常用的包及相关作用:org.springframework.aop-3.0.5.RELEASE.jar:与Aop编程相关的包org.springframework.beans-3.0.5.RELEASE.jar:提供了简捷操作bean的接口org.springframework.context-3.0.5.RELEASE.jar:构建在beans包基础上,用来处理资源文件及国际化。
org.springframework.core-3.0.5.RELEASE.jar:spring核心包org.springframework.web-3.0.5.RELEASE.jar:web核心包,提供了web层接口org.springframework.web.servlet-3.0.5.RELEASE.jar:web 层的一个具体实包,DispatcherServlet也位于此包中。
后文全部在spring3.0 版本中进行,为了方便,建议在搭建环境中导入spring3.0 的所有jar 包(所有jar 包位于dist 目录下)。
Spring核心技术详解

Spring核⼼技术详解⼀、Sring简介Spring是⼀个分层的Java SE/EE应⽤⼀站式的轻量级开源框架。
Spring核⼼是IOC和AOP。
Spring主要优点包括:⽅便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进⾏控制,避免硬编码造成的程序耦合度⾼。
AOP编程的⽀持,通过Spring提供的AOP功能,⽅便进⾏⾯向切⾯编程。
声明式事务的⽀持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式⽅式灵活地进⾏事务的管理,提⾼开发效率和质量。
⽅便程序的测试,可以⽤⾮容器依赖的编程⽅式进⾏⼏乎所有的测试⼯作。
⽅便集成各种优秀框架,Spring提供了对各种优秀框架的直接⽀持。
⼆、Spring体系结构如下图所⽰,整个spring框架按其所属功能可以划分为五个主要模块,这五个模块⼏乎为企业应⽤提供了所需的⼀切,从持久层、业务层到表现层都拥有相应的⽀持,这就是为什么称Spring是⼀站式框架的原因。
核⼼模块(Core Container) Spring的核⼼模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,⽤配置的⽅式进⾏依赖关系描述。
由IoC容器负责类的创建,管理,获取等。
BeanFactory接⼝是Spring框架的核⼼接⼝,实现了容器很多核⼼的功能。
Context模块构建于核⼼模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能。
ApplicationContext是Context模块的核⼼接⼝。
表达式语⾔(Expression Language)是统⼀表达式语⾔(EL)的⼀个扩展,⽀持设置和获取对象属性,调⽤对象⽅法,操作数组、集合等。
使⽤它可以很⽅便的通过表达式和Spring IoC容器进⾏交互。
AOP模块Spring AOP模块提供了满⾜AOP Alliance规范的实现,还整合了AspectJ这种AOP语⾔级的框架。
详解Springbatch入门学习教程(附源码)

详解Springbatch⼊门学习教程(附源码)Spring batch 是⼀个开源的批处理框架.执⾏⼀系列的任务. 在 spring batch 中⼀个job 是由许多 step 组成的。
⽽每⼀个 step ⼜是由 READ-PROCESS-WRITE task或者单个 task 组成。
1. "READ-PROCESS-WRITE" 处理,根据字⾯意思理解就可以:1. READ 就是从资源⽂件⾥⾯读取数据,⽐如从xml⽂件,csv⽂件,数据库中读取数据.2. PROCESS 就是处理读取的数据3. WRITE 就是将处理过的数据写⼊到其他资源⽂件中去,可以是XML,CSV,或者数据库.⽐如:从CSV⽂件中读取数据,经过处理之后,保存到数据库. spring batch 提供了很多类去处理这⽅⾯的东西。
2.单个task, 也就是处理单个任务。
⽐如在⼀个step 开始之前或者完成之后清除资源⽂件等.3.许多个step 组成在⼀起,就组成了⼀个job. 所以他们之间的关系,就如同下⾯的描述:⼀个 job = 很多steps⼀个step = ⼀个READ-PROCESS-WRITE 或者⼀个task.同样⼀个job = step1 -->step2--step3 这样链表形式的组成.Spring batch 例⼦考虑如下⼀个批处理的例⼦,看起来有点啰嗦,只是为了说明⽤途:1. step1 : 从 A ⽂件夹中读取csv ⽂件,处理之后,写⼊到B⽂件夹中(READ-PROCESS-WRITE)2. step2 : 从 B ⽂件夹中读取CSV⽂件,处理之后,存储到数据库中(READ-PROCESS-WRITE).3. step3 : 删除B⽂件夹下的CSV⽂件。
(⽤到单个task)4. step4 : 从数据库读取数据,处理之后,⽣成XML报表⽂件(READ-PROCESS-WRITE).5. step5 : 读取XML报表,并发送EMAIL给管理员(⽤到单个task)⽤spring batch 我们可以如下定义这个job:<job id="abcJob" xmlns="/schema/batch"><step id="step1" next="step2"><tasklet><chunk reader="cvsItemReader" writer="cvsItemWriter"processor="itemProcesser" commit-interval="1" /></tasklet></step><step id="step2" next="step3"><tasklet><chunk reader="cvsItemReader" writer="databaseItemWriter"processor="itemProcesser" commit-interval="1" /></tasklet></step><step id="step3" next="step4"><tasklet ref="fileDeletingTasklet" /></step><step id="step4" next="step5"><tasklet><chunk reader="databaseItemReader" writer="xmlItemWriter"processor="itemProcesser" commit-interval="1" /></tasklet></step><step id="step5"><tasklet ref="sendingEmailTasklet" /></step></job>整个 job 的执⾏是存储在数据库中的,所以即使是某⼀个step出错失败,也不需要全部从头开始执⾏这个job.下⾯是⼀个真正的⼊门教程例⼦.采⽤ jar包如下:spring-batch-2.2.3 以上版本,但是我在2.2.3版本中发现 org/springframework/batch/core/schema-mysql.sql ⾥⾯的的mysql 创建表的语句是有问题的,也就是少了“," 号导致的问题( NOT NULL, 后⾯⼏个创建表的语句NOT NULL 后⾯少了逗号),当然你可以⾃⼰修改后再执⾏,执⾏完毕后有如下⼏个表:xstream-1.3.jar 必须的。
【SpringFramework】Spring入门教程(三)使用注解配置

【SpringFramework】Spring⼊门教程(三)使⽤注解配置本⽂主要介绍四个⽅⾯:(1) 注解版本IOC和DI(2) Spring纯注解(3) Spring测试(4) SpringJDBC - Spring对数据库的操作使⽤注解配置Spring⼊门说在前⾯学习基于注解的IoC配置,⼤家脑海⾥⾸先得有⼀个认知,即注解配置和xml配置要实现的功能都是⼀样的,都是要降低模块间的耦合度。
仅仅只是配置的形式不⼀样。
关于实际的开发中到底使⽤xml还是注解,每家公司有着不同的使⽤习惯。
所以这两种配置⽅式我们都需要掌握。
基于注解配置的⽅式也已经逐渐代替xml配置。
所以我们必须要掌握使⽤注解的⽅式配置Spring。
配置步骤注意:如果使⽤Eclipse需要先安装了STS插件,或者使⽤STS开发⼯具创建项⽬。
本⽂使⽤IDEA进⾏演⽰。
1.2.1. 第⼀步:拷贝必备jar包到⼯程的lib⽬录。
注意:在基于注解的配置中,我们还要多拷贝⼀个aop的jar包。
如下图:1.2.2. 第⼆步:在类的根路径下创建⼀个任意名称的xml⽂件(不能是中⽂)注意:基于注解整合时,Spring配置⽂件导⼊约束时需要多导⼊⼀个context命名空间下的约束。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"></beans>1.2.3. 第⼆步:创建⼀个服务类创建⼀个测试的服务类,并且加⼊使⽤@Component注解,声明该类允许注⼊到Spring容器package org.cjw.service;import ponent;/*使⽤注解配置时,需要将Spring框架启动就创建对象的类表⽰为组件类表⽰组件类使⽤@Component注解*/@Componentpublic class CustomerService {public void save() {System.out.println("-保存数据-");}}1.2.4. 第四步在spring的配置⽂件加⼊扫描注解<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><!-- 声明扫描包及其⼦包的类,如果发现有组件注解的类,就创建对象并加⼊到容器中去 --><context:component-scan base-package="org.cjw" /></beans>1.2.5. 第五步:测试调⽤代码package org.cjw.test;import org.cjw.service.CustomerService;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class CustomerServiceTest {@Testpublic void testSave() {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");CustomerService customerService = context.getBean(CustomerService.class);customerService.save();}}--测试结果,如果可以调⽤服务⽅法,测试成功。
【SpringFramework】Spring入门教程(一)控制反转和依赖注入

【SpringFramework】Spring⼊门教程(⼀)控制反转和依赖注⼊参考资料说在前⾯什么样的架构,我们认为是⼀个优秀的架构?判断准则:可维护性好,可扩展性好,性能。
什么叫可扩展性好?答:在不断添加新的代码的同时,可以不修改原有代码,即符合开闭原则。
如何让程序的可维护性好,可扩展性好呢?业界有⼀个公认的标准:⾼内聚,低耦合。
⾼内聚:就是尽量将代码写在与之功能描述⼀致的模块中。
如User表的操作写在UserDAO⾥⾯,不要写在⾮UserDAO的类⾥⾯。
低耦合:就是尽量减少类与类之间的直接关系。
(重点)直接关系:Controller层依赖Service层,在Controller层直接new Service层的类的对象。
Service层依赖Dao层,在Service层直接new Dao层的对象。
Spring框架就是通过IoC/DI(控制反转/依赖注⼊)实现程序的解耦。
从⽽提⾼程序的维护性和扩展性。
Spring概述Spring是什么Spring是⼀个JavaEE轻量级的⼀站式开发框架。
JavaEE: 就是⽤于开发企业级(B/S)应⽤的技术。
轻量级:使⽤最少代码启动框架,然后根据需求选择需要使⽤的模块。
重量级:早期的EJB,开发⼀个HelloWorld程序都需要引⼊EJB的全部模块。
⼀站式:提供了表⽰层,服务层,持久层的所有⽀持。
Spring框架出现的背景世界上第⼀套由Java官⽅Sun公司推出的企业级开发框架EJB瞬间风靡全球,被各⼤公司所应⽤。
Spring之⽗,Rod Jonhson是⼀个⾳乐博⼠,在Sun公司的⼤⼒推⼴下,也成为EJB框架的使⽤者。
在深⼊研究完EJB框架(由Sun主导开发的⼀个JavaEE开发框架),⽆法接受这么⼀个框架被吹成世界第⼀,具体查看他吐槽EJB的书《Expert one on one J2EE design and development》。
其中突出被他吐槽最厉害的⼀个点就EJB的重量级,就是只要使⽤EJB⾥⾯任何⼀个组件。
SpringBootActuator介绍-SpringBoot教程深入浅出系列

SpringBootActuator介绍-SpringBoot教程深⼊浅出系列其他教程1. 概述在本⽂中,我们介绍了 Spring Boot Actuator。
我们将⾸先介绍基础知识,然后详细讨论 Spring Boot 2.x 与 1.x 中可⽤的内容。
我们将学习如何在 Spring Boot 2.x 和 WebFlux 中使⽤、配置和扩展这个监控⼯具,利⽤反应式编程模型。
然后我们将讨论如何使⽤ Boot 1.x 执⾏相同的操作。
Spring Boot Actuator ⾃ 2014 年 4 ⽉起与第⼀个 Spring Boot 版本⼀起可⽤。
随Spring Boot 2的发布的Actuator 进⾏了重新设计,并添加了令⼈兴奋的新端点。
我们将本指南分为三个主要部分:什么是Actuator ?Spring Boot 2.x ActuatorSpring Boot 1.x Actuator2. 什么是Actuator ?本质上,Actuator 为我们的应⽤程序带来了⽣产就绪的特性。
由于这种依赖关系,监控我们的应⽤程序、收集指标、了解流量或我们的数据库状态变得微不⾜道。
这个库的主要好处是我们可以获得⽣产级⼯具,⽽⽆需⾃⼰实际实现这些功能。
Actuator 主要⽤于公开有关正在运⾏的应⽤程序的操作信息——健康、指标、信息、转储、环境等。
它使⽤ HTTP 端点或 JMX bean 使我们能够与其交互。
⼀旦这种依赖关系在类路径上,我们就可以开箱即⽤的这些端点。
与⼤多数 Spring 模块⼀样,我们可以通过多种⽅式轻松配置或扩展它。
2.1. ⼊门要启⽤ Spring Boot Actuator,我们只需要将spring-boot-actuator依赖项添加到我们的包管理器中。
在 Maven 中:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>请注意,⽆论 Boot 版本如何,这仍然有效,因为 Spring Boot的BOM中指定了版本。
深入浅出SpringBoot
深入浅出SpringBootSpringBoot是一个快速创建基于Spring框架的Java应用程序的工具。
它支持各种编码和编译工具,可以容易的构建Spring应用程序。
在本文中,我们将深入浅出地学习SpringBoot框架,以帮助您更好地理解并使用它。
一、为什么选择SpringBoot?SpringBoot最大的好处是:快速启动、便于配置,同时又提供了丰富的功能,可以快速部署。
二、SpringBoot的主要优点有哪些?1、基于Spring,使用Spring的所有特性。
2、零配置,开箱即用,少了很多繁琐的配置3、对开发人员友好,简单高效,灵活配置,可以集成多种开发框架。
4、自动配置,快速创建各种类库、Web应用和单元测试。
三、SpringBoot项目搭建1、创建项目:在IDEA中创建Maven项目,勾选“Create from archetype”并选择“maven-archetype-quickstart”。
2、在pom.xml文件中添加SpringBoot的相关依赖:<!-- SpringBoot Web模块依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- SpringBoot JDBC模块依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>3、编写代码:在src/main/java下新建SpringBoot的主类,添加注解@EnableAutoConfiguration来启用自动配置,添加注解@RestController来创建一个RESTful控制器。
Spring中IOC和AOP的深入讲解
Spring中IOC和AOP的深⼊讲解前⾔Spring是⼀个开源框架,Spring是于2003 年兴起的⼀个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍⽣⽽来。
它是为了解决企业应⽤开发的复杂性⽽创建的。
Spring使⽤基本的JavaBean来完成以前只可能由EJB完成的事情。
然⽽,Spring的⽤途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的⾓度⽽⾔,任何Java应⽤都可以从Spring中受益。
简单来说,Spring是⼀个轻量级的控制反转(IoC)和⾯向切⾯(AOP)的容器框架。
这篇⽂章主要讲 Spring 中的⼏个点,Spring 中的 IOC,AOP,下⼀篇说说 Spring 中的事务操作,注解和 XML 配置。
Spring 简介Spring 是⼀个开源的轻量级的企业级框架,其核⼼是反转控制 (IoC) 和⾯向切⾯ (AOP) 的容器框架。
我们可以把 Spring 看成是对象的容器,容器中可以包含很多对象,所以 Spring 有很多强⼤的功能。
⼀句话,Spring 是项⽬中对象的管家,负责管理项⽬中⽤到的所有对象。
所以在项⽬三层架构中,Spring 不属于某⼀特定层。
Spring 的 Hello World想要构建⼀个 Spring 的⼊门程序,我们需要导⼊ 4 个核⼼包和 2 个辅助包,创建⼀个实体类,最主要的是编写核⼼配置⽂件,applicationContext.xml 放在 src 下。
最后写⼀个测试类即可。
此时在测试类中我们不需要在使⽤ new 关键字去创建对象了。
这也正是 Spring 的作⽤所在,会⾃动给我创建对象。
上图展⽰的就是最基本的演⽰,也是很容易就理解了,配置⽂件中配置了 user 对象,我们通过加载配置⽂件来获取对象从⽽避免了使⽤ new 来创建。
深入浅出Spring Native
➢➢➢150万平均每个月有150万个新的Spring 项目被创建出来JVM Ecosystem Report 2021snyk.ioSpring Native provides beta support for compiling Srping Boot applications to native executables with GraaIVM, providing a new way to deploy Spring Boot applications that then run extremely efficiently.•运行Spring Native所需的运行时依赖项,还提供了本机hints API。
•Spring AOT插件使用的Spring类的配置提示,包括各种Spring Boot自动配置。
•Spring原生文档,参考指南,采用asciidoc格式。
•spring原生工具:用于查看映像构建配置和输出的工具。
•Maven和Gradle插件公共的aot转换基础架构。
•测试特定的AOT基础架构。
•顾名思义,AOT转换的gradle和maven的插件•包含各种示例,演示特性的使用,并用作集成测试。
•在构建时,将从主入口点对应用程序进行静态分析。
•未使用的部分将在构建时删除。
•反射、资源和动态代理需要配置。
•Classpath 在生成时是固定的。
•没有类延迟加载:可执行文件中的所有内容都将在启动时加载到内存中。
•一些代码将在构建时运行。
•Java 应用程序的某些方面存在一些不完全支持的限制。
JVMNative •更快的启动•快速响应扩容需求•更快地响应用户请求•更适合本地云计算,尤其是无服务器计算•更少的内存需求•节省资源成本•更多应用程序实例。
实验4 Spring使用基础
实验4 Spring开发基础一、实验目的1.掌握Spring框架的概念、特点及结构。
2.学会利用MyEclipse开发Spring的过程和方法。
3.熟悉applicationContext.xml配置bean的方法。
4.掌握Spring框架的核心技术IoC(DI)、AOP。
二、实验步骤1.运行MyEclipse建立Web Project(File→New→Web Project),项目名称为ex1,如下图所示,单击Finish按钮完成项目创建。
2.右击项目名ex1,在快捷菜单中选择MyEclipse→Project Facets→InstallSpring Facet,单击Finish按钮,完成配置。
3.通过这些步骤,项目中增加了Spring 3.1.1库,项目src文件夹下添加了applicationContext.xml的配置文件。
请查看这些改变。
4.在项目的src文件夹下面建立test包,在该包下面建立Person接口,内含go方法,再建立类Student和Teacher,分别实现Person接口,代码如下:5.在applicationContext.xml中添加如下两个bean的定义:6.在包test中建立Test类,从应用程序上下文中获得对象,并调用对象方法,其中main方法的代码如下:7.运行主类Test,观察并分析运行结果。
8.通过Set方法注入依赖。
修改Student类和Teacher类,分别在其中添加私有字符串属性name和set、get方法(设置姓名,自动生成set、get方法),Teacher 类可以不要getName方法,修改go方法,在输出原有字符串前增加name的输出,代码如下:9.修改applicationContext.xml中的两个bean元素,设置name属性值,修改如下:10.再次运行主类Test,观察并分析运行结果。
11.引用其他bean,在Spring容器中将bean注入需要调用的实例。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、理论知识1.依赖注入、控制反转依赖注入:在运行期,由外部容器动态地将依赖对象注入到组件中控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部窗口负责得。
这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。
2.spring 的主要特性。
(1)降低组件之间的耦合度,实现软件各层之间的解耦。
(2)可以使用容器提供的众多服务,如:事务管理服务、消息服务、JMS 服务、持久化服务等等。
(3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。
(4)容器提供了AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能。
(5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate.(6)对主流的应用框架提供了集成支持。
3.常用技术控制反转/依赖注入---面向切入编程---与主流框架的整合、管理---二、基本实例1.准备搭建环境dist\spring.jarlib\jakata-commons\commons-loggin.jar如果使用了切面编程,还需下列jar 文件:lib\aspectj\aspectjweaver.jar 和aspectjrt.jarlib\cglib\cglib-nodep-2.1.3.jar如果使用了jsr-250 中的注解,还需要下列jar 文件:lib\j2ee\common-annotations.jar2.搭建并测试环境建立名为spring_01_base项目,根据需求导入jar包。
建立一个Junit测试单元SpringEnvTest,测试代码如下:@Testpublic void testEnv() {ApplicationContext ctx = newClassPathXmlApplicationContext("beans.xml");}beans.xml 配置文件在此省略(见下)。
运行此测试如无错,则说明环境搭建成功。
说明:beans.xml 可以在类路径下进行配置,也可以在具体的目录下配置。
可以是一个配置文件,也可以是多个配置文件组成String 数组传入。
3.实例作如下准备工作:(1)建立UseDao接口,代码如下:package com.asm.dao;public interface UserDao {void save();}(2)建立UserDao接口的实现类,UserDaoImplpackage com.asm.dao.impl;import erDao;public class UserDaoImpl implements UserDao{public void save() {System.out.println("执行save方法...");}}(3)在src目录下配置此beans.xml,它的配置如下:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd"><bean id="userDaoImpl" class="erDaoImpl" /></beans>说明:bean 代表一个实质的java 类,通过它的id 可以获取一个此类的一个对象。
补充:让xml 配置文件在编译时提示[windows][preferences][myeclipse][files and editors][xml][xml catalog] 点add,在出现窗口的location 中选“file system”,然后在spring 解压目录的dist/resources 目录中选择“spring-beans-2.5.xsd”,并将key Type 值改为“Schema Location”,key 值为:/schema/beans/spring-beans-2.5.xsd(4)Junit 测试单元SpringEnvTest 中增加如下代码测试:@Testpublic void base() {ApplicationContext ctx = newClassPathXmlApplicationContext("beans.xml");UserDao userDao = (UserDao) ctx.getBean("userDaoImpl");userDao.save();}以上的代码就是通过配置文件beans.xml 获取所需要的实例对象。
4.三种bean 的生成方式除了上面使用的类直接生成方式,还有bean 静态工厂及bean 实例工厂。
bean 静态工厂的配置如下:<bean id="userDaoImpl2" class="erDaoImplFactory" factory-method="getUserDaoImpl"/>相应的工厂类代码如下:package com.asm.dao.impl;public class UserDaoImplFactory {public static UserDaoImpl getUserDaoImpl(){return new UserDaoImpl();}}bean实例工厂的配置如下:<bean id="factory" class="erDaoImplFactory2"/><bean id="userDaoImpl3" factory-bean="factory"factory-method="getUserDaoImpl"/>相应的工厂类的代码如下:package com.asm.dao.impl;public class UserDaoImplFactory2 {public UserDaoImpl getUserDaoImpl() {return new UserDaoImpl();}}5.bean 的作用域singleton:返回bean 的同一个实例,也是默认的作用域(无状态bean使用此作用域)prototype:每次请求都会创建一个实例(有状态bean 使用此作用域)request、session、global session 这三个作用域主要用在web 应用中6.bean 的生命周期(1)什么时候初始化bean 实例当scope=singleton,即默认情况,会在装载配置文件时实例化。
如果希望在调用getBean 时才初始化,可以使用lazy-init="true" 补充:如果希望希望该配置文件中的所有bean 都延迟初始化,则应在beans根结点中使用lazy-init="true"。
当scope=prototype 时,在调用getBean()方法时才会初始化。
(2)生命周期:构造器、init 方法、获取bean 后的操作、destroy 方法(ctx.close、注意如果bean 的scope 设为prototype 时,当ctx.close 时,destroy 方法不会被调用)7.属性注入Setter 方式(1)简单属性(如String):<bean id="userServiceBean" class="erServiceBean"><property name="id" value="10"></property><property name="username" value="张某某"></property></bean>(2)对象属性-外部bean 注入:在上面的<bean>中增加如下配置:<property name="userDao" ref="userDaoImpl"/>对象属性-内部bean注入:在上面的<bean>中增加如下配置:<property name="userDao"><bean id="temp" class="erDaoImpl"/></property>(3)集合属性注入:<property name="list"><list><value>List值一</value><value>List值二</value><value>List值三</value></list></property><property name="set"><set><value>Set值二</value><value>Set值一</value><value>Set值三</value></set></property><property name="map"><map><entry key="one" value="一" /><entry key="two" value="二" /><entry key="three" value="三" /></map></property><property name="pro"><props><prop key="p1">first</prop><prop key="p2">second</prop><prop key="p3">third</prop></props></property>注意:在相应的字段上一定要有setter 方法,才能注入。