第四章 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>

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

相关文章
|
15天前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
15天前
|
XML Java 数据格式
Spring5入门到实战------5、IOC容器-Bean管理(三)
这篇文章深入探讨了Spring5框架中IOC容器的高级Bean管理,包括FactoryBean的使用、Bean作用域的设置、Bean生命周期的详细解释以及Bean后置处理器的实现和应用。
Spring5入门到实战------5、IOC容器-Bean管理(三)
|
15天前
|
XML Java 数据格式
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
|
15天前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
15天前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
9天前
|
Java Spring
|
10天前
|
前端开发 Java 开发者
|
10天前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
2月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
2月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
93 0
下一篇
云函数