Spring实战(1)

本博客是参考Spring实战第四版,对其中重要的知识点进行总结。

  • Spring是如何简化java开发的?

答:(1)基于POJO的轻量级和最小侵入性编程;(2)通过依赖注入和面向接口来松耦合;(3)基于切面和惯例进行声明式编程;(4)通过切面和模板来减少样板式代码;

  • 配置Spring容器三种主要的装配机制?

答:(1)在XML中显示配置;(2)在java中进行显示配置;(3)隐式的bean发现机制和自动装配;

  • Spring从两个角度来实现自动化装配?

答:(1)组件扫描:Spring会自动发现上下文中所创建的bean;(2)自动装配:Spring自动满足bean之间的依赖;

  • Spring依赖注入DI的功能是如何实现的?

答:任何一个有实际意义的应用都会由两个或者多个类组成,这些类之间相互协作来完成特定的业务逻辑。按照传统的做法,每个对象负责管理与自己相互协作的对象的引用,这样会导致高度耦合并难以测试。例如如下代码:

可以看到,DamselRescuingKnight在它的构造函数中创建了RescueDamselQuest。这使得DamselRescuingKnight紧密的和RescueDamselQuest耦合到了一起,因此就极大的限制了这个骑士探险的能力。而通过DI,对象的依赖关系将由系统中协调各对象的第三方组件在创建对象的时候进行设定。对象无需自己创建或者管理他们的依赖关系。

我们可以看到,不同于之前的DamselRescuingKnight,BraveKnight没有没有自行创建探险任务,而是在探险的时候把任务作为参数传入。

  • 观察Spring是如何工作的?

答:Spring通过应用上下文(Application Context)装载bean的定义并把他们组装起来。Spring上下文全权负责对象的创建和组装。

  • AOP应用?

正如你所看到的,Minstrel是只有两个方法的简单类。在骑士探险之前或者之后都会调用相应的函数。接下来我们该如何把吟游诗人和骑士探险结合起来呢?如果是如下方式调用,

这样就到时每次骑士进行探险都要命令吟游诗人去给他进行记录,这样合理吗?所以我们利用AOP,你可以声明吟游诗人必须去歌颂骑士探险,而骑士不需要去管吟游诗人。将Minstrel声明一个切面。

  • Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。

答:完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。然后在JavaConfig中,@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。那么久很好理解了,@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。到了使用xml的方式,也是如此。均不见<bean>标签就是告诉spring怎么获取这个bean,各种<ref>就是手动的配置bean之间的关系。如下图分别是三种方式的代码:

  • 配置profile bean?

答:Spring为环境相关的bean所提供的解决方案其实与构建时的方案没有太大区别。当然,在这个工程中需要根据环境决定常见那个bean和不创建那个bean。不过Spring并不是在构建的时候做出这样的决策,而是等到运行来再决定。这样的结果就是同一个部署单元能够使用说有的环境,没有必要进行重新构建。Spring引入了bean profile功能。可以使用@profile来指定那个bean属于profile。

在Spring确定那个profile处于激活状态时,需要依赖两个独立的属性:spring.profiles.active和spring.profiles.default。如果设置了spring.profiles.active属性的话,那么他的值就会用来确定那个profile被激活;如果没有设置spring.profiles.active的话,那么spring将会查找spring.profiles.default值。如果这两个都没有设置的话,那么就没有profile被激活。可以在web.xml中设置默认的profile。

  • 限定自动装配的bean:@qualifier注解是使用限定符主要方式之一。

  • bean的作用域?

答:在默认情况下bean是以单例的形式创建的。也就是说,不管一个bean被注入到其他bean中多少次,每次所注入的都是一个实例。Spring定义了多种作用域,可以基于这些作用域来创建bean,包括:单例(Singleton):在整个应用中,只创建一个bean的实例;原型(Prototype):每次注入或者通过应用上下文获取的时候,都会创建一个新的bean实例;会话(session):在web应用中,为每个会话创建一个bean实例;请求(Request):在web应用中,为每个请求创建一个bean实例。

  • 运行时值注入?

答:Spring提供了两种在运行时求值的方式:(1)属性占位符(Property placeholder);(2)Spring表达语言(SpEL)。

在XML中进行配置:

使用SpEL表达语言:

原文地址:https://www.cnblogs.com/txdd-tg/p/9295471.html

时间: 2024-11-04 02:02:03

Spring实战(1)的相关文章

[Spring实战系列](11)SpEL使用表达式装配

到目前为止,我们为Bean 的属性和构造器参数装配的所有东西都是在Spring 的XML 配置文件中静态定义的. <bean id = "yoona" class = "com.sjf.bean.Student"> <property name="name" value = "yoona"/> <property name="hobby" value = "踢足球,打

[Spring实战系列](18)注解切面

