1 使用注解来配置bean
2 基于注解来装配bean的属性
组件扫描:spring能从classpath下自动扫描,侦测和实例化具有特定注解的组件。
特定组件包括
@component:基本注解,标识了一个受spring管理的组件
@respository:标识持久层组件
@service:标识服务层(业务层)组件
@controll:标识表现层组件 UserServiceImp userService
目前这几个注解是可以混用的,spring目前无法识别各组件区别
对于扫描到的组件,spring有默认的命名策略:使用非限定类名,第一个字母小写。也可以在注解中通过value属性标识组件的名称。
当在组件类上使用了特定的注解之后,还需要在spring的配置文件中声明<context:component-scan>:
-base-package属性指定一个需要扫描的基类包,spring容器将会扫描这个基类包及其子包中的所有类。
resource-pattern可以指定只扫描某子包
<!--context:exclude-filter子节点排除哪些指定表达式的组件 -->
<!--context:include-filter子节点包含哪些指定表达式的组件
assignable:只包含
该子节点需要use-default-filters配合使用,use-default-filters="false"
-->
组件装配:<context:component-scan>元素还会自动注册AuotowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有
@Autowired和@Resource、@Inject注解的属性。可以放到构造器上边、普通字段上边,一切具有参数的方法都可以应用
@Autowired:默认情况下,所有使用@Autowired注解的属性都需要被设置,当Spring找不到匹配的bean装配属性时,会抛出异常。
若某一属性不允许被设置,可以设置@Autowired注解的required属性为false
有多个对应bean时,可以在@Qualifier注解提供名字。spring允许对方法的入参标注@Qualifier指定注入bean名称
@Autowired装配数组,会把所有匹配的bean自动装配
@Autowired装配集合,spring会读取该集合的类型信息,然后装配与之兼容的bean
@Autowired装配Map,若该map的键值为string,那么string将自动装配与它兼容的bean。bean本身作为键,bean的名称作为键值。
@Resource、@Inject功能与@Autowired类似,且没有@Autowired强大,所以用@Autowired就可以了