SpringInAction4笔记——装配
重点:常用的上下文环境
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笔记——装配的更多相关文章
- #Spring实战第二章学习笔记————装配Bean
Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...
- Spring学习笔记—装配Bean
在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...
- SpringInAction4笔记——复习
由于目前只做后端的业务代码的开发,所以根据自己掌握的熟悉程度,只需要复习几个模块即可 重点看的是核心容器(IOC),redis,缓存,消息(主要是rabbitmq),事务,springboot,单元测 ...
- Spring学习笔记-装配Bean-02
什么是装配 创建应用对象之间写作关系的行为通常称为装配(wiring),这也是依赖注入(DI)的本质. Spring配置的可选方案 Spring提供了3中主要的装配机制: ● 在XML中进行显式配置. ...
- SpringInAction4笔记——web
1,java配置 extends AbstractAnnotationConfigDispatcherServletInitializer public class SpitterWebInitial ...
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring 笔记(三)Bean 装配
前言 Spring 有两大核心,也就分成两份笔记分别记录. 其一是管理应用中对象之间的协作关系,实现方式是依赖注入(DI),注入依赖的过程也被称为装配(Wiring). 基于 JavaConfig 的 ...
- Raspberrypi 装配笔记
1 镜像烧制 2 基础配置 2.1 SSH 连接 2.2 修改管理员密码 2.3 Samba 3 功能配置 3.1 Homebridge 1 镜像烧制 从树莓派官网下载最新的 Raspbian 系统镜 ...
随机推荐
- 九度oj 题目1467:二叉排序树
题目描述: 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值: 2. 若右子树 ...
- NOI2015 荷马史诗 【k-哈夫曼树】
题目 追逐影子的人,自己就是影子 --荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由<奥德赛> ...
- essential c++ 随笔
编写一个C++程序: vector初始化两种方法: vector<int>elem_seq(seq_size); elem_seq[0]=1 elem_seq[1]=2; 另一种方法则是利 ...
- bzoj1411: [ZJOI2009]硬币游戏
1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 965 Solved: 420[Submit][Status ...
- docker-nginx-标记一下
拉取nginx镜像 然后启动容器: docker run -p : --name mynginx -d -v $PWD/nginx.conf:/etc/nginx/conf.d/default.con ...
- 关于maven下载慢的问题
昨天刚接触到maven,尝试在mac上配置maven时发现,下载速度极度缓慢,从网上找了些方法,总算是解决了问题. 修改${maven.home}/conf或者${user.home}/.m2文件夹下 ...
- String源码分析(1)--哈希篇
本文基于JDK1.8,首发于公众号:Plus技术栈 让我们从一段代码开始 System.out.println("a" + "b" == "ab&qu ...
- 2018 ICPC 沈阳网络预赛 Fantastic Graph (优先队列)
[传送门]https://nanti.jisuanke.com/t/31447 [题目大意]:有一个二分图,问能不能找到它的一个子图,使得这个子图中所有点的度数在区间[L,R]之内. [题解]首先我们 ...
- 5.Longest Palindrome substring
/* * 5.Longest Palindrome substring * 2016-4-9 by Mingyang 自然而然的想到用dp来做 * 刚开始自己做的时候分的条件太细,两个index相等, ...
- Word文档转Markdown插件(Windows)
在线的转换,Shell脚本的转换都试过了,都没有原生Word文档集成的插件转换这么好用,并且没有Bug. 下载:http://www.writage.com/