如何在 Spring 中配置自动注入?

15 阅读1分钟

一、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 工作机制

  1. 默认 byType 按类型注入
  2. 同一类型多个 Bean 时,会报错
  3. 想按名称匹配,搭配 ​​ @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​​ 指定名字