美文网首页
IoC容器,注解的方式加载bean之包扫描(scan)、自动装配

IoC容器,注解的方式加载bean之包扫描(scan)、自动装配

作者: 在路上phper | 来源:发表于2018-02-25 17:50 被阅读239次

    上节课我们学习了使用注解的方式加载bean对象

    image.png
    如上面的代码 创建一个ApplicationContext上下文对象 并且传入配置类 我们在实际开发中配置类会有多个,如果手工去填写配置类,不是很方便 所以我们介绍一下第一种方法扫描包的方式
    下面我们来到官方文档https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/core.html#beans-java-bean-annotation
    根据文档我们写下代码
    我们假设相关的bean以及自己写的一些业务类库放在com.jtthink.SpringLean下面 我们对这个包进行扫描
    在MySpring中
    image.png
    运行结果
    image.png
    可以看见我们没有传入配置类文件,自动对我们包下面的类文件进行了扫描
    我们还可以通过xml的方式加载 这里先不演示 官方文档里面有
    接下来我们在SpringBean包下面创建一个newsService.java文件
    目录如下
    image.png
    里面写入代码
    image.png
    下面我们将NewsService这个service集成到IoC容器中
    所以我们创建在SpringBean里面创建一个NewsConfig配置类
    目录如下
    image.png
    里面代码如下
    image.png
    接下来在MySpring里面做下调用
    image.png
    运行结果
    image.png
    以上代码即通过IoC容器进行调用
    下面我们想一个问题 如果在NewsService里面想调用UserService里面内容怎么办?
    我们要用到下面的内容
    image.png
    @AutoWired自动装配注解 可以非常方便的帮我们直接从IoC容器里面把相关的类装配进去
    下面看下代码
    NewsService里
    image.png
    在UserService里面加入一段测试代码
    image.png
    运行结果
    image.png
    以上就是@AutoWired自动装配的基本功能
    接下来我们学习注解另一种写法
    在NewsService里面讲自动装配代码去掉
    image.png
    运行结果
    image.png
    报错了 因为UserService类没有被加载进去
    image.png
    上面一张图片 在@AutoWired上面alt+enter会对代码进行优化 将自动装配注解打在了构造函数上
    下面我们修改下代码
    image.png
    新增一个abc方法 并打入自动装配注解
    运行结果
    image.png
    依然报错 以为注解打在了我们的方法上面
    image.png
    我们加入参数如上面 abc方法被自动执行了
    运行结果
    image.png
    下面我们添加几行代码
    image.png
    运行结果
    image.png
    上面是在方法上打入@AutoWired注解产生的效果
    上面就是使用注解的两种方式,在学习后面的spring mvc时候,经常会用到自动装配,我们在外部定义好类之后,都要通过上面的方式进行自动装配,而不是通过实例化new的方式到处创建我们无法控制的对象
    接下来我们在学习一个知识点
    在MyConfig中在写一个UserService方法
    image.png
    运行代码
    image.png
    可以看见报错了
    是因为我们写入了@AutoWired 使其找不到到底要加载哪个bean
    实际上@AutoWired在装配的时候是按照类型进行装配的
    为了解决上面问题 我们学习下面的内容
    image.png
    @Qualifier注解 对我们多个同类型的bean进行区分
    下面代码演示下
    在MyConfig里面
    image.png
    在NewsService里面
    image.png
    运行结果
    image.png
    还有另外一种办法 如果不打入@Qualifier注解 返回的是一个UserService类型的数组
    下面看下代码 首先我们将MyConfig中的@Qualifier注解注释掉
    代码如下
    image.png
    修改下NewsService里面代码
    image.png
    运行结果
    image.png
    上面的这种方法官网中也有介绍 我们可以查看

    相关文章

      网友评论

          本文标题:IoC容器,注解的方式加载bean之包扫描(scan)、自动装配

          本文链接:https://www.haomeiwen.com/subject/trurxftx.html