spring 注入方式
三种注入方式: 构造方法、基于注解、setter
两种: xml配置申明注册(构造方法、setter)、注解申明注册(基于注解)
前提:
bean一个属性autowire(自动装配),autowire 的三个属性值: constructor byName byType
constructor: 通过构造方法进行自动注入,spring 匹配与构造方法参数一致的 bean 注入
byName: 匹配与 set 方法后半截名称相同的 bean 进行注入
byType: 查找所有 set 方法,找到符合参数类型的 bean 将其注入
构造方法注入:
public class Test {
private UserTest userTest;
//构造方法注入
public Test(UserTest userTest) {
this.userTest = userTest;
}
}
基于注解注入:
主要有四种:
@Component: 可用于注册所有 bean
@Repository: 主要用于注册 dao 层 bean
@Service: 主要用户注册逻辑层 bean
@Controller: 主要用于注册控制层 bean
描述依赖关系的主要有两种:
@Resource: java 中的注解,默认以 byName 方式去注入,如果找不到再以 byType 的方式去找,如果 byType 找到多个,则以 @Qualifier(spring 中的注解)指定的 bean 去注入
@Wutowired: spring 的注解,默认以 byType 的方式注入,再以 byName 的方式注入。如果 byType 找到多个,则调用 DefaultListableBeanFactory 中的 determineAutowireCandidate 方法来决定注入那一个。
determineAutowireCandidate:
- 先找 bean 上的 @Primary 注解,如果有,则返回 bean 的 name
- 再找 bean 上的 @Order、@PriorityOrder 注解,如果有则返回 bean 的 name
- 最后直接以名称匹配,返回 bean 的 name
setter 注入:
在 xml 文件中配置
<bean id = "userService" class = "org.huangzi.main.service.UserService">
<property name = "userDao" ref = "userMapper">
</bean>