除了组件扫描与自动装配之外还有基于Java代码的装配与基于XML的装配.

有一些场景是我们不能用自动装配的,比如我们要给第三方库中的组件装配到我们的应用中,这时自动装配无效,因为自动装配只能扫描本应用中的包.

这时我们就要在基于代码代码的装配和基于XML的装配中进行选择,前面我们说到了JavaConfig相比XML更强大更安全.

一.基于Java代码的装配Bean(JavaConfig)

但是JavaConfig又与Java有所区别.

  • 概念上  JavaConfig是配置 与应用的其他代码业务逻辑不同  他不包含任何逻辑代码  也不应该被放入到任何逻辑中
  • 分布上  会将JavaConfig放到单独的包中

1.1 创建配置类

 package test;

 @Configuration
public class DogComfig{
}

@Configuration说明此类是一个配置类,但是我们没有写@ComponentScan注解,所以此类没有作用.
1.2声明简单的Bean

在JavaConfig中声明bean,则需要些一个方法,让这个方法返回我们所需要类型的实例,然后给这个Bean加上@Bean注解.@Bean注解会告诉容器这个方法返回一个对象,改对象要注册为Spring 应用上下文中的bean.方法体中包含了最终产生Bean实例的逻辑.默认bean的id是方法名.当然也可以用之前学过的方法命名@Bean(" ");逻辑可以无限复杂,只要最后返回的是一个对象就可以.

package test;

public Dog setDogs(){
return new setDogs();
}

1.3借助JavaConfig实现注入

在JavaConfig装配bean的最简单的方式就是引用创建bean的方法,如:

@Bean
publci playGame playGames(){
return new playGame(setDogs());
}

这里我们写一个一个玩游戏的方法,并将setDogs方法传入表示是和狗狗玩游戏,这里直的注意的是,Dog并不是通过调用setDogs()方法获得的,是因为在Spring会拦截所有对有@Bean注解的调用,并确保直接返回改方法创建的Bean,而不是每次都创建一个Bean.因为Spring的bean是单例的,所以在一个应用上下文中获得同一个方法的返回的bean是相同的.

最好的写法是这样的:

@Bean
publci playGame playGames(Dog){
return new playGame(Dog);
}

二.通过XML装配Bean
2.1创建XML配置规范

在使用XML为Spring装配Bean之前,你需要创建一个新的配置规范.如同JavaConfig中的@Configuration注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- configuration write here-->
</beans>

用装配Bean最基本的XML元素包含在Spring-beans模式之中,beans是xml中所有元素的根元素.
2.2声明一个简单的bean

这里需要用到spring-beans模式中的另外一个元素:<bean>,此元素相当于JavaConfig中的@bean.我们按照这种格式声明:

<bean id="dog" class = "test.setDogs"> 最好写id不写的情况下id是test.Dogs#0.#0是用来计数的,用来区分相同类型的bean. bean的id我们会一直用到.

解释:有了这个bean你就不用再去创建这个bean的实例,当Spring发现这个bean时会通过setDogs的默认构造器来创建Bean.

2.3借助构造器实例化Bean

在xml中声明DI时,会有多种可选的配置方案和风格.具体到构造器注入,有两种选择:

  • <constructor-arg>元素
  • 使用Spring 3.0的c-命名空间

<bean id =" "  class =" ">

<constructor-arg ref = " ">

</bean>

Spring遇到这个<bean>会创造一个实例,<constructor-arg>元素会告知Spring要将一个ID为ref中的值得bean传递到构造器中.

命名空间的方法更简单,但是不好理解,但是强烈建议:

<bean id =" "  class =" "  c:cd-ref=" ">

讲解如图:

明天补上

