一、XML 中配置自动注入(autowire)
在 <bean> 里加 autowire 属性即可实现自动注入。
1. 四种自动注入策略
-
default:默认,不自动注入 -
byName:按属性名匹配 Bean 的 id -
byType:按类型匹配(同类型只能有一个 Bean) -
constructor:按构造方法参数注入
2. 最常用:byType 按类型自动注入
<bean id="userDao" class="com.demo.dao.UserDaoImpl"/>
<!-- autowire="byType" 自动按类型注入 -->
<bean id="userService" class="com.demo.service.UserServiceImpl"
autowire="byType">
</bean>
Spring 会自动查找: UserServiceImpl 里的 UserDao 类型 → 找到 userDao → 自动注入。
3. byName 按名称注入
<bean id="userDao" class="com.demo.dao.UserDaoImpl"/>
<bean id="userService" class="com.demo.service.UserServiceImpl"
autowire="byName">
</bean>
要求:属性名 == bean 的 id private UserDao userDao; → 匹配 id="userDao"
二、全局开启自动注入(很少用)
<beans default-autowire="byType">
所有 Bean 都自动注入。
三、注解方式自动注入(企业开发 99% 用这个)
1. 开启注解扫描(XML 里加一句)
<context:component-scan base-package="com.demo"/>
2. 使用 @Autowired 自动注入(最核心)
@Service
public class UserServiceImpl implements UserService {
// 自动按类型注入
@Autowired
private UserDao userDao;
}
不需要 set 方法!
四、@Autowired 工作机制
- 默认 byType 按类型注入
- 同一类型多个 Bean 时,会报错
- 想按名称匹配,搭配
@Qualifier("beanId")
@Autowired
@Qualifier("userDaoImpl")
private UserDao userDao;
五、@Resource(Java 标准注解)
效果和 @Autowired 类似,默认 byName:
@Resource(name = "userDao")
private UserDao userDao;
六、一句话总结
- XML 自动注入:
autowire="byType/byName" - 注解自动注入:
@Autowired(企业首选) - 多个同类型 Bean:用
@Qualifier 指定名字