什么是Bean?
Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。
Spring 容器会自动完成@bean对象的实例化。
创建应用对象之间的协作关系的行为称为:
装配(wiring)
,这就是依赖注入的本质。
Spring 三种配置方案
1.在XML中进行显示配置
2.使用Java代码进行显示配置
3.隐式的bean发现机制和自动装配
推荐方式:
3>2>1
一、自动化装配bean
1.组件扫描(component scanning):Spring 会自动发现应用上下文中所创建的bean。
2.自动装配(autowiring):Spring自动满足bean之间的依赖。
package com.stalkers;
/**
* CD唱片接口
* Created by stalkers on 2016/11/17.
*/
public interface ICompactDisc {
void play();
}
package com.stalkers.impl;
import com.stalkers.ICompactDisc;
import org.springframework.stereotype.Component;
/**
* Jay同名专辑
* Created by stalkers on 2016/11/17.
*/
@Component
public class JayDisc implements ICompactDisc {
private String title = "星晴";
public void play() {
System.out.println(title + ":一步两步三步四步,望着天上星星...");
}
}
Component注解作用:
表明该类会作为组件类。
不过,组件扫描默认是不开启用的,我们还需要显示配置下Spring,从而命令它去寻找带有@Component注解的类,并为其创建bean。
1.java code开启组件扫描:
其中,如果CompoentScan后面没有参数的话,默认会扫描与配置类相同的包
@Configuration
@ComponentScan
public class CDPlayerConfig {
@Bean
public ICompactDisc disc() {
return new JayDisc();
}
}
2.xml启动组件扫描
<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.stalkers.impl"/>
</beans>
测试代码
package com.stalkers;
import com.stalkers.config.CDPlayerConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Created by stalkers on 2016/11/18.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class TestPlay {
@Autowired
private ICompactDisc jayDisc;
@Test
public void play() {
jayDisc.play();
}
}
在ComponentScan扫描的包中,所有带有@Component注解的类都会创建为bean
为组件扫描的bean命名
Spring应用上下文种所有的bean都会给定一个ID。在前面的例子中,尽管我们没有明确地为JayDisc bean设置ID,但是Spring会默认为JayDisc设置ID为jayDisc,
也就是将类名的第一个字母变成小写
。
如果想为这个bean设置不同的ID,那就将期望的值传递给@Component注解
@Component("zhoujielun")
public class JayDisc implements ICompactDisc {
...
}<