Spring学习总结之装配bean
1. XML中显式配置
规范,文件头:
<?xml version=”1.0” encoding=”UTF-8”?>
<beans xmlns=http://www.springframework.org/schema/beans
xmlns=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework,org/schema/context”>
<!—configuration details go here -->
</beans>
1) 声明一个简单的bean
<bean id=”test” class=”com.song.Test” />
没有明确给定ID时,bean将根据全限定类名进行命名,“com.song.Test
#0”,其中#0只是一个技术形式,用来区分相同类型的其他bean
2) 构造器注入
<bean id=”test” class=”com.song.Test”>
<constructor-arg ref=”hello” />
</bean>
此时,spring会将ID为hello的bean作为com.song.Test的构造方法的参数传入;如果是字面量(如字符串之类的常量),将ref修改为value
<bean id=”test” class=”com.song.Test”
c:hello-ref=”hello” />
这是c-命名空间,其中c是标志,hello是com.song.Test的属性的属性名,ref是注入参数标志,”hello”表示注入的bean的ID;可以将hello替换为_0(_1,_2)表示第几个参数,与之对应;只有一个参数时,可以直接用_对hello替换;如果是字面量,去掉-ref;使用c-命名空间需要在文件头中加入:
xmlns:c=”http://www.springframework.org/schema/c”
constructor-arg和c-命名空间区别主要是constructor-arg可以装配集合
3) 属性注入
使用属性的setter方法注入属性
<bean id=”test” class=”com.song.Test”>
<property name=”hello” ref=”hello” />
</bean>
name为属性名,ref为注入的bean的ID;如果注入的是字面量,将ref改为value
<bean id=”test” class=”com.song.Test”
p:hello-ref=”hello” />
p-命名空间,hello是com.song.Test的属性的属性名,ref是注入参数的标志,”hello”表示注入的bean的ID;如果注入的是字面量,去掉-ref;使用p-命名空间需要在文件头中加入:
xmlns:p=”http://www.springframework.org/schema/p”
property和p-命名空间区别主要是property可以装配集合
2. Java中显式配置
@Configuration
public class HelloConfig {
@Bean
public Hello sayHello() {
return new HelloImpl();
}
}
@Bean注解同样可以添加名字,比如@Bean(name=“hello”),
带@Bean注解的方法可以采用任何必要的Java功能来产生bean实例,比如在方法中加一些条件判断,返回不同的实例
3. 隐式的bean发现机制和自动装配
组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean
自动装配(autowiring):spring自动满足bean之间的依赖
1) 创建可被发现的bean
使用注解@Component(或@Named,只有细微差别,基本上可以互换),同时启用组件扫描,方式有:@Configuration@ComponentScan注解,XML配置(component-scan)
2) 为组件扫描的bean命名
@Component(“beanName”)或者@Named(“beanName”)
3) 设置组件扫描的基础包
@ComponentScan(“packageName”)或者@ComponentScan( basePackages = {“packageName1”, ”packageName2”…})
4) 通过注解实现自动装配
@Autowired(@Inject在大多数情况下可以互换)
Spring学习总结之装配bean的更多相关文章
- Spring学习总结之---装配Bean
Spring配置的可选方案 前言:Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,作为开发人员,你需要告诉Spring容器要创建那些Bean,以哪种方式创建,并且如何将 ...
- Spring学习笔记--自动装配Bean属性
Spring提供了四种类型的自动装配策略: byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中. byType – 把与Bean的属性具有相同类型 ...
- Spring实战3:装配bean的进阶知识
主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...
- Spring实战2:装配bean—依赖注入的本质
主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须 ...
- Spring框架(3)---IOC装配Bean(注解方式)
IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...
- Spring学习(七)bean装配详解之 【通过注解装配 Bean】【自动装配的歧义解决】
自动装配 1.歧义性 我们知道用@Autowired可以对bean进行注入(按照type注入),但如果有两个相同类型的bean在IOC容器中注册了,要怎么去区分对哪一个Bean进行注入呢? 如下情况, ...
- spring学习总结——高级装配学习三(Bean的作用域)
一.bean的作用域 在默认情况下,Spring应用上下文中所有bean都是作为以单例(singleton)的形式创建的.也就是说,不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同 ...
- Spring学习(六)bean装配详解之 【通过注解装配 Bean】【基础配置方式】
通过注解装配 Bean 1.前言 优势 1.可以减少 XML 的配置,当配置项多的时候,XML配置过多会导致项目臃肿难以维护 2.功能更加强大,既能实现 XML 的功能,也提供了自动装配的功能,采用了 ...
- Spring学习(五)bean装配详解之 【XML方式配置】
一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原则 最优先:通过隐式 Bean 的发现机制 ...
随机推荐
- Hash问题----Hash强碰撞
包含内容:hellowword,byeworld文件md5,pdf1,2的sha1值. 等待笔记...
- MyBatis 中的级联
MyBatis 的级联分为 3 种. 1.鉴别器(discriminator):它是根据某些条件决定采用具体实现类级联的方案,比如体检表要根据性别去区分. 2.一对一(association):比如学 ...
- LeetCode 休闲计划
老年退役选手的 LeetCode 休闲之旅 前言 不知不觉两年多的大学时光悄然流逝,浑浑噩噩的状态似乎从来没有离开过自己. 这两年刷题似乎一直是常态.在退役之后的现在,深感有些东西一段时间没有接触,很 ...
- 【Ansible 文档】【译文】常见问题
http://docs.ansible.com/ansible/latest/faq.html 如何为一个task或者整个Playbook设置PATH或者任意其他环境变量? 通过environment ...
- 前端工程构建工具之Yeoman
一.Yeoman 简介 通常在开发新项目时我们都需要配置工程环境,开发目录,需要下载一些库.框架文件(如 jQuery.Backbone 等),配置编译环境(Less.Sass.Coffeescrip ...
- JavaScript利用Date实现简单的倒计时实例
介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法.Date在js中和Array类似,都是拥有自己的特殊方法的特殊对象. 创建 Date 对象的语法: var my ...
- loli的混合算法测试
最近刚讲了最短路,说要考试我以为是考最短路,然而只有一道是最短路... 数据似乎有一点问题,不管了,反正手工测评都是对的,那现在就来看看题吧. Balanced:(此处并没有网址) 题意概述:$n$ ...
- Guava 的EventBus示例代码(简单笔记,后期补充)
package guavademo.event.bus; import com.google.common.eventbus.EventBus; import com.google.common.ev ...
- centos限制远程尝试密码次数
CentOS中有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁定用户.编译PAM的配置文件 # vim /etc/pam.d/login添加: au ...
- ORACLE RMAN备份及还原(转)
RMAN可以进行增量备份:数据库,表空间,数据文件 只有使用过的block可以被备份成backup set 表空间与数据文件对应关系:dba_data_files / v$datafile_heade ...