依赖注入的方式
- xml配置
- 构造函数
- setter
- p命名空间
- 自动装配(了解)
- 注解
- JavaConfig配置类
xml配置
构造函数
<bean id="userMapper" class="com.example.mapper.UserMapper">
</bean>
<bean id="userService" class="com.example.service.UserService">
<constructor-arg type="com.example.mapper.UserMapper" ref="userMapper"></constructor-arg>
</bean>
setter
<bean id="userMapper" class="com.example.mapper.UserMapper">
</bean>
<bean id="userService" class="com.example.service.UserService">
<property name="userMapper" ref="userMapper"></property>
</bean>
p命名空间
<!-- 相当于setter的优化(需要在Spring3版本以上才能使用),需要添加命名空间xmlns:p="http://www.springframework.org/schema/p" -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userMapper" class="com.example.mapper.UserMapper">
</bean>
<bean id="userService" class="com.example.service.UserService" p:userMapper-ref="userMapper">
</bean>
</beans>
自动装配(了解)
- byName
<!--
1.通过名字来自动装配(这个名字是从setter获得的)
2.发现userService中有个叫userMapper的属性
3.看看IOC容器中没有叫userMapper(即id="userMapper")的对象
4.如果有,就装配进去
-->
<bean id="userMapper" class="com.example.mapper.UserMapper">
</bean>
<bean id="userService" class="com.example.service.UserService" autowire="byName">
</bean>
- byType
<!--
1.通过类型来自动装配
2.发现userService中有个叫userMapper的属性
3.看看IOC容器userMapper类型的对象
4.如果有且仅有一个,就装配进去
-->
<bean id="userMapper" class="com.example.mapper.UserMapper">
</bean>
<bean id="userService" class="com.example.service.UserService" autowire="byName">
</bean>
拓展:
- 设置默认的自动装配
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName">
<bean id="userMapper" class="com.example.mapper.UserMapper">
</bean>
<bean id="userService" class="com.example.service.UserService">
</bean>
</beans>
注解
- 用在成员变量上
- 用在构造方法上
- 用在setter方法上
- 用在任意方法上
1是通过成员变量的类型实现自动装配,如果有多个bean符合,则再根据成员变量名称进行自动装配
2,3,4都是通过方法参数的类型实现自动装配,如果有多个bean符合,则再根据参数名称进行自动装配
拓展:
@Autowried(required=false),如果IOC容器中没有对应的bean则不进行装配,不会报错
JavaConfig配置类
//该注解表示这个类为javaConfig类
@Configuration
public class JavaConfig {
//该注解表示向容器中注册一个叫做userMapper的对象
@Bean("userMapper")
public UserMapper getUserMapper(){
return new UserMapper();
}
}