Spring学习笔记(三)之装配Bean的更多相关文章

  1. Spring学习笔记(二)之装配Bean

    一,介绍Bean的装配机制 在Spring中,容器负责对象的创建并通过DI来协调对象之间的关系.但是我们要告诉Spring创建哪些Bean并且如何将其装配在一起.,装配wiring就是DI依赖注入的本 ...

  2. Spring学习笔记三:Bean管理

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6775827.html  一:如何使用Spring获取对象 1:定义bean类:要按照注入方式来定义对应的bea ...

  3. Spring 学习笔记(五)—— Bean之间的关系、作用域、自动装配

    继承 Spring提供了配置信息的继承机制,可以通过为<bean>元素指定parent值重用已有的<bean>元素的配置信息. <?xml version="1 ...

  4. Spring学习笔记--使用注解装配

    使用@Autowired注解 从Spring2.5开始,最有趣的一种装配Spring Bean的方式是使用注解自动装配Bean的属性.Spring默认禁用注解装配,最简单的启用方式是使用Spring的 ...

  5. Spring学习笔记(7)——Bean的基本配置

            先从IOC说起,这个概念其实是从我们平常new一个对象的对立面来说的,我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就 ...

  6. Spring学习系列(二) 自动化装配Bean

    一.Spring装配-自动化装配 @Component和@ComponentScan 通过spring注解(@Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组 ...

  7. Spring学习笔记(三):面向切面的Spring

    Spring之面向切面编程 一.理解何为面向切面编程 对于这个的理解,我觉得Spring实战中的例子讲得很明白: 假设我现在是一个小区用户,每个月小区都要收电费,这时候就会来人查看电表,算出来这个月电 ...

  8. Spring学习笔记--通过构造方法创建Bean

    如果一个bean没有默认的构造函数,那么可以通过工厂方法来构造一个bean.Spring通过<bean>元素的factory-method属性来装配工厂创建的Bean.下面例子中的Stag ...

  9. spring学习笔记三:Component注解(把POJO类实例化到spring的IOC容器中)

    Component注解:把普通的POJO 类实例化到spring的IOC容器中,就是定义成<bean id="" class=""> 项目目录树: ...

随机推荐

  1. MVC5 网站开发之九 网站设置

    网站配置一般用来保存网站的一些设置,写在配置文件中比写在数据库中要合适一下,因为配置文件本身带有缓存,随网站启动读入缓存中,速度更快,而保存在数据库中要单独为一条记录创建一个表,结构不够清晰,而且读写 ...

  2. java反射 cglib asm相关资料

    有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...

  3. Mifare系列4-组成(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38081241 MIFARE集成电路芯片内含EEPROM.RF接口和数字控制单元. ...

  4. mysql 数据库迁移

    公司的视频转码服务 使用mysql作为 任务队列, 其中mysql 是我们自己维护的 单例. 后来应业务部门建议,我们计划将现有的mysql 向dba进行迁移,以下记录一下 数据库迁移过程中的东西. ...

  5. ssh 服务器之间公钥认证方式的配置

    前言 项目中需要编写脚本在服务器之间上传或者下载文件,但没有相关服务器来测试脚本,于是就着手安装两台server,然后用ssh的相关命令去配置server之间公钥认证登录. 步骤 1. 在VM Box ...

  6. WebStorm设置手机测试服务器-局域网内其他设备访问

    前端开发中,经常需要将做好的页面给其他同事预览或手机测试,之前一直用的第三方本地服务器usbwebserver,偶然了解到WebStorm内置服务器也可以满足此需求,来看看如何设置吧~~ 1.端口更改 ...

  7. c#中的事件

    之前的博客讲到委托,委托本质上是将方法作为方法的参数传给方法.实际开发中,实现某个功能的的代码通常会封装成一个类,本例中字符串处理封装成MyStringProc类, 代码如下: namespace D ...

  8. 微信公众平台开发教程--方培工作室,PHP语言版本

    准备工作 微信公众平台的注册 介绍如何注册一个微信公众账号. 入门教程 微信公众平台开发入门教程 内容:1.申请SAE作为服务器; 2.启用开发模式; 3.微信公众平台PHP SDK; 4.接收发送消 ...

  9. [置顶] CSDN博客第四期移动开发最佳博主评选

    CSDN博客第三期最佳移动开发博主评选圆满结束,恭喜所有上榜用户,为继续展示移动开发方向优秀博主,发掘潜力新星,为移动开发方向的博客用户提供平台,CSDN博客第四期移动开发最佳博主评选开始.同时,获奖 ...

  10. youcompleteme install and configure

    三四年前我配置vim插件的时候还都是手动配置,还没有听说vundle这个vim插件管理工具,现在配置vim插件的时候基本上都用vundle,这个插件也确实是方便快捷,只不过这东西时能话了就不清楚里面的 ...