相对于XML方式而言,通过注解的方式配置bean更加简洁和优雅,而且和MVC组件化开发的理念十分契合,是开发中常用的使用方式。
组件被上述注解标识后还需要通过Spring进行扫描才能够侦测到。
<context:component-scan base-package="com.atguigu.component"/>
<context:component-scan
base-package="com.atguigu.component"
resource-pattern="autowire/*.class"/>
④ 包含与排除
● <context:include-filter>
子节点表示要包含的目标类
注意:通常需要与use-default-filters属性配合使用才能够达到“仅包含某些组件”这样的效果。即:通过将use-default-filters属性设置为false, 禁用默认过滤器,然后扫描的就只是include-filter中的规则指定的组件了。
● <context:exclude-filter>
子节点表示要排除在外的目标类
● component-scan下可以拥有若干个include-filter和exclude-filter子节点
● 过滤表达式
3) JAR包 必须在原有JAR包组合的基础上再导入一个:spring-aop-4.0.0.RELEASE.jar
<context:component-scan>
元素会自动注册一个bean的后置处 理器:AutowiredAnnotationBeanPostProcessor
的实例。该后置处理器可以 自动装配标记 了@Autowired
、@Resource
或@Inject
注解的属性。
@Autowired
注解
① 根据类型实现自动装配。
② 构造器、普通字段(即使是非public)、一切具有参数的方法都可以应用@Autowired 注解
③ 默认情况下,所有使用@Autowired注解的属性都需要被设置。当Spring找不到匹 配的bean装配属性时,会抛出异常。
④ 若某一属性允许不被设置,可以设置@Autowired注解的required属性为 false
⑤ 默认情况下,当IOC容器里存在多个类型兼容的bean时,Spring会尝试匹配bean 的id值是否与变量名相同,如果相同则进行装配。如果bean的id值不相同,通过类型的自动装配将无法工作。此时可以在@Qualifier
注解里提供bean的名称。Spring 甚至允许在方法的形参上标注@Qualifiter
注解以指定注入bean的名称。
⑥ @Autowired
注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的bean进行自动装配。
⑦ @Autowired
注解也可以应用在集合属性上,此时Spring读取该集合的类型信息,然后自动装配所有与之兼容的bean。
⑧ @Autowired
注解用在java.util.Map上时,若该Map的键值为String,那么 Spring将自动装配与值类型兼容的bean作为值,并以bean的id值作为键。
@Resource
@Resource注解要求提供一个bean名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为bean的名称。
@Inject
@Inject和@Autowired注解一样也是按类型注入匹配的bean,但没有reqired属性。