1.  profile

profile可以决定bean在什么环境下才被装配(开发环境、测试环境、线上环境等)

@Profile(“dev”)可以用在class之前,也可以用在类之前(Spring3.2),表示类或者方法返回类只有在dev环境激活时才被创建;也可以在XML文件中配置。

激活profile:作为DispatcherServelet的初始化参数

作为web应用的上下文参数

作为JNDI条目

作为环境变量

作为JVM的系统属性

在集成测试类上,使用@ActiveProfile注解设置

2.  条件化的Bean

@Conditional(条件),如果条件为true,就创建bean,否则就不创建

3.  自动装配歧义性

在自动装配时,一个接口可能有多个实现类,spring并不知道该装配哪一个bean,因此产生了歧义性

1)@Primary注解,与@Component或者@Bean组合使用,设置首选bean,当有歧义时,首选@Primary注解的bean,但是有多个首选bean时,同样会有歧义性

2)限定符@Qualifier,可与@Component或@Bean组合使用,限定符限制了装配的bean,装配的bean也必须有对应的限定符

4.  bean的作用域

1)  单例(Singleton):在整个应用中只创建bean的一个实例

默认作用域

2)  原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 或者

XML中,bean标签添加scope=”prototype”

3)  会话(Session):在Web应用中,为每个会话创建一个bean实例

@Scope(value=WebApplicationContext.SCOPE_SESSION,proxyMode=ScopeProxyMode.INTERFACES)

例子:购物网站购物车,对于每一个用户的一次会话购物车是共用的,但是不同用户不同会话的购物车是不同的,会话作用域的bean就能够解决这种问题

关于proxyMode,作用域代理,可以延迟注入请求和会话作用域的bean,在注入时,会注入一个bean的代理,代理会暴露与bean相同的方法,当需要调用bean的方法时,由代理进行懒解析并调用委托给会话作用域内的bean

4)  请求(Request):在Web应用中,为每个请求创建一个bean实例

使用XML配置会话或请求作用域代理,使用aop命名空间的元素,如下:

<aop:scoped-proxy />,此时默认是使用CGLib创建目标类的代理,如果要创建目标借口的代理,需要添加proxy-target-class=”false”

5.  运行时植入

1)  属性占位符

格式:${…},另外需要在XML中配置<context:property-placeholder />

2)  Spring表达式语言

格式:#{…}

使用bean的ID来引用bean;调用方法和访问对象的属性;对值进行算术、关系和逻辑运算;正则表达式匹配;集合操作

Spring学习总结之高级装配的更多相关文章

  1. Spring学习系列(二) 自动化装配Bean

    一.Spring装配-自动化装配 @Component和@ComponentScan 通过spring注解(@Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组 ...

  2. Spring学习笔记(二)之装配Bean

    一,介绍Bean的装配机制 在Spring中,容器负责对象的创建并通过DI来协调对象之间的关系.但是我们要告诉Spring创建哪些Bean并且如何将其装配在一起.,装配wiring就是DI依赖注入的本 ...

  3. spring对bean的高级装配之profile机制

    最近在读spring实战一书,个人感觉内容通俗易懂,学到了一些之前并不知道的知识,于是打算在博客里记录一下这些知识点便于后期记忆: 今天要记录的就是spring的条件化创建bean,针对条件化创建be ...

  4. Spring学习之旅(三)--装配Bean

    装配 Bean 的方式 在 XML 中进行显式配置 在 Java 中进行显式配置 隐式的 Bean 发现机制和自动装配 Spring 提供了以上三种方式进行 Bean 的配置,可以根据自己的需求选择一 ...

  5. Spring学习笔记(三)之装配Bean

    除了组件扫描与自动装配之外还有基于Java代码的装配与基于XML的装配. 有一些场景是我们不能用自动装配的,比如我们要给第三方库中的组件装配到我们的应用中,这时自动装配无效,因为自动装配只能扫描本应用 ...

  6. Spring学习笔记--使用注解装配

    使用@Autowired注解 从Spring2.5开始,最有趣的一种装配Spring Bean的方式是使用注解自动装配Bean的属性.Spring默认禁用注解装配,最简单的启用方式是使用Spring的 ...

  7. Spring学习总结(2)-自动装配

    上面说过,IOC的注入有两个地方需要提供依赖关系,一是类的定义中,二是在spring的配置中需要去描述.自动装配则把第二个取消了,即我们仅仅需要在类中提供依赖,继而把对象交给容器管理即可完成注入.在实 ...

  8. spring对bean的高级装配之基于@Conditional条件化装配

    上篇介绍了如何基于profile来条件化创建bean,spring会根据profile的激活状态来进行创建;这篇介绍如何基于spring4.0引入的@Conditional和Condition接口来更 ...

  9. 【Spring】高级装配

    前言 前面讲解了bean的核心装配技术,其可应付很多中装配情况,但Spring提供了高级装配技术,以此实现更为高级的bean装配功能. 高级装配 配置profile bean 将所有不同bean定义放 ...

随机推荐

  1. NOIP2018考前抱佛脚——数据结构基础及STL实现

    目录 动态数组 栈 队列 优先队列 动态数组 srand(time(0)); std::vector<int> qwq; for(int i = 1;i <= 10;++i) qwq ...

  2. Django商城项目笔记No.18商品部分-数据表创建

    数据库表设计 在电商中对于商品,有两个重要的概念:SPU和SKU SPU = Standard Product Unit (标准产品单位) SPU是商品信息聚合的最小单位,是一组可服用.易检索的标准化 ...

  3. vue组件-子组件向父组件传递数据-自定义事件

    自定义事件 我们知道,父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,应该怎样做?那就是自定义事件!

  4. 《python源代码剖析》笔记 python环境初始化

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zhsenl/article/details/33747209 本文为senlie原创.转载请保留此地 ...

  5. Linux SSH免密登录

    SSH无密码登录要使用公钥与私钥.Linux可以用ssh-keygen生成公钥/私钥对,下面以Ubuntu为例说明配置过程. 有两个节点:node01(172.17.0.14)和node02(172. ...

  6. input 内容改变的触发事件

    1. onchange onchange 事件会在域的内容改变时触发.支持的标签<input type="text">, <textarea>, <s ...

  7. Fiddler-http检测调试工具

    Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大 ...

  8. [浅谈CSS核心概念] CSS元素类型和盒模型

    元素类型 在CSS中,HTML标签元素分为三种类型: 块状元素 内联元素(也叫行内元素) 内联块状元素 它们之间的区别在于: 块级元素会独占一行,内联元素和内联块状元素则都会在一行内显示 块状元素和内 ...

  9. WPF LinkButton

    <Button Margin="5" Content="Test" Cursor="Hand"> <Button.Temp ...

  10. 20155327 李百乾 Exp7 网络欺诈防范

    20155327 李百乾 Exp7 网络欺诈防范 基础问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 就此次试验来看,被收到NDSspoof攻击,首先要被攻击机扫描,并被设置为目标,所 ...