重点:常用的上下文环境

AnnotationConfigApplicationContext

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext

AnnotationConfigWebApplicationContext

XmlWebApplicationContext

1.常用的注解

显示装配的@Bean,需要和@Configuration配合使用

1、用到任意方法,告诉Spring这个方法将会返回一个对象,该对象要注册成为Spring应用上下文中的bean,默认情况下,bean的ID就是@Bean注解的方法名。

2、Spring会拦截所有对该方法的调用,并直接返回该方法所创建的bean

java配置和xml配置 混合装配

java的某个配置类中:

@Import(xxxConfig.class)
@ImportResource("classpath:xxxConfig.xml") XML的某个配置文件中:
<bean class="xxxConfig.class">
<import resource="xxxConfig.xml">

 

自动装配的使用流程:

1、@ContextConfiguration(classes=CDPlayerConfig.class)

2、@ComponentScan//CDPlayerConfig上面,表示扫描组件,可以指定范围,不指定范围则扫描配置类所在的基础包

3、@Component //被注入的类上使用

4、@Atuowired //注入时使用

自动装配的歧义性

@Autowired是spring的元注解,可以用java的@Inject替代,先按类型找,如果找不到或者有多个,就按照name找,(扫描时默认是把类名第一个字母小写作为name)

可以用@Qualifier来指定name,或者把变量名改成扫描时生产的name

解决自动装配的歧义性,可以通过

@Qualifier 推荐用这个,设置一个代表性的名字

@Primary

环境与profile

@Profile("dev"),可以用到类上和方法上,可以使用"!",该注解是使用@Conditional注解实现的。

@ActiveProfiles("dev","!test")

bean的作用域@Scope

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

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

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

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

对于Session和Request作用域,需要设置proxyMode,因为该作用域的对象注入单例时,注入的是一个代理,运行时再委托给相应的实例。

如果Session作用域的是一个借口的话,可以用proxyMode = ScopedProxyMOde.INTERFACES,

如果是一个具体的类的话,需要设置为proxyMode = ScopedProxyMOde.TARGET_CLASS。

注入外部的值

@PropertySource("classpath:/com/soundsystem/app.properties")

@Autowired

Environment env

解析属性占位符${...}

@Value("${disc.title}") String title;

SpEL表达式#{...},支持类型安全运输符 "?."

访问类作用域的方法和常量,需要依赖T关键字,比如#{T(System).currentTimeMillis()}

使用@Value注解来调用${...}和#{...}

@Value("#{systemPrpperties['disc.title']}") String title

 

@Autowired

@Qualifier("sgtPeppers" )

private CompactDisc sgtPeppers;

@Component

@Configuration

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes=CDPlayerConfig.class)

xml用构造器注入时,

<constructor-arg value="The Beatles" />

或者用c语法

<bean id="compactDisc" class="soundsystem.BlankDisc"

c:_0="Sgt. Pepper's Lonely Hearts Club Band"

c:_1="The Beatles" />

<bean id="cdPlayer" class="soundsystem.CDPlayer"

c:_-ref="compactDisc" />

注入属性时:

<property name="artist" value="The Beatles" />

或者用p语法

<bean id="compactDisc"

class="soundsystem.properties.BlankDisc"

p:title="Sgt. Pepper's Lonely Hearts Club Band"

p:artist="The Beatles"

p:tracks-ref="trackList" />

<util:list>等来将bean中的复杂的参数移到外面去,保持xml代码的易读性

xml中引用其他xml文件

<import resource="cd-config.xml">

可以使用<bean class="xxx.xx">把javaConfig类导入到XML文件中

javaConfig中引用其他配置

@Configuration

@Import(CDPlayerConfig.class)

@ImportResource("classpath:cd-config.xml")

public class SoundSystemConfig {

}

无论怎么引用,只要在root配置中启用组件扫描即可

比如@ComponentScan和<context:component-scan >

配置多个可互相替代的bean时,比如DataSource

java配置:

@Profile("dev")

xml配置

<beans profile="dev">

使用时通过@ActiveProfiles来选择用哪个

@ActiveProfiles("prod")

也可以在

在web.xml中,配置

<context-param>

<param-name></param-name>

<param-value></param-value>

</context-param>

按条件注入Bean

1、@Bean

@Conditional(MagicExistsCondition.class)

2、public class MagicExistsCondition implements Condition

Bean的作用域

单例 Singleton

原型 Prototype

会话 Session

请求 Request

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

<bean class="com.myapp.Notepad" scope="prototype" />

