Bean 的配置方式:通过全类名(反射)、通过工厂方法(静态工厂方法和实例工厂方法)、通过FactoryBean
依赖注入的方式:属性注入;构造器注入;工厂方法注入
- 组件扫描 : spring能够从classpath下自动扫描、侦测和实例化具有特定注解的组件
- 特定组件
- @Component:基本注解,表示了一个受spring管理的组件
- @Respository:标识持久层组件
- @Service:标识服务层(业务层)组件
- @Controller:标识表现层组件
- 注:目前spring无法区分这四个注解,因为IOC容器无法识别该类属于那个层,所以这四个注解可以混用,但建议进行区分
- 当在组件类上使用了注解之后,还需要在spring的配置文件中声明<context:component-scan>
- <context:component-scan> 中常用属性
- base-package 属性指定一个需要扫描的基类包,spring容器将会扫描这个基类包里及其子包中所有的类,当要扫描多个包的时候,可以使用逗号分隔,
- resouce-pattern属性 如果仅希望扫描特定的类而非基包下的所有类,可以使用该属性进行过滤
- <context:component-scan> 子节点
- <context:include-filter>子节点标识要包含的目标类,此节点通常要将<context:component-scan>中的use-default-filters属性要设为false,默认情况下该属性为true
- <context:exclude-filter>子节点表示要排除在外的目标类
- <context:component-scan><context:include-filter>子节点和<context:exclude-filter>子节点
- <context:include-filter>子节点和<context:exclude-filter>子节点 常用属性
- type属性 可选值有:annotation常用、assinable常用、aspect不常用、regex不常用、custom不常用
- expression 属性
- 利用注解建立bean和bean之间的关联关系
- <context:component-scan>元素会自动注册AutowiredAnnocationBeanPostProcessor实例,该实例可以自动装配具有@Autowired和@Resource、@Inject注解的属性
- 其中@Resource和@Inject注解的功能和@Autowired相似,建议使用@Autowired
- Autowired 注解自动装配具有兼容类型的单个bean属性,可以用在构造器、普通字段(即使是非public)一切具有参数的方法都可以使用@autowired注解
- 默认情况下,所有使用@autowired注解的属性都需要被设置,当spring找不到匹配的bean装配属性时,会抛异常。若某个属性允许不被设置,可以设置@autowired注解的required属性为false
- 默认情况下,当IOC容器里存在多个类型兼容的bean时,比如接口下有很多实现类,此时可以在@qualifiler注解提供bean的名称,或者spring允许对方发的入参标注@qualifier已指定注入bean的名称
- @autowired注解使用在数组类型的属性上,spring将会把所有匹配的bean进行自动装配
- @autowired注解使用在集合属性上,spring读取集合的类型信息,然后自动装配所有与之兼容的bean
- @autowired注解用在java.utill.map上时,若该map的键值为string,那么spring将自动装配与之map类型兼容的bean,此时bean的名称作为键值