您的位置:首页 > 编程语言 > Java开发

Spring框架(三)依赖注入之注解方式

2016-12-29 14:45 176 查看
本篇文章建立在上一篇【依赖注入的概念】基础之上,如果没有看上一篇,建议先看看。

依赖注入只是Spring众多功能中的一个,也是比较重要的一个。此篇文章我们将介绍怎么使用Spring的注解完成依赖注入功能。此篇文章的案例建立在上一篇的基础之上,我们举过一个例子,就是老板和秘书之间的关系:一般领导都会有一个秘书,要秘书有什么用呢?估计大家都知道,可以把一些事情交给秘书来做,减少领导的工作量,这样领导有更多精力去处理那些更重要的事情。
比如,领导要喝水,如果没有秘书就是自己去倒水,浪费时间;
如果有秘书,就是秘书倒好谁递到领导手上,领导就没有毕业为这点小事分心了。接下来使用Spring注解来完成上面的场景。代码如下:
0、Spring的Jar包导入

依赖注入属于Spring Core模块中的内容,所以按照我们之前写的一篇文章【Spring简单介绍】的介绍中来看,需要的jar包如下:



1、创建一个Water类,表示茶水:

package com.androidxx.ioc;
/**
* 水
* @author yangjw
*
*/
public class Water {

@Override
public String toString() {
return "茶水";
}
}
2、创建一个Leader类,表示老板:
package com.androidxx.ioc;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
* 领导
* @author yangjw
*
*/
@Component
public class Leader {
private Water water;

@Autowired
public void setWater(Water water) {
this.water = water;
}

/**
* 喝水
*/
public void drink() {
//打印日志,用来表示领导喝水了
System.out.println("领导喝" + water);
}

}说明:
以上代码中用到了@Component和@Autowired注解,他们的含义如下:

@Component:是一个类级别的注解,作用于Class上,表示此类是一个需要Spring处理的组件。

@Autowired:是一个方法级别的注解,主要作用于构造器或者方法上,表示此方法的形参需要得到Spring的注入。比如setWater方法中的参数Water对象,需要Spring自动注入进来,而不是用户去New一个。

一般情况下,只要有@Autowired的类,都必须使用@Component注解。这样完整的解释就是,@Component类中有一个被@Autowired注解的方法中的参数需要Spring注入。

3、创建一个Secretary类,表示秘书:

package com.androidxx.ioc;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
* 秘书
* @author yangjw
*
*/
@Configuration
@ComponentScan
public class Secretary {
/**
* 倒水的行为
* @return 准备好的水
*/
@Bean
public Water getWater() {
return new Water();
}
}
说明:
以上代码中用到三个注解,分别是:

@Bean:表示由getWater这个方法提供需要被注入的Bean对象。结合上面的例子解释就是提供所需要的茶水。

@ComponentScan:表示所需要的Bean对象在此类中进行扫描(scan)。此注解就表示当前类是一个提供所需对象的类,结合上面的例子就是用@ComponentScan注解的类是一个秘书。

@Configuration:表示此类在Spring初始化配置的时候就要被加载和编译。

4、Spring的初始化,并执行。

package com.androidxx.ioc;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class LeaderTest {

@Test
public void test() {
//初始化Spring配置,此句代码就是在加载被@Configuration注解的配置类,并将@Bean注解的方法提供的对象预先加载到缓存中。
ApplicationContext appCtx = new AnnotationConfigApplicationContext(Secretary.class);
//从Spring的ApplicationContext中取出缓存的Bean对象,也就是Leader对象
Leader leader = appCtx.getBean(Leader.class);
//领导喝水
leader.drink();
}

}

以上就是Spring通过注解的方式完成的依赖注入,其中我们主要掌握几个注解的使用方法就行。重要代码上面也都写有注释,如果有不明白的,欢迎提问。
当然,Spring依赖注入的注解很多,本篇文章中我们只是提到了几个常用的注解,后面将会重新写一篇文章介绍更全面的Spring依赖注入的注解。

以上案例都是创建的简单Java Project完成的。

梦想,是用来想的。想美了,再埋头写代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 框架 Javaee