文章标题
来源:互联网 发布:mac导入铃声 编辑:程序博客网 时间:2024/06/05 18:37
一、简介:
Spring能够进行自动化的装配,它使用两种方式来进行自动化装配:
1、组件扫描:
Spring会自动发现应用上下文中所创建的bean
2、自动装配:
Spring会自动满足bean之间的依赖关系
比较有趣的是,Spring的自动化装配使用了零xml配置,而是使用全代码配置,其中代码的配置文件使用@Configuration注解进行标注。
二、组件扫描:
@Component能给一个类自动生成对象并注入到Spring容器中,比如下面的CDPlayer,会自动new一个CDPlayer的对象并放置到Spring容器中。
我们知道,Spring容器中每个bean都有自己唯一的一个id,那么自动注入的bean的id为多少呢?经测试,其规则如下:
1、如果@Component中有值,类似
@Component(“xxx”)
那么此bean的id即为xxx
2、如果类名为第一个字母大写,第二个字母小写,即满足首字母大写的驼峰命令规则,比如CdPlayer,。
那么其bean的id第一个字母要小写,其余不变,所以最终为cdplayer
3、如果不满足规则1,比如CDPlayer
那么其bean的id跟类名相同,所以最终为CDPlayer
1、
Player:
public interface Player {
void play();
}
@Component
public class CDPlayer implements Player {
public void play() {
System.out.print(“播放CD”);
}
}
2、配置对象
需要注意的是,配置对象需要 @Configuration和@ComponentScan注解,而@ComponentScan注解是标注Spring扫描的基础包名的,如果没有值,默认会扫描自己所在的包的所有类。
其中的Configuration配置对象:
@Configuration
@ComponentScan
public class PlayerConfig {
}
那么如何配置扫描包呢?比如我想扫描com.happyheng包下的所有类,可以这样:
@ComponentScan(basePackages = “com.happyheng”)
3、使用:
我们使用junit4来进行测试,注意在想获取Spring中bean上加上@Autowired,Spring会自动注入。
另外,下面的Player可以换成CDPlayer,因为CDPlayer的对象既是CDPlayer的对象,也是Player的对象。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = PlayerConfig.class)
public class TestCDPlayer {
@Autowiredprivate Player cdPlayer;@Testpublic void testNotNull(){ cdPlayer.play();}
}
三、将一个对象注入到另一个对象中
比如有一个People类,要为其注入一个Player类,然后其跑步的时候会调用Player类的play方法,这样实现即可:
@Component
public class People {
//Spring会自动把生成的Player注入进来 @Autowired private Player player; //注入的规则分为两步: //1、Spring会先查找id为player的Bean对象,如果找到,注入进来 //2、如果没有找到id为player的Player对象,那么就去寻找Spring容器中查找Player的对象,如果一个都没有,或者有两个或者多个,那么就会报错。 public void run(){ player.play(); System.out.println("正在跑步"); }
}
四、在JavaConfig中来装配bean
一般来说,自动装配bean已经能为我们解决很多问题,但是,有的时候可能我们需要更自动的配置,比如我想获取同一个类的多个bean对象,就可以在JavaConfig中声明方法来装配bean:
@Bean
public Player player(){
return new CDPlayer();
}
此时Spring容器就会生成一个Player的对象,其id为player(注意id与方法名是一样的)
我们也可以为其指定id:
@Bean(name=”firstPlayer”)
public Player player(){
return new CDPlayer();
}
五、如何进行使用:
Spring是围绕ApplicationContext上下文容器的,所以无论如何,Spring都要根据配置信息将bean加载到ApplicationContext上下文容器中
1、main函数中进行测试:
使用AnnotationConfigApplicationContext来从JavaConfig中获取到上下文对象:
public static void main(String args[]){
ApplicationContext context = new AnnotationConfigApplicationContext(PlayerConfig.class);
//通过id来获取:
People people = (People) context.getBean(“people”);
people.run();
}
2、test测试:
只需要指定ContextConfiguration即可:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = PlayerConfig.class)
public class TestSpring {
@Autowired
private Player cdPlayer;
@Autowired
private People people;
@Test
public void testNotNull(){
cdPlayer.play();
}
@Test
public void testPeople(){
people.run();
}
}
原文:http://blog.csdn.net/happyheng/article/details/53152414
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- #define #ifndef #if
- 页面进入显示点击按钮再查数据库展现列表
- Flink DataSet API Programming Guide学习&译文(未完待续)
- 【LeetCode】 160. Intersection of Two Linked Lists C语言
- 数据库
- 文章标题
- iOS之正则表达式的使用和谓词(NSPredicate)的使用(三)
- Petri网可达分析算法
- SIFT学习记录
- pip install urllib2不能安装
- 桥接模式下socket回应
- 文章标题
- iOS之实现按钮拖动/tableViewcell多选,拖动/collectionviewcell多选,拖动(交换位置)
- Android辅助功能AccessibilityService与抢红包辅助