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. JS控制div跳转到指定的位置的几种解决方案总结

    原文:http://www.jb51.net/article/96574.htm 这篇文章主要介绍了JS控制div跳转到指定的位置的几种解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考 ...

  2. Oracle_spatial的常见错误与注意事项

    常见的错误 1.ORA-13226:没有空间索引接口将不被支持 当使用一个空间操作符时,如果没有使用空间索引导致该操作符不能被完成将会返回该错误.这可能会发生在当你使用的列上没有空间索引.或者优化器没 ...

  3. 如何用IDEA http://localhost:8080/不带上项目名访问

    IDEA TOMCAT设置中把这里的项目名去掉即可

  4. 谈谈HTTP

    HTTP又称超文本传输协议,在互联网上广为流传和应用. 今天主要讲这么几个? a.针对HTTP下细分为: HTTP概念.Request和Response详解.Request中GET和POST的区别.说 ...

  5. 分享四个 Linux 上的网络信息嗅探工具

    在计算机网络中,数据是暴露的,因为数据包传输是无法隐藏的,所以让我们来使用 whois.dig.nmcli和 nmap 这四个工具来嗅探网络吧. 请注意,不要在不属于自己的网络上运行 nmap ,因为 ...

  6. (一)RESTful 介绍

    什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”. R ...

  7. HDU 1827 Summer Holiday(tarjan求强连通分量+缩点构成新图+统计入度+一点贪心思)经典缩点入门题

    Summer Holiday Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  8. ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值

    用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器.最近才发现IActionFilter的OnActionExecuting方法,甚 ...

  9. 深入解析Java中的装箱和拆箱

    自己主动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最主要的东西,再来看一以下试笔试中常常遇到的与装箱.拆箱相关的问题. 下面是本 ...

  10. 28 个 C/C++ 开源 JSON 程序库性能及标准符合程度评测

    28 个 C/C++ 开源 JSON 程序库性能及标准符合程度评测 坊间有非常多的 C/C++ JSON 库,怎么选择是一个难题. [nativejson-benchmark](https://git ...