一、概述
Spring的IOC容器最开始可以通过xml配置的方式将bean加载到容器中,但是在实际应用过程中,需要配置的xml文件太多,从而出现了通过注解(Annotation)的方式来初始化bean,大大减少了xml文件的配置。
二、在classpath中扫描组件
1、组件扫描(component scanning)
Spring可以从classpath下自动扫描并实例化具有特定注解的组件,即在 Spring 的 XML 配置中,通过< context:component-scan >元素开启 Spring Beans的自动扫描功能。开启此功能后,Spring 会自动扫描指定的包(base-package 属性设置)及其子包下的所有类。
<context:component-scan base-package="com.etime.spring">
</context:component-scan>
2、特定的注解
①、@Component:基本注解,把资源让 spring 来管理,相当于在 xml 中配置一个 bean。
②、@Respository:用于持久层的注解。
③、@Service:用于业务层的注解。
④、@Controller:用于控制层的注解。
以上四个注解都是在告诉Spring把这个类放进IOC容器中,区别在于区分不同类在程序中的作用。
对于扫描到的组件, Spring 有默认的命名策略: 使用类名, 第一个字母小写,也可以在注解中通过 value 属性值(指定 bean 的 id)标识组件的名称。
三、自动装配
组件装配:< context:component-scan > 元素会自动注册 AutowiredAnnotationBeanPostProcessor 实例, 该实例可以自动装配具有 @Autowired 和 @Resource 、@Inject 注解的属性。 三个注解的作用几乎相同的,一般使用@autowired 注解。
@Autowired注解首先通过类型匹配,如果有多个bean,就通过变量名称匹配,如果匹配不到就会抛异常,这时可以采用@resource注解,可以指定需要装配的bean的id。
@Autowired(required=true/false)表示是否必须要装配上,默认为true。