![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring-in-action第四版
文章平均质量分 83
TinyDolphin
这个作者很懒,什么都没留下…
展开
-
Spring 是如何简化 Java 开发的?
Q:Spring 的目标是什么? 致力于全方位的简化 Java 开发。Q:为了降低 Java 开发的复杂性,Spring 采取了哪些关键策略?基于 POJO 的轻量级和最小侵入性编程;通过依赖注入和面向接口实现松耦合;基于切面和惯例进行声明式编程;通过切面和模板减少样板式代码;几乎 Spring 所做的任何事情都可以追溯到上述的一条或者多条策略。1.1 激发 POJO 的潜能很多框架通过原创 2017-07-09 19:04:36 · 1749 阅读 · 2 评论 -
高级装配 —— 条件化的 bean
如果希望一个或多个 bean 只有在应用的类路径下包含特定的库时才创建。或者希望某个 bean 只有当另外某个特定的 bean 也声明了之后才会创建。还可能要求只有某个特定的环境变量设置之后,才会创建某个 bean。Spring 4 之前,很难实现这种级别的条件化配置,但是 Spring 4 引入了一个新的 @Conditional 注解,它可以用到带有 @Bean 注解的方法上。如果给定的条件计算原创 2017-07-28 14:12:55 · 1202 阅读 · 0 评论 -
高级装配 —— Spring profile
Q:什么是 profile? A:可以理解为我们在Spring容器中所定义的Bean的逻辑组名称。只有当这些 Profile 被激活的时候,才会将 Profile 中所对应的 Bean 注册到 Spring 容器中。Q:为什么要使用 profile bean? A: 因为在不同的环境中某个 bean 会有所不同。我们就必须得有一种方法来配置 bean,使其在每种环境下都会选择最为合适的配置。原创 2017-07-27 11:16:46 · 769 阅读 · 0 评论 -
高级装配 —— 如何在不同的作用域中声明 bean?
默认情况下,Spring 应用上下文中所有 bean 都是作为以单例的形式创建的。Q:Spring 定义了哪些作用域? A:Spring 定义了多种作用域,可以基于这些作用域创建 bean,包括:单例(Singleton):在整个应用中,只创建 bean 的一个实例;原型(Prototype):每次注入或者通过 Spring 应用上下文获取的时候,都会创建一个新的 bean 实例;会话(Se原创 2017-07-31 10:20:33 · 504 阅读 · 0 评论 -
自动装配、JavaConfig、XML 三种方案之间,怎么导入和混合配置?
在 Spring 中,这些配置方案都不是互斥的。完全可以将 JavaConfig 的组件扫描和自动装配/或 XML 配置混合在一起。Q:如何在 JavaConfig 中引用 XML 配置?Q:怎么将两个 JavaConfig 类组合在一起? A:①、使用 @Import 注解导入package soundsystem;import org.springframework.context.annot原创 2017-07-24 21:57:41 · 2071 阅读 · 0 评论 -
面向切面的 Spring —— 如何注入 AspectJ 切面?
虽然 Spring AOP 能够满足许多应用的切面需求,但是与 AspectJ 相比,Spring AOP 是一个功能比较弱的 AOP 解决方案。AspectJ 提供了 Spring AOP 所不能支持的许多类型的切点。对于大部分功能来讲,AspectJ 切面与 Spring 是相互独立的。虽然它们可以织入到任意的 Java 应用中,这也包括了 Spring 应用,但是在应用 AspectJ 切面时原创 2017-08-11 15:05:45 · 522 阅读 · 0 评论 -
面向切面的 Spring —— 如何使用注解创建切面?
使用注解来创建切面是 AspectJ 5 所引入的关键特性。我们前一篇已经定义了 Performance 接口,它是切面中切点的目标对象。Q:如何定义切面?A: 给出一个描述:如果一场演出没有观众的话,那就不能称之为演出。对不对?从演出的角度来看,观众是非常重要的,但是对演出本身的功能来将,它并不是核心,这是一个单独的关注点。因此,将观众定义为一个切面,并将其应用到演出上就是较为明智的做法。之前需要原创 2017-08-10 14:53:41 · 3376 阅读 · 0 评论 -
面向切面的 Spring —— 如何在 XML 中声明切面?
曾经建立过这样一种原则:基于注解的配置 > 基于 Java 的配置 > 基于 XML 的配置。Q:什么情况下使用 XML 配置声明切面? A:如果你需要声明切面,又不能为通知类添加注解的时候,那么就必须转向 XML 配置了。Spring 的 aop 命名空间中,提供了多个元素用来在 XML 中声明切面。 Q:如何定义切面?A:我们将 Audience 类的所有 AspectJ 注解全部移除掉。p原创 2017-08-10 20:14:29 · 630 阅读 · 0 评论 -
面向切面的 Spring —— 如何通过切点来选择连接点?
Q:切点的作用是什么? A:切点用于准确定位应该在什么地方应用切面的通知。在 Spring AOP 中,要使用 AspectJ 的切点表达式语言来定义切点。下表为 Spring AOP 所支持的 AspectJ 切点指示器: 在 Spring 中尝试使用 AspectJ 其他指示器时,将会抛出 IllegalArgument-Exception 异常。注意:只有 execution 指示器是实际原创 2017-08-09 17:33:11 · 785 阅读 · 0 评论 -
面向切面的 Spring —— 什么是面向切面编程?
Q1:面向切面编程(AOP)解决什么问题? A1:把横切关注点与业务逻辑相分离。Q2:什么是横切关注点? A2:在软件开发中,散布于应用中多处的功能。日志是应用切面的常见范例,但并不是切面适用的唯一场景。DI 有助于应用对象之间的解耦,而 AOP 可以实现横切关注点与它们所影响的对象之间的解耦。 上图展示了一个被划分为模块的典型应用。每个模块的核心功能都是为特定业务领域提供服务,但是这些模块都原创 2017-08-06 15:18:05 · 3118 阅读 · 0 评论 -
Spring 如何通过 XML 装配 bean?
推荐使用自动化配置和 JavaConfig,学习 XML 配置,只是为了帮助你维护已有的 XML 配置。之前需要提前创建哪些具体的类,请参考前一篇:Spring 如何使用自动化装配 bean?Q:如何通过 XML 显示的配置 Spring?A:①、创建 XML 配置规范在使用 JavaConfig 时,这意味着要创建一个带有 @Configuration 注解的类, 而在 XML 配置中,这意味着原创 2017-07-24 20:47:18 · 593 阅读 · 0 评论 -
Spring 如何使用自动化装配 bean?
Spring 提供了三种主要的装配机制:在 XML 中进行显示配置;在 Java 中进行显示配置;隐式的 bean 发动机制和自动装配。Q:应该选择哪一种装配机制? A:以上三种配置方案,可以随意选择。但是笔者建议,尽可能地使用自动配置的机制,显示配置越少越好。 另外,当你必须要显示的配置 bean 的时候(比如,有些源码不是由你来维护的,而当你需要为这些代码配置 bean 的时候),我原创 2017-07-23 21:29:08 · 807 阅读 · 1 评论 -
Spring 的新功能
Spring 3.1 新功能Spring 3.1 提供了声明式缓存的支持以及众多针对 Spring MVC 的功能增强。以下为 Spring 3.1 重要的功能升级:Spring 3.1 引入了环境 profile 功能,就能根据应用部署在什么环境之中选择不同的数据源 bean;在 Spring 3.0 基于 Java 的配置之上,Spring 3.1 添加了多个 enable 注解;添加了原创 2017-07-15 14:18:49 · 380 阅读 · 0 评论 -
Spring 如何通过 Java 代码装配 bean?
2.3 通过 Java 代码装配 beanQ:在什么情况下需要通过 Java 代码装配 bean?A:有时候自动化配置的方案行不通,此时需要明确配置 Spring。比如说,你想要将第三方库中的组件装配到你的应用中,这种情况下,是没有办法在它的类上添加 @Component 和 @Autowired 注解的,因此就不能使用自动化配置的方案了。Q:为什么说在进行显示配置时, JavaConfig 是更好原创 2017-07-24 12:45:30 · 644 阅读 · 0 评论 -
高级装配 —— 如何处理自动装配的歧义性?
Q:自动装配时,什么情况下会产生歧义性?歧义性会导致什么?怎么处理? A:如果不仅有一个 bean 能够匹配结果的话,就会出现歧义性。 它会阻碍 Spring 自动装配属性、构造器参数或方法参数,并抛出 NoUniqueBeanDefinitionException 异常。实际中,歧义性还是比较罕见的。 当出现歧义性的时候,Spring 提供了多种可选方案来解决:你可以将可选的 bean 中的原创 2017-07-28 15:21:49 · 511 阅读 · 0 评论 -
Spring 模块和 Spring Portfolio
3.1 Spring 模块在 Spring 4.0 中,Spring 框架的发布版本包括了 20个不同的模块,每个模块会有 3 个 JAR 文件(二进制类库、源码的 JAR 文件以及 JavaDoc 的 JAR 文件)。20 个不同的模块依据所属的功能可以划分为以下 6 类不同的功能。 ①、Spring 核心容器容器是 Spring 框架最核心的部分,它管理着 Spring 应用中 bean 的创原创 2017-07-14 20:48:36 · 1530 阅读 · 0 评论 -
Spring 容器--如何创建和加载一个 Spring 容器?
在基于 Spring 的应用中,你的应用对象生存于 Spring 容器中。容器是 Spring 框架的核心。Spring 容器使用 DI 管理构成应用的组件,它会创建相互协作的组件之间的关联。Q:Spring 容器主要负责什么? A:Spring 容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡。Q:Spring自带了哪些容器实现? A:第一类:bean 工厂是最简单的原创 2017-07-13 17:23:13 · 4293 阅读 · 0 评论 -
高级装配 —— 如何在运行时计算要注入到 bean 属性中的值?
依赖注入,通常是将一个 bean 引用注入到另一个 bean 的属性或构造器参数中。它通常指的是将一个对象与另一个对象进行关联。 但是装配的另一个方面指的是将一个值注入到 bean 的属性或者构造器参数中。前面所讲的关于值的注入,基本上都硬解码。即值都是写死的。但是有时候,我们希望这些值在运行时再确定。Q1:Spring 提供了哪些在运行时求值的方式? A1:两种方式:属性占位符(较为简单)原创 2017-08-04 16:00:16 · 1024 阅读 · 0 评论