第二章 Spring基本用法

合集下载

掌握常用框架的基本用法与应用场景

掌握常用框架的基本用法与应用场景

掌握常用框架的基本用法与应用场景常用框架的基本用法和应用场景可以根据具体的框架来进行讨论。

以下是几个常用框架的基本用法和应用场景。

1. Spring框架:Spring是一个轻量级的Java开发框架,提供了一站式的解决方案,包括依赖注入、AOP、事务管理、Web开发等。

在Spring框架中,可以通过注解或XML配置来管理各个组件之间的依赖关系,并利用Spring的IOC容器来管理对象的生命周期。

应用场景包括Web应用开发、企业应用开发、中小型项目开发等。

2. Hibernate框架:Hibernate是一个Java持久化框架,它提供了将Java对象映射到数据库表的解决方案。

通过Hibernate,开发人员可以简化数据库操作,使用面向对象的方式来进行数据库访问,提高开发效率。

应用场景包括ORM映射、事务管理、性能优化等。

3. Django框架:Django是一个基于Python的Web开发框架,致力于提供高效的、安全的Web应用程序开发解决方案。

它采用了MTV (Model-Template-View)的设计模式,通过模型(Model)与数据库交互,通过模板(Template)生成HTML页面,通过视图(View)处理用户请求。

应用场景包括Web应用开发、数据分析平台搭建等。

4. React框架:React是一个用于构建用户界面的JavaScript库,它提供了高效的组件化开发方式,通过虚拟DOM的技术实现了高性能的界面渲染。

React可以与其他框架或库(如Redux、React Router)结合使用,用于构建单页应用、移动应用等。

应用场景包括前端开发、跨平台移动应用开发等。

除了以上几个框架,还有许多其他常用框架,如Angular、Vue.js、Express等,它们都有各自的特点和适用场景。

掌握这些常用框架的基本用法和应用场景,可以帮助开发人员更高效地进行软件开发,提高开发质量和效率。

此外,不仅要掌握框架的基本用法,还要提升自己的拓展能力,如深入学习框架的源码、参与开源社区、阅读相关的技术文章和书籍等,才能更好地应对各种应用场景和解决复杂问题。

Spring参考手册

Spring参考手册

第一部分 Spring框架的概述Spring框架是一个轻量级的解决方案和为构建企业级应用程序潜在的一站式服务。

然而,Spring是模块化的,允许你只使用那些你需要的部分,而忽略其他部分。

你可以在使用Struts时用Spring的IoC 容器,但你也可以只使用Hibernate 集成代码或JDBC抽象层。

Spring框架支持声明式事务管理、通过RMI或web服务远程访问你的逻辑,还有多种方式处理数据的持久化。

它还提供一个全能的MVC框架,并且能将AOP移植进你的软件。

Spring被设计为非侵入式的,意味着你的逻辑代码完全不必依赖于此框架。

虽然一些基于数据访问技术和Spring的库会存在于你的集成层(例如数据访问层),但是你的其他代码很容易隔离这些依赖。

1.开始使用Spring这篇手册提供了关于spring框架的详细信息,不仅有全面的特性,还有一些关于spring包含的潜在的概念(例如“依赖注入”)的背景知识。

如果你才刚刚开始,也许你应该从低级版的"Getting Started" 手册开始,从bbb://spring.io.访问。

为了更容易消化,这篇手册是专注于任务式。

2.Spring框架的介绍Spring框架是一个支持开发Java应用程序而提供全面的基础设施的Java平台,Spring处理基础部分从而你可以专注于你的应用。

spring 让你能够通过POJOs和向POJOs应用无侵入的企业服务就可以构建你的应用。

这些不仅能应用到Java SE而且还能应用到Java EE.一些作为一个开发者能够使用spring平台优势的例子●使Java方法可以执行数据库事务而不用去处理事务API●使本地Java方法可以执行远程过程而不用去处理远程API●使本地Java方法可以拥有管理操作而不用去处理JMXAPI●使本地Java方法可以执行消息处理而不用去处理JMSAPI2.1 依赖注入和控制反转Java应用程序——一个宽松的专业术语,小到一个Appletes大到运行在n层服务器上的企业级程序—通常由互相协作的对象而形成的适当的应用程序。