使用注解来创建切面是AspectJ 5所引入的关键特性.在AspectJ 5之前,编写AspectJ切面需要学习一种Java语言的扩展,但是AspectJ面向注解的模型可以非常简单的通过少量注解把任意类转变为切面. 回顾一下Audience类,没有任何地方让它成为一个切面,我们不得不使用XML声明通知和切点. 我们通过@AspectJ注解,我们再看看Audience类,不需要任何额外的类或Bean声明就能将它转换为一个切面. package com.sjf.bean; /** * 歌手实体类 *

[Spring实战系列](16)面向切面编程(AOP)概述

1. 简介 在软件中,有些行为对于大多数应用都是通用的.日志,安全和事务管理的确很重要,但他们是都是应用对象主动参与的行为呢?如果让应用对象只关注自己所针对的业务领域问题,而其他方面的问题由其他应用对象来处理,这样会不会更好? 在软件开发中,分布于应用中多处的功能被称为横切关注点.通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离是面向切面编程索要解决的. 上图展示了一个被划分为模块的典型应用.每个模块的核心功能都是为特

[Spring实战系列](14)Bean的自动检测

即使<context:annotation-config>有助于完全消除Spring注解中的<property>和<constructor-arg>元素,但是还是不能完全消除,仍然需要使用<bean>元素显示定义Bean.因此<context:component-scan>元素出现了,它除了完成<context:annotation-config>一样的工作,还允许Spring自动检测Bean和定义Bean.这就意味着我们不使用<

[Spring实战系列](10)初探Bean生命周期

1. 生命周期流程图 Bean在Spring容器中从创建到销毁经历了若干个阶段,在每一个阶段都可以针对Spring如何管理Bean进行个性化定制. 正如你所见,在Bean 准备就绪之前,Bean 工厂执行了若干启动步骤. Spring 对Bean 进行实例化. Spring 将值和Bean 的引用注入进Bean 对应的属性中. 如果Bean 实现了BeanNameAware接口,Spring 将Bean的ID传递给setBeanName() 接口方法. 如果Bean 实现了BeanFactory

《Spring实战》读书笔记--使用SpringMVC构建REST API

<Spring实战>读书笔记--使用SpringMVC构建REST API 1. REST介绍 REST(Representational State Transfer):表述性状态转移,是基于HTTP.URI.MIME(HTML.JSON等)协议的Web软件架构.它不同于SOAP Web服务(RPC)关注处理,面向行为,其更关注要处理的数据,面向资源. 1.1 <Spring实战>中是这样描述REST的: 为了理解REST是什么,我们将它的首字母缩写才拆分为不同的构成部分: 表述

【书籍推荐】Spring实战-----Spring入门经典

如果看完了Servlet学习指南后,可以开始考虑使用框架了,这时候是完全没有什么问题的,因为有太多的开发者在帮我们解决问题了,作为一个新手,我们可以先使用别人的轮子,等到使用得很熟练,技术提高了,我们才考虑制造一些小轮子,当然这个过程需要很长的时间,但我相信只要不断的学习,就一定能成功. 当然,个人认为这本书只是入门级,因为文档是更好的资料,但是每个人迈出的第一步都倾向于轻松有趣,另外看英文版当然是更好有更好的提升,但是个人认为既然入门就可以选择看中文版的快速入门,然后再看英文版的文档,或者在下

【Spring实战】--1Spring的核心

最近面试总会涉及Spring的优点,SpringMVC与Struts2的比较,生活慢慢稳定下来,这些面试还是应了那句话“只顾盲目拉车,不会低头看路”,回过头来还是要好好研究一下Spring,如果仅仅是停留在粘贴拷贝像从前一样机械的完成任务,可能再过一段时间我还是不会太明白Spring事务的妙处,以及Spring松耦合为什么就会让代码看起来清爽.以前上学那会也是在半梦半醒中学了一部分Spring,看了开涛的Spring的一些博客.这次潜心研究一下,主要参考资料: 1<Spring实战(第4版)>

[Spring实战系列](8)Spring注入方式之setter注入

通常,JavaBean 的属性是私有的,同时拥有一组存取器方法,以setXXX() 和getXXX() 形式存在.Spring 可以借助属性的set方法来配置属性的值,以实现setter方式的注入. 1. 注入简单值 在Spring 中我们可以使用<property> 元素配置Bean 的属性.<property>在许多方面都与<constructor-arg> 类似,只不过一个是通过构造参数来注入值,另一个是通过调用属性的setter 方法来注入值. 举例说明,让我们

《Spring实战(第三版)》 之旅(一)

前言 一个寒假吧SSM学完了,也不能说是学完了,只能说是过了一遍,知道大体的流程,框架的搭建,但具体的实现原理,为什么要这样,什么时候要这样,概念还是很模糊. 反正经过这五大框架的学习,感觉最重要的还是Spring框架,于是乎,开学时期偶得一书<Spring实战>,在网上口碑还是蛮高的,于是继续深入学习(复习)下Spring这个框架. 到目前为止已经读到了第8章 使用Spring Web Flow ,突然想到了写写博客记录下读书的历程,也能说是总结?笔记?反正就是自己在看这部分内容的时候心里在