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. django复习-1-环境搭建和创建项目

    一.虚拟环境搭建 1. 创建虚拟环境,需要联网 mkvirtualenv django_py3_1.11 -p python3 2. 安装Django 使用django 1.11.11版本,注意需要联 ...

  2. Learn Algorithms With Javascript - 基于 Js 进行算法学习

    基于 javascript 学习并实现常用的经典算法,欢迎对算法和数学感兴趣的 Js 开发者参与,一起学习共同进步. 算法实现 排序 插入排序 sort/lib/insertion-sort.js 希 ...

  3. 敲代码非常难之logstash之file input插件实现分析

    版权声明:本文为横云断岭原创文章,未经博主同意不得转载.微信公众号:横云断岭的专栏 https://blog.csdn.net/hengyunabc/article/details/25665877 ...

  4. POJ 1066 昂贵的聘礼

    Description 年轻的探险家来到了一个印第安部落里. 在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长减 ...

  5. Fuel 30 分钟快速安装OpenStack

    一直以来,对于openstack 的初学者来讲,安装往往是入门的头大难题.在E版本之前,要搭建一个基本能用的openstack 环境那是相当麻烦,自己要装机,自己搞源,自己照着文档敲命令,又没有靠谱的 ...

  6. mtr,traceroute,pathping,tracert,ping

    mtr,traceroute,pathping,tracert,ping netstat -ntu | tail -n +3|awk '{ print $5}' | cut -d : -f 1 | s ...

  7. OpenCV——视频操作基础

    读入视频: VideoCapture 类 //方法一 VideoCapture capture; capture.open("test.avi"); //方法二 VideoCapt ...

  8. jq中each的中断

    最近在做项目中,遇到jq的each方法中的回调函数里面的break不生效,即通过 jquery 的循环方法进行数组遍历,但是当不符合条件时,怎么跳出当前循环,我们经常会习惯JS中的break和cont ...

  9. Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值

    大家都知道Java类中的私有的(private)属性是获取不到的(即使使用继承依然获取不到),那如果非要获取私有属性的值怎么办呢?一般的做法是将该java类封装称为一个JavaBean,即封装该私有属 ...

  10. 使用Android绘图技术绘制一个椭圆形,然后通过触摸事件让该椭圆形跟着手指移动

    引言:在图形绘制中,控制一个图形(圆形,椭圆形,矩形,三角形)移动时,其实计算的都是该图形的中心点移动.在绘制过程中,首先计算出中心点,然后根据中心点的位置计算重图形的上下左右位置.我们假设图形左边为 ...