会话 Session和请求 Request需要设置代理proxyMode,

如果是xml配置,bean中加入<aop:scoped-proxy>

生命周期

1.实例化

2.为属性赋值

3.BeanNameAware接口

4.BeanFactoryAware接口

5.ApplicationContextAware接口

6.BeanPostProcessor接口

7.InitializingBean接口

8.DisposableBean接口

引入properties文件

<context:property-placeholder location="classpath:system.properties" />

java配置

@PropertySource("classpath:/com/soundsystem/app.properties")


SpringInAction4笔记——装配的更多相关文章

  1. #Spring实战第二章学习笔记————装配Bean

    Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...

  2. Spring学习笔记—装配Bean

    在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...

  3. SpringInAction4笔记——复习

    由于目前只做后端的业务代码的开发,所以根据自己掌握的熟悉程度,只需要复习几个模块即可 重点看的是核心容器(IOC),redis,缓存,消息(主要是rabbitmq),事务,springboot,单元测 ...

  4. Spring学习笔记-装配Bean-02

    什么是装配 创建应用对象之间写作关系的行为通常称为装配(wiring),这也是依赖注入(DI)的本质. Spring配置的可选方案 Spring提供了3中主要的装配机制: ● 在XML中进行显式配置. ...

  5. SpringInAction4笔记——web

    1,java配置 extends AbstractAnnotationConfigDispatcherServletInitializer public class SpitterWebInitial ...

  6. [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Spring 笔记(三)Bean 装配

    前言 Spring 有两大核心,也就分成两份笔记分别记录. 其一是管理应用中对象之间的协作关系,实现方式是依赖注入(DI),注入依赖的过程也被称为装配(Wiring). 基于 JavaConfig 的 ...

  9. Raspberrypi 装配笔记

    1 镜像烧制 2 基础配置 2.1 SSH 连接 2.2 修改管理员密码 2.3 Samba 3 功能配置 3.1 Homebridge 1 镜像烧制 从树莓派官网下载最新的 Raspbian 系统镜 ...

随机推荐

  1. 安卓ImageView.src设置图片拉伸、填满控件的方法

    代码改变世界 安卓ImageView.src设置图片拉伸.填满控件的方法 需要给你的ImageView布局加上Android:adjustViewBounds="true"

  2. 关于ul中li不对齐的问题

    将li中加入 overflow:hidden;    即可. 同时overflow:auto  可以控制滚动条的出现.

  3. 【Luogu】P2762太空飞行计划(最大权闭合图)

    题目链接 woc这题目的输入格式和输出格式真的恶心 首先我们就着样例讲一下闭合图 如图所示,第一层是两个实验节点,带来正收益:第二层是三个仪器节点,带来负收益:问讲道理到终点可以获得多大收益. 闭合图 ...

  4. 常州模拟赛d3t3 两只怪物心心相印

    题目背景 从前我是一位无名的旅人,旅途中我得到了某样东西:贤者之石.我因此得到悠久的时光和漂泊的生命.1897年冬天,我一时兴起舍弃了旅人的生活. 贤者之石创造出来的,是货真价实的黄金.我的名声传遍了 ...

  5. [COI2007] Patrik 音乐会的等待 (单调栈,模拟)

    题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的. ...

  6. Codevs 2855 游乐园的迷宫

    2855 游乐园的迷宫  时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 迷宫可是每个游乐园必不可少的项目,菜菜当然是要尝试一下啦. ...

  7. *Codeforces963C. Cutting Rectangle

    $n \leq 200000$种互不相同的矩形,给长宽和数量,都$\leq 1e12$,问有多少种大矩形只沿平行长和宽切正好切成这些矩形. 首先可以发现在一个合法情况下,有些矩形的位置是可以乱挪的,比 ...

  8. hdu - 2667 Proving Equivalences(强连通)

    http://acm.hdu.edu.cn/showproblem.php?pid=2767 求至少添加多少条边才能变成强连通分量.统计入度为0的点和出度为0的点,取最大值即可. #include & ...

  9. CentOS 7.5 初始网络配置

    最近刚装完 CentOS 7.5 系统,由于网络不通,导致无法用 yum 命令下载软件,经过了各种折腾,终于搞定了,这里讲解一下 如何设置初始网络. 本案例环境  VmWare 11.0 , 操作系统 ...

  10. ROS下使用ASUS Xtion Pro Live

    一.ROS官网hydro版本OpenNI安装 3. Installation 3.1 Ubuntu installation To install only openni_camera: sudo a ...