配置形式
xml配置
<!--通过全类名的方式来配置bean-->
<bean id="" class=""/>
id:Bean 的名称。
- 在 IOC 容器中必须是唯一的
- 若 id 没有指定,Spring 自动将权限定性类名作为 Bean 的名字
- id 可以指定多个名字,名字之间可用逗号、分号、或空格分隔
注解配置
@Bean
Spring容器
- BeanFactory: IOC容器的基本实现
- ApplicationContext: 提供了更多的高级特性. 是 BeanFactory 的子接口,初始化获得bean实例
依赖注入
属性注入
<bean id="" class="">
<property name="" value=""/>
</bean>
使用p命名空间
<bean id="" class=""
p:username="" p:age=""/>
构造器注入
按索引匹配入参
<bean id="" class="">
<constructor-arg value="" index=""/>
</bean>
按类型匹配入参
<bean id="" class="">
<constructor-arg value="" type""/>
</bean>
引用bean
<bean id="" class="">
<property name="" ref=""/>
</bean>
内部bean
<bean id="" class="">
<property name="">
<bean class="">
<property name="" value=""/>
</bean>
</property>
</bean>
继承bean
<bean id="" parent=""/>
- 父 Bean 可以作为配置模板, 也可以作为 Bean 实例. 若只想把父 Bean 作为模板, 可以设置 的abstract 属性为 true, 这样 Spring 将不会实例化这个 Bean
依赖bean
<bean id="" class="" depends-on="id">
- Spring 允许用户通过 depends-on 属性设定 Bean 前置依赖的Bean,前置依赖的 Bean 会在本 Bean 实例化之前创建好
- 如果前置依赖于多个 Bean,则可以通过逗号,空格或的方式配置 Bean 的名称
bean作用域
<bean scope="">
- singleton 默认单实例,在容器中仅存一个bean实例
- prototype 每次调用getBean(),创建新实例
- request 每次http请求创建一个新的bean,适用于WebApplicationContext环境
- session 同一个session共享一个bean,适用于WebApplicationContext环境
使用外部属性文件
<context:property-placeholder
location="classpath:db.properties "/>
- ${jdbc.username}加载属性
组件扫描
<context:component-scan
base-package="">
- @Component: 基本注解, 标识了一个受 Spring 管理的组件
- @Respository: 标识持久层组件
- @Service: 标识服务层(业务层)组件
- @Controller: 标识表现层组件
- 对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称
- @Autowired 注解自动装配具有兼容类型的单个 Bean属性
- 构造器, 普通字段(即使是非 public), 一切具有参数的方法都可以应用@Authwired 注解
- 默认情况下, 所有使用 @Authwired 注解的属性都需要被设置. 当 Spring 找不到匹配的 Bean 装配属性时, 会抛出异常, 若某一属性允许不被设置, 可以设置 @Authwired 注解的 required 属性为 false
- 默认情况下, 当 IOC 容器里存在多个类型兼容的 Bean 时, 通过类型的自动装配将无法工作. 此时可以在 @Qualifier 注解里提供 Bean 的名称. Spring 允许对方法的入参标注 @Qualifiter 已指定注入 Bean 的名称
- @Authwired 注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配.
- @Authwired 注解也可以应用在集合属性上, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean.
- @Authwired 注解用在 java.util.Map 上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键