spring

spring

轻量级与重量级概念的划分
经常会有同学问到spring属于轻量级框架,还是重量框架?其实划分一个应用是否属于 轻量级还是重量级,主要看它使用了多少服务.使用的服务越多,容器要为普通java对 象做的工作就越多,必然会影响到应用的发布时间或者是运行性能.
对于spring容器,它提供了很多服务,但这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明 使用该服务,如果应用使用的服务很少,如:只使用了spring核心服务,那么我们可以认为此时应用属于轻 量级的,如果应用使用了spring提供的大部分服务,这时应用就属于重量级。目前EJB容器就因为它默认 为应用提供了EJB规范中的所有功能,所以它属于重量级。
使用Spring,不再需要我们处理复杂的事务传播行为
使用Spring,我们只需要通过声明式的事务属性配置就可以轻松地实现这两种业务需求 1.要求Bean1.update()和Bean2.save()的在同一个事务中执行 2.要求不管Bean1.update() 的事务是否成功,都需要记录日志。 @Transactional(propagation=Propagation.Required) public void payment(){ Bean1.update();//更新金额 Bean2.save();//记录日志 }
使用dom4j读取spring配置文件
public class xxxClassPathXmlApplicationContext { private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>(); public xxxApplicationContext(String filename){ init(filename); } private void init(String filename){ SAXReader saxReader = new SAXReader(); Document document=null; try{ URL xmlpath = this.getClass().getClassLoader().getResource(filename); document = saxReader.read(xmlpath); Map<String,String> nsMap = new HashMap<String,String>(); nsMap.put("ns","/schema/beans");//加入命名空间 XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean查询路径 xsub.setNamespaceURIs(nsMap);//设置命名空间 List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点 for(Element element: beans){ String id = element.attributeValue("id");//获取id属性值 String clazz = element.attributeValue("class"); //获取class属性值 BeanDefinition beanDefine = new BeanDefinition(id, clazz); beanDefines.add(beanDefine); } }catch(Exception e){ e.printStackTrace();

spring原理和实现机制

spring原理和实现机制

spring原理和实现机制Spring框架是一个开源的应用程序框架,它提供了一种简单的方法来构建基于Java的企业级应用程序。

Spring框架的原理和实现机制主要包括:1. 控制反转(IoC):Spring使用控制反转(Inversion of Control,IoC)来管理应用程序中的对象。

传统的应用程序中,对象的创建和依赖关系管理是由程序员来实现的,而在Spring 中,对象的创建和管理工作由容器来完成。

容器会在应用程序启动时创建对象,并通过依赖注入的方式将对象之间的依赖关系注入到相应的对象中。

2. 依赖注入(DI):依赖注入是Spring框架的核心机制之一。

它指的是容器在创建对象时,自动将其所依赖的其他对象注入进来。

通过依赖注入,对象之间的解耦程度大大提高,使得应用程序更加灵活、可扩展和可维护。

3. 面向切面编程(AOP):Spring框架通过面向切面编程(Aspect-Oriented Programming,AOP)来实现横切关注点的模块化。

AOP可以将应用程序的核心逻辑(称为核心关注点)与横切关注点(如日志、事务管理等)分离开来,并通过切面来统一管理这些横切关注点。

4. 核心容器:Spring框架的核心是其容器(Container)。

容器使用BeanFactory接口作为底层容器的基础,并提供了ApplicationContext接口作为更高级的容器接口。

容器负责创建和管理应用程序中的对象,并提供了丰富的配置和管理功能。

5. 层次化的模块化架构:Spring的模块化架构使得开发者可以根据自己的需要选择使用不同的模块。

例如,Spring的核心模块包括IoC容器、AOP框架和BeanFactory等,而其他模块如Spring MVC、Spring Data等则提供了特定领域的解决方案。

6. 轻量级与非侵入性:Spring框架的设计理念是轻量级和非侵入性的。

它不依赖于特定的编程模型,可以与其他技术和框架无缝集成。

spring的意思

spring的意思

spring的意思Spring的意思Spring是一种开源的、轻量级的、全栈的Java应用开发框架。

它是基于IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)的编程模型,旨在简化企业级应用程序的开发。

首先,Spring的“意思”可以从字面上理解为春天的意思。

春天象征着新生、希望与活力。

同样,Spring框架为Java应用程序注入了新的活力与创造力,使得开发人员能够更加轻松地构建高效、可靠的应用程序。

Spring框架的核心特点是IoC和AOP:1. IoC(Inversion of Control):传统的编程模型中,应用程序的各个组件之间通常直接进行耦合。

而Spring采用IoC容器,将对象的依赖关系交由容器进行管理,通过配置文件或注解将对象之间的依赖关系进行解耦。

开发者只需关注业务逻辑的实现,而无需关心对象的创建和销毁,大大简化了开发流程。

2. AOP(Aspect-Oriented Programming):AOP是一种编程范式,与IoC相辅相成。

通过AOP,开发者可以将一些与业务逻辑无关但又需要在多个对象中复用的功能(如日志记录、性能监测等)进行横向抽取,并通过切面(Aspect)的方式进行集中管理。

Spring框架提供了强大的AOP支持,能够在不修改原有代码的情况下,动态地向程序中插入额外的功能。

Spring框架的设计理念是“面向接口编程”,它鼓励开发者通过接口定义业务逻辑,借助IoC容器将不同的实现进行组装。

这种松耦合的设计方式使得应用程序更加灵活、易于维护和扩展。

除了IoC和AOP,Spring框架还提供了许多其他功能和模块,方便开发者构建各种不同类型的应用程序:1. 数据访问层:Spring提供了对各种数据访问技术的支持,包括JDBC、ORM(如Hibernate)、NoSQL数据库等。

通过Spring的事务管理,开发者可以轻松地控制数据库事务,确保数据一致性。

spring事务详解(基于注解和声明的两种实现方式)

spring事务详解(基于注解和声明的两种实现方式)

spring事务详解(基于注解和声明的两种实现⽅式)Spring事务( Transaction )事务的概念事务是⼀些sql语句的集合,作为⼀个整体执⾏,⼀起成功或者⼀起失败。

使⽤事务的时机⼀个操作需要多天sql语句⼀起完成才能成功程序中事务在哪⾥说明加在业务类的⽅法上⾯(public⽅法上⾯),表⽰业务⽅法执⾏时,需要事务的⽀持。

不同的事务管理器不同的数据库访问技术,处理事务是不同的1. 使⽤jdbc访问数据库,事务处理public void updateAccount(){Connection con = .....;con.setAutoCommit(false);state.insert();state.update();mit();con.setAutoCommit(true);}2. MyBatis执⾏数据库,处理事务public void updateAccount(){SqlSession sqlSession = SqlSessionFactory.openSession(false);try{sqlSession.insert(...);sqlSession.update(...);mit();}catch(Exception e){sqlSession.rollback();}}spring统⼀管理事务,把不同的数据库访问技术的事务处理统⼀起来使⽤spring的事务管理器,管理不同数据库访问技术的事务处理。

开发⼈员只需要掌握spring的事务处理⼀个⽅案,就可以实现使⽤不同数据库访问技术的事务管理。

尽管事务⾯向的是spring,有spring管理事务,做事务提交和回滚。

spring事务管理器spring框架使⽤事务管理器对象,管理所有的事务。

事务管理器接⼝: PlatFormTransactionManager作⽤:定义了事务的操作,主要是commit() , rollback()事务管理器有很多的实现类:⼀种数据库访问计数有⼀个实现类。

深入浅出Spring框架

深入浅出Spring框架Spring作为Java应用最流行的框架之一,在企业级应用开发中拥有广泛的应用。

本文将深入浅出介绍Spring框架的核心特性,以及使用Spring开发企业级应用时需要注意的事项。

一、Spring框架核心特性1. 控制反转(IoC)Spring的最大特点就是控制反转,也叫依赖注入(DI),即由Spring容器来控制对象之间的依赖关系,而不是由开发人员手动创建和管理对象之间的依赖关系。

IoC可以大大降低代码的耦合度,使整个应用更加灵活易于维护。

2. 面向切面编程(AOP)Spring的另一重要特性是AOP,它可以将应用程序分成核心业务逻辑和横切关注点的两个部分。

AOP可以通过在运行时动态地将代码织入到目标对象中,实现诸如事务管理、性能监控、安全性控制等横切关注点的功能。

3. 数据访问支持Spring提供了对JDBC、ORM(如Hibernate和MyBatis)等数据访问技术的支持,可以轻松地访问和操作数据库。

同时,Spring还提供了对NoSQL数据库、大数据存储等技术的支持,以满足企业级应用的多样化需求。

4. Web开发支持Spring提供了全面的Web开发支持,包括Web MVC、Web Service、RESTful等技术。

Spring MVC 作为一个轻量级的Web框架,可以快速地搭建一个高效、可扩展的Web应用程序。

5. 安全性支持Spring提供了丰富的安全性支持,包括身份验证、授权、加密等技术。

同时,Spring的安全性支持可以与Spring的IoC容器、AOP技术无缝集成,使得开发人员可以更加方便地实现复杂的安全机制。

二、Spring开发的注意事项1. 容器和Bean的生命周期在Spring中,Bean的生命周期由容器负责维护。

开发人员可以通过实现特定的接口或定义特定的初始化和销毁方法,来控制Bean的生命周期。

同时,Spring容器的生命周期也需要开发人员特别注意,尤其是在Spring与其他框架集成时。

Spring简单实例

Spring 实例入门本文结合实例理解解容器,DI,IOC,耦合,解耦等Spring所涉及的概念,同时了解Spring 的最基本也是最核心的使用方法。

1.Spring容器Spring容器负责对象的实例化,对象生命周期的管理,被Spring管理的对象称之为Bean。

Spring默认使用单例的方式创建对象。

可以通过修改<bean>的配置改变成其它创建方式。

这个属性为Scope,称之为作用域或生命周期,它的值为singleton(单例,默认值),prototype2.注入方式有setter注入,构造注入方式,接口注入(不需掌握)。

建议多使用Setter注入方式。

Setter注入:Soldier类中有一个属性name,如何在创建Soldier的时候使name的值变为”RANBO”?配置如下:这样创建的Soldier对象的name属性就有值了,测试代码:构造注入:配置如下:测试结果同上。

3.依赖当A对象使用了B对象的方法,A对B产生依赖,称之为A依赖B。

下面的例子中Soldier当HandGun发生变化时,必然导致Soldier必须做相应修改,同时,当Soldier需要使用OtherGun时也必须重新编写代码,导致代码重用度不高。

当对象之间的依赖关系很强时(耦合),会使程序代码死板,不利于后期的维护和扩展。

降低对象之间的依赖关系称之为解耦。

Spring能够很好的解决这一问题。

4.控制反转(Inversion of Control,简称IOC)和依赖注入(Dependence Inject简称DI)我们运用Spring的setter注入方式解决HandGun和Soldier的耦合问题。

修改Soldier的代码,将HandGun定义为Soldier的属性并提供setter方法:package com.hb;/***士兵类*/public class Soldier {private HandGun handGun;public void setHandGun(HandGun handGun) {this.handGun = handGun;}/***打仗*/public void fight(){handGun.killEnemy();}}配置如下己去实例化HandGun了。

Spring知识点详解

Spring知识点详解⼀:概述⼀、简介1. 概念1. Spring是⼀个轻量级的控制反转(IoC)和⾯向切⾯(AOP)的开源容器框架,它由创建。

2. Spring致⼒于提供⼀个以统⼀的、⾼效的⽅式构造整个应⽤,并且可以将单层框架以最佳的组合揉和在⼀起建⽴⼀个连贯的体系。

2. 作⽤:解决企业应⽤开发的复杂性3. 特点1. ⽅便解耦,简化开发:管理所有对象的创建和依赖的关系维护。

2. AOP编程的⽀持:⽅便的实现对程序进⾏权限拦截、运⾏监控等功能。

3. 声明式事务的⽀持:通过配置完成对事务的管理,⽽⽆需⼿动编程。

4. ⽅便程序的测试:Spring对Junit4⽀持,可以通过注解⽅便的测试Spring程序。

5. ⽅便集成各种优秀框架:内部提供了对各种优秀框架的直接⽀持。

6. 降低JavaEE API的使⽤难度:封装JavaEE开发中⾮常难⽤的⼀些API(JDBC、JavaMail、远程调⽤等)。

⼆、体系结构1. 核⼼容器(Core Container)1. Spring-core模块:提供了框架的基本组成部分,包括控制反转(IOC)和依赖注⼊(DI)功能。

2. Spring-beans模块:提供了BeanFactory与Bean的装配,使Spring成为⼀个容器。

3. Spring-context模块:应⽤上下⽂,建⽴在1和2基础之上,提供⼀个框架式的对象访问⽅式,是访问定义和配置任何对象的媒介,使Spring成为⼀个框架。

4. Spring-context-support模块:⽀持整合第三⽅库到Spring应⽤程序上下⽂,特别是⽤于⾼速缓存(EhCache、JCache)和任务调度(CommonJ、Quartz)的⽀持。

4. Spring-expression模块:提供了强⼤的表达式语⾔(扩展的EL)去⽀持运⾏时查询和操作对象图。

2. 中间层1. Spring-aop模块:提供了⼀个符合AOP要求的⾯向切⾯的编程实现,允许定义⽅法拦截器和切⼊点,将代码按照功能进⾏分离,以便⼲净地解耦。

spring框架概述

spring框架概述1 spring框架概述1.1 什么是springSpring是⼀个开源框架,Spring是于2003 年兴起的⼀个轻量级的Java 开发框架,由Rod Johnson开发。

它是为了解决企业应⽤开发的复杂性⽽创建的。

框架的主要优势之⼀就是其分层架构,分层架构允许使⽤者选择使⽤哪⼀个组件,同时为J2EE 应⽤程序开发提供集成的框架dao(JdbcTemplate) service(spring控制事务) web(springmvc)Spring的核⼼是控制反转(IoC)和⾯向切⾯(AOP)。

简单来说,Spring是⼀个分层的JavaSE/EE full-stack 轻量级开源框架。

1)IoC 和DI 2)AOP⼀句话描述spring:full-stack 轻量级开源框架分层: full-stack,每⼀个层都提供解决⽅案web层:struts,spring-MVCservice层:spring 事务控制 springdao层:hibernate,mybatis , jdbcTemplate(spring提供了⼀个模板对象) --> spring-datassh:struts2+spring+hibernate(以前的了解⼀下)ssm:spring+springmvc+mybatis(现阶段常⽤)1.2 spring核⼼Spring的核⼼是控制反转(IoC)和⾯向切⾯(AOP)1.3 spring优点1.4 spring体系结构核⼼容器:beans、core、context、expressiondao service 对象的创建交给spring2 ⼊门案例:IoC【掌握】2.1 导⼊jar包4 + 1 : 4个核⼼(beans、core、context、expression) + 1个依赖(commons-loggins...jar)2.2 ⽬标类1. 提供UserService接⼝和实现类2. 获得UserService实现类的实例之前开发中,直接new⼀个对象即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• <property…/>标签元素
• Spring会自动接管每个<bean…/>定义里的<property…/>元素 定义,spring会在调用无参数的构造方法创建默认的Bean实例 后,调用对应的setter方法为程序注入属性。 <property…/> 定义的属性值将不再由该Bean来主动设置、管理,而是接受 Spring的注入。
8
© 2018 Inspur Group
Inspur Education
两种注入方式的对比
这两种注入方式都是非常用用的,没有绝对的好坏,只 是适应的场景有所不同。 • 相比之下,设值注入具有如下优点:
• 与传统的JavaBean的写法更相似,程序员更容易理解、接受 • 对于复杂的依赖关系,如果采用构造注入,会导致构造器过 去臃肿,难以阅读。
Inspur Education
构造注入
构造注入是指IOC容器利用构造器来设置依赖关系。
<constructor-arg…/>标签元素指定构造器的参数
把设值注入的案例修改成构造注入,如何修改?
两个案例执行效果完全一样,区别在于:创建Person实例 中Axe属性的时机不同—设值注入是先通过无参数的构造器创建 一个Bean实例,然后调用对应的setter方法注入依赖关系;而 构造注入是直接调用有参数的构造器,当Bean实例创建完成后, 已经完成了依赖关系的注入。
Inspur Education
Bean的自动装配
使用自动装配注入合作者Bean • Spring能自动装配Bean与Bean之间的依赖关系,即无 须使用ref显式指定依赖Bean。由BeanFactory检查XML 配置文件内容,根据某种规则,为主调Bean注入依赖 关系。 • Spring的自动装配可通过<beans/>元素的defaultautowire属性指定,也可通过<bean/>元素的autowire 属性指定。 • 自动装配可以减少配置文件的工作量,但降低了依赖 关系的透明性和清晰性。
17
© 2018 Inspur Group
Inspur Education
Bean的自动装配
模式 说明
byType
如果容器中存在一个与指定属性类型相同的bean,那么将与 该属性自动装配。如果存在多个该类型的bean,那么将会抛 出异常,并指出不能使用byType方式进行自动装配。若没有 找到相匹配的bean,则什么事都不发生,属性也不会被设置。 如果你不希望这样,那么可以通过设置dependencycheck="objects"让Spring抛出异常。
6
© 2018 Inspur Group
Inspur Education
设值注入
案例演示:
人使用石斧砍柴

换成人使用钢斧砍柴
从上面示例程序中应该可以看出,依赖注入以配置文件管理 Bean实例之间的耦合,让Bean实例之间的耦合从代码层次分离 出来,依赖注入是一种优秀的解耦方式。
7
© 2018 Inspur Group
11
© 2018 Inspur Group
Inspur Education
配置依赖—设值普通属性值
<value/>元素用于指定字符串、基本类型的属性值, spring使用xml解析器来解析出这些数据,然后利用 java.beans.PropertyEditor完成类型转换:从String类 型转换为所需要的参数值类型。
与byType的方式类似,不同之处在于它应用于构造器参数。 constructor 如果在容器中没有找到与构造器参数类型一致的bean,那么 将会抛出异常。 通过bean类的自省机制(introspection)来决定是使用 constructor还是byType方式进行自动装配。如果发现未默认 的构造器,那么将使用byType方式。(spring3.0版本不支持)
针对某个HTTP Session,Spring容器会根据Bean定义创建一个全新的 Bean实例,且该Bean实例仅在当前HTTP Session内有效。 与request作 用域一样,我们可以根据需要放心地更改所创建实例的内部状态,而别 的HTTP Session中根据Bean定义创建的实例, 将不会看到这些特定于 某个HTTP Session的状态变化。 当HTTP Session最终被废弃的时候,在 该HTTP Session作用域内的Bean实例也会被废弃掉。该作用域仅在基于 Web的Spring ApplicationContext情形下有效。
16
© 2018 Inspur Group
Inspur Education
Bean的自动装配
使用autowire属性配置自动装配,autowire属性可以接 受如下值:
模式 说明
no
不使用自动装配。必须通过ref元素指定依赖,这是默认设置。 由于显式指定协作者可以使配置更灵活、更清晰,因此对于较 大的部署配置,推荐采用该设置。而且在某种程度上,它也是 系统架构的一种文档形式。
© 2018 Inspur Group
autodetect
18
Inspur Education
Bean的作用域
通过设定<bean/>标签的scope属性设定bean的作用域
作用域 描述
singleton
单实例作用域,这是Spring容器默认的作用域,使用 singleton作用域生成的是单实例,在整个Bean容器中仅保留 一个实例对象供所有调用者共享引用。单例模式对于那些无 会话状态的Bean(如辅助工具类、DAO组件、业务逻辑组件 等)是最理想的选择。 原型模式,这是多实例作用域,针对每次不同的请求,Bean 容器均会生成一个全新的Bean实例以供调用者使用。 prototype作用域非常适用于那些需要保持会话状态的Bean 实例,有一点值得注意的就是,Spring不能对一个prototype Bean的整个生命周期负责,容器在初始化、装配好一个 prototype实例后,将它交给客户端,随后就对该prototype 实例不闻不问了。因此,客户端要负责prototype实例的生命 周期管理。
byName
根据属性名自动装配。此选项将检查容器并根据名字查找与属 性完全一致的bean,并将其与属性自动装配。例如,在bean 定义中将autowire设置为by name,而该bean包含master属性 (同时提供setMaster(..)方法),Spring就会查找名为master 的bean定义,并用它来装配给master属性。
10
© 2018 Inspur Group
Inspur Education
配置依赖
根据前面的介绍,Java应用中各组件的相互调用的实 质可以归纳为依赖关系,根据注入方式的不同,通常表 现为如下两种形式:
• <property/> • <constructor-arg/>
不管是属性,还是构造器参数,都视为Bean的依赖, 接收spring容器管理,依赖关系的值要么是一个确 定的值,要么是spring容器中其他bean的引用。 所以spring允许通过如下元素为bean实例的属性指定 值: Value、ref、bean、list、set、map及props
© 2018 Inspur Group
prototype
19
Inspur Education
Bean的作用域
通过设定<bean/>标签的scope属性设定bean的作用域
作用域 描述 针对每次HTTP请求,Spring容器会根据Bean的定义创建一个全新的 Bean实例, 且该Bean实例仅在当前HTTP request内有效,因此可以根 据需要放心地更改所建实例的内部状态, 而其他请求中根据Bean定义 创建的实例,将不会看到这些特定于某个请求的状态变化。 当处理请求 结束,request作用域的Bean实例将被销毁。该作用域仅在基于web的 Spring ApplicationContext情形下有效。
9
© 2018 Inspur Group
Inspur Education
两种注入方式的对比
这两种注入方式都是非常用用的,没有绝对的好坏,只 是适应的场景有所不同。 • 相比之下,设值注入具有如下优点:
• 与传统的JavaBean的写法更相似,程序员更容易理解、接收 • 对于复杂的依赖关系,如果采用构造注入,会导致构造器过 去臃肿,难以阅读。
5
© 2018 Inspur Group
Inspur Education
设值注入
设值注入是指IOC容器使用属性的setter方法来注入被 依赖的实例。这种注入方式简单、直观,因而在Spring 的依赖注入里大量使用。
• Bean与Bean之间的依赖关系放在配置文件里组织(在引入 spring之前,是通过写代码来组织),通过配置文件的指定, spring精确地为每个Bean注入属性。
© 2018 Inspur Group
Hale Waihona Puke requestsession
20
Inspur Education
Bean的作用域
通过设定<bean/>标签的scope属性设定bean的作用域
作用域 描述
global session
global session作用域类似于标准的HTTP Session作用域,不 过它仅仅在基于portlet的Web应用中才有意义。portlet规范 定义了全局Session的概念,它被所有构成某个portlet Web 应用的各种不同的portlet所共享。在global session作用域中 定义的Bean被限定于全局portlet Session的生命周期范围内。 如果我们是在编写一个标准的基于Servlet的Web应用,并且 定义了一个或多个具有global session作用域的Bean,系统会 使用标准的HTTP Session作用域,并且不会引起任何错误。 该作用域仅在基于Web的Spring ApplicationContext情形下有 效。
相关文档
最新文档