前面 Spring 文章都是使用 XML bean 配置文件实现 Spring 容器检测并注册Bean类或组件。其实,Spring是能够自动扫描,检测和预定义的项目包并实例化bean,不再有繁琐的Bean类声明在XML文件中。
现在,启用Spring组件扫描功能。使用@Component注释来表示这是类是一个自动扫描组件。
@Component
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleDao articleDao;
public void setArticleDao(ArticleDao articleDao) {
this.articleDao = articleDao;
}
...
}
在配置文件添加“context:component”,即在 Spring 中启用自动扫描功能。base-package 是指明存储组件,Spring将扫描该文件夹,并找出Bean(注解为@Component)并注册到 Spring 容器。
<context:component-scan base-package="com.angelia.spring" />
效果和之前一样。
自定义自动扫描组件名称
默认情况下,Spring 将小写部件的第一字符- 从'ArticleServiceImpl'到'articleServiceImpl'。可以检索该组件名称为“articleServiceImpl”。
要创建组件的自定义名称,你可以这样自定义名称:
@Component("articleService")
自动组件扫描注释类型
以下为4个常用的自动扫描注释类型:
- @Component – 指示自动扫描组件。
- @Repository – 表示在持久层DAO组件。
- @Service – 表示在业务层服务组件。
- @Controller – 表示在表示层控制器组件
其实把所有可以被 @Repository,@Service 或 @Controller 注解的组件都注解为 @Component 也是可以的。Spring会自动扫描所有组件的 @Component 注解。但这并不是一个好的做法,为便于阅读,应该始终声明@Repository,@ Service 或 @Controller 在指定的层,使你的代码更易于阅读,如下:
@Repository
public class ArticleDaoImpl implements ArticleDao {
...
}
@Service
public class ArticleServiceImpl implements ArticleService {
...
}