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的更多相关文章

  1. Spring学习总结之---装配Bean

    Spring配置的可选方案 前言:Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,作为开发人员,你需要告诉Spring容器要创建那些Bean,以哪种方式创建,并且如何将 ...

  2. Spring学习笔记--自动装配Bean属性

    Spring提供了四种类型的自动装配策略: byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中. byType – 把与Bean的属性具有相同类型 ...

  3. Spring实战3:装配bean的进阶知识

    主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...

  4. Spring实战2:装配bean—依赖注入的本质

    主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须 ...

  5. Spring框架(3)---IOC装配Bean(注解方式)

    IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...

  6. Spring学习(七)bean装配详解之 【通过注解装配 Bean】【自动装配的歧义解决】

    自动装配 1.歧义性 我们知道用@Autowired可以对bean进行注入(按照type注入),但如果有两个相同类型的bean在IOC容器中注册了,要怎么去区分对哪一个Bean进行注入呢? 如下情况, ...

  7. spring学习总结——高级装配学习三(Bean的作用域)

    一.bean的作用域 在默认情况下,Spring应用上下文中所有bean都是作为以单例(singleton)的形式创建的.也就是说,不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同 ...

  8. Spring学习(六)bean装配详解之 【通过注解装配 Bean】【基础配置方式】

    通过注解装配 Bean 1.前言 优势 1.可以减少 XML 的配置,当配置项多的时候,XML配置过多会导致项目臃肿难以维护 2.功能更加强大,既能实现 XML 的功能,也提供了自动装配的功能,采用了 ...

  9. Spring学习(五)bean装配详解之 【XML方式配置】

    一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原则 最优先:通过隐式 Bean 的发现机制 ...

随机推荐

  1. 项目管理心经——正确的使用Microsoft Project

    第一步:填写task items 第二步:定义个性化日历(Tools-->Change working time) 第二步:填写task duration 第三步:填写前置任务 第四步:自动生成 ...

  2. Asp.net中DataTable的排序功能

    DataTable里的数据,如果是从数据库中取得的数据,我们可以用order by排序,而从excel表格取得的数据,就需要自己进行操作了. 例如,Dt_Data2是读取Excel表格取到的数据 Da ...

  3. Stop Bitbucket prompting for password in git

    出处:http://qosys.info/485/bitbucket-git-prompt-for-password In some cases after adding public ssh key ...

  4. [Android自动化] 在 pip-9.0.1 版本情况下安装 uiautomator2 报错的解决办法

    1.在命令窗口中使用命令: pip install uiautomator2 时报 pip 版本过低,需要先升级 pip 版本,理论上会按照提示进行升级 pip 操作,但执行升级命令时到最后却还是报错 ...

  5. 微信小程序点击 navigator ,页面不跳转

    1.navigator 对应的 url 必须配置在app.json的pages中: 2.navigator 对应的 url 不能配置在"tabBar"的"list&quo ...

  6. JS中 map, filter, some, every, forEach, for in, for of 用法总结

    本文转载自:http://blog.csdn.net/gis_swb/article/details/52297343 1.map 有返回值,返回一个新的数组,每个元素为调用func的结果. let ...

  7. python第三十九课——面向对象(二)之设计类

    1.设计类class 车: #属性 颜色 = red 品牌 = "BMW" 车牌 = "沪A88888" #函数 行驶(): 停止(): 2.实例化车对象 ca ...

  8. VS2012中使用SOS调试CLR

    之前看了<用WinDbg探索CLR世界>的一些列文章,发现SOS真的是一个非常好的调试.net的工具, 然后又惊喜的在http://blogs.msdn.com/b/marioheward ...

  9. vagrant特性——基于docker开发环境(docker和vagrant的结合)-2-命令

    Docker Commands Docker provider公开了一些额外的vagrant命令,这些命令对于与Docker容器交互非常有用.这有助于你在vagrant之上的工作流程,这样你就可以在底 ...

  10. setattr

    setatt r给对象的属性赋值,若属性不存在,先创建再赋值 用法 setattr(object, name, values) object -- 对象. name -- 字符串,对象属性. valu ...