spring入门之装配bean(一)

来源:互联网 发布:cocos2dx棋牌游戏源码 编辑:程序博客网 时间:2024/06/06 03:22

spring 4学习之装配Bean

这里不过多的讲述spring的依赖注入和aop的概念,这里仅仅是作为快速入门的指导。下面进入正文:

Spring具有非常大的灵活性,它提供了三种主要的装配机制:

  • 在XML中进行显式配置
  • 在Java中进行配置
  • 隐式的bean发现机制和自动装配

Spring有多种配置方案,看似复杂,而且每种配置技术有一些重复,但其实是非常棒的哟! 选哪一种都没问题,看你的风格,你可以由头到尾只选一种,也可以也xml装配一些bean,使用Spring基于Java的配置来装配一些bean,而将剩余的bean让Spring去自动发现。

有人说,干嘛要那么多种,烦的很,直接一种不就好了吗?好好好,别急,晚点会提到这样做的好处。但我一般坚持一个优先级原则:自动装配 > 在java中配置 > 在XML中配置。

根据优先级,我们先快速的讲述一下自动化装配bean。

首先我们要知道Spring从两个角度来实现自动化装配:

  • 组件扫描:Spring会自动发现应用上下文中所创建的bean.
  • 自动装配:Spring自动满足bean之间的依赖

好,那么接下来我们先介绍几个在自动创建bean的时候用到的较重要的注解,方便等下给例子的时候不用多多赘述。

  • @Component : 该注解表明该类会作为组件类,并告知Spring要为这个类创建bean.如果你不给该类标识,Spring会默认将类名首字母小写后作为这个bean的标识(也可叫ID),如果你想自己定义,可以这样@Component(“这里输入你定义的标识(ID)”).
  • @ComponentScan: 该注解启用了组件扫描,会自动寻找带有@Component注解的类。注意,如果单单只有一个这个注解的话,@ComponentScan默认只会扫描该类所处的包以及这个包下的所有的子包。
  • @Autowired : 该注解实现自动装配,就是当你在别的类中想要引用Spring中存在的bean,就在字段上面加上该注解把。

实例

下面我们通过例子来巩固和扩展上面的内容。

在这个MP3和流失媒体音乐的时代,CD(compact disc)显得有点典雅甚至陈旧。随着以物理载体进行音乐交付的方式越来越少,CD也变得越来越稀少。

尽管如此,CD给我们一个DI (依赖注入) 如何运行提供了一个很好的样例。如果你不将CD插入(注入)到CD播放器 (CD player),那么CD播放器是没多大用的。所以可以这样说,CD播放器依赖于CD才能完成它的使命。

为了在Spring中讲述这个例子,让我们先建立一个CD的概念,即在Javaz中建立一个CompactDisc的接口,它是用来定义CD的一个接口:

`    package soundsystem;    public interface CompactDisc {        void play();    }`

CD里面有什么歌曲内容啊那些不重要,重要的是,作为接口,它定义了CD播放器对一盘CD所能进行的操作。它将CD播放器的任意实现与CD本身的耦合度降低到了最小的程度。

下面我们需要一个CompactDisc的实现。

`    package soundsystem;    import org.springframework.sterertype.Component;    @Component    public class SgtPeppers implements CompactDisc {        private String title = "sgt";        private String artist = "The Beatles ";        public void play() {            System.out.println("playing " + title + "by" + artist);        }    }       `

下面我们通过为bean添加注解实现自动装配

`    package soundsystem;    import org.springframework.beans.factory.annotation.Autowired;    org.springframework.stereotype.Component;    @Component    public class CDPlayer implements MediaPlayer {        private CompactDisc cd;        @Autowired        public CDPlayer(CompactDisc cd) {            this.cd = cd;        }        public void play() {            cd.play();        }    }`

可以看出@Autowired注解可以用在构造器上。但它不仅仅只有这样,还能用在Setter方法上,比如:

`    @Autowired    public void setCompactDisc(CompactDisc cd) {        this.cd = cd;    }`

哈哈,其实Setter方法没有什么特别的地方,@Autowired可以用在任何方法上。Spring会尝试满足方法参数上所声明的依赖。假如有且只有一个bean匹配所依赖需求的话,那么这个bean将会被装配进来。如果没有这个bean,那么在应用上下文创建的时候,Spring会抛出一个异常。为了避免异常的出现,你可以将@Autowired的required属性设置为false。

原创粉丝点击