开发者社区> 科技小能手> 正文

第四章 Spring进阶-自动扫描和管理Bean

简介:
+关注继续查看

第四章 Spring进阶-自动扫描和管理Bean

徒弟:师傅,好累呀,我今天配置了几十个bean,快不行啦!

师傅:up,没有那么弱吧?先磨炼一下,再告诉你秘诀!

徒弟问,要自己配置bean,如果有成千上万的类,岂不是要他配置到死翘翘,师傅,有没有其他办法管理bean呀,如果确定需要配置一个bean,最好我写完接口的实现类,就配置完毕,别再让我折腾配置文件了?

其实,到目前为止大多数例子都使用XML来指定配置元数据,这些元数据会生成Spring容器中的每个BeanDefinition。 即使上一章A利用@Resource解决了注入问题, bean还是需要在xml中显式定义。因此本章会介绍一种方法,通过扫描classpath并匹配过滤器来隐式地检测候选组件 (candidate components)。

补充:

具体可以参考:参考Spring Framework开发手册 3.12. 对受管组件的Classpath扫描

徒弟看完文档之后,立马醒悟了,做了以下几步:

1、修改BookServiceImpl,增加, 如图所示定义:

wps_clip_image1

这个时候提示,需要引入包:

import org.springframework.stereotype.Service;

2徒弟很聪明,同样修改了DAO

@Service("bookDAO")

public class BookDAOImpl implements BookDAO

2、修改beans.xml

<!--&lt;context:annotation-config/>

 <bean id="bookService" class="com.netease.lee.service.impl.BookServiceImpl"/>

 <bean id="bookDAO" class="com.netease.lee.dao.impl.BookDAOImpl"/>

 --&gt;

 <context:component-scan base-package="com.netease.lee"/>

3、运行测试用例,居然成功了:

wps_clip_image2

这里需要更正一个概念,第二步中@Service("bookDAO")

根据Spring Framework中的建议:

从Spring 2.0开始,引入了@Repository注解, 用它来标记充当储存库(又称 Data Access Object或DAO)角色或典型的类。

Spring 2.5引入了更多典型化注解(stereotype annotations): @Component@Service和 @Controller。 @Component是所有受Spring管理组件的通用形式; 而@Repository@Service和 @Controller则是@Component的细化, 用来表示更具体的用例(例如,分别对应了持久化层、服务层和表现层)。也就是说, 你能用@Component来注解你的组件类, 但如果用@Repository@Service 或@Controller来注解它们,你的类也许能更好地被工具处理,或与切面进行关联。 例如,这些典型化注解可以成为理想的切入点目标。当然,在Spring Framework以后的版本中, @Repository@Service和 @Controller也许还能携带更多语义。如此一来,如果你正在考虑服务层中是该用 @Component还是@Service, 那@Service显然是更好的选择。同样的,就像前面说的那样, @Repository已经能在持久化层中进行异常转换时被作为标记使用了。

因此,修改为:

@Repository("bookDAO")

public class BookDAOImpl implements BookDAO

这样子,思路更加清晰了,其他开发人员一看,就知道意思了。

徒弟检查了配置文件:

<?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:context="http://www.springframework.org/schema/context"      

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context-2.5.xsd">

 <context:component-scan base-package="com.netease.lee"/>

</beans>

发觉,瘦身成功!终于可以很爽快了!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
autojs进制转换
牙叔教程 简单易懂
7 0
Prometheus 2.25.0 新特性
Prometheus [2.25.0](https://github.com/prometheus/prometheus/releases/tag/v2.25.0) 现在(2021.02.17)已经发布,在上个月的 [2.24.0](http://erdong.site/Prometheus/New-Features/New-Features-in-Prometheus-2-24-0.html) 之后又进行了很多的修复和改进。
8 0
Ubuntu下安装OpenJDK10
实操ubuntu下安装OpenJDK10
3 0
autojs裁剪找图
牙叔教程 简单易
5 0
ECS使用感受
阿里云服务器初体验
3 0
ECS使用感受
阿里云服务器初体验
3 0
ECS使用感受
阿里云服务器初体验
4 0
ECS使用感受
阿里云服务器初体验
5 0
ECS使用体验
在阿里云领取了一个服务器,分享一下使用体验
4 0
23704
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载