首页 > 作文

Spring框架学习之Spring @Autowired实现自动装配的代码

更新时间:2023-04-04 09:16:47 阅读: 评论:0

学习自动装配之前,讲一个概念:component,即组件。组件你也可以理解为bean对象,只不过通常上海投靠落户政策component的组成会稍微复杂一些,比如,一个组件里面会引用一个或多个别的bean对象,组件的定义方式也不一样。自动装配貌似就是为组件而生的。

自动装配(autowired)这个概念,如果你已经使用过springmvc或者springboot做开发,你会发现@autowired注解是特别经常使用到的。比如你的controller、rvice相关的类里面就会经常用到。如果你看过@controller或者@rvice的定义,你会发现这两个注解也是使用了@component注解的,就是说这两个注解也是component。

自动装配就是说,你不用手动实现bean之间的组合关系,只要使用了@autowired注解,程序就会自动的注入这个需要的bean,前提是你的spring容器有这个bean。我们来看个例子。

这个例子是这么回事,我定义了一个car接口,里面有一个run()方法,然后我定义了一个baomacar,实现了car接口,然后我定义了一个test.java类,我在baomacar和test上使用了@component注解,表明我这两个类需要创建由spring管理的bean对象,有点绕,这么说会更好理解:使用了@component之后,spring会使用这两个类创建出相应的bean对象,并放到容器中。还有一个myconfig.java类,上面使用了@configuration和@componentscan注解,这个类是一个spring配置类,如果你没有看过我的上一篇文章,建议你看一下,上篇文章介绍了使用java配置spring的方式。因为我要启动spring上下文就是需要这个配置类,同时我也需要让spring发现这些我声明的component,所以还需要使用@component注解(中文意思:组件扫描),参数是当前的包,默认就扫描当前packag金木水火土打一字e下的所有类,看看哪个类上面使用@component注解就把哪个类交由spring管理。直接看代码吧!

package demo2;public interface car {    void move();}
package demo2;import org.springframework.stereotype.component;@componentpublic class baomacar implements car {    private string driver = "小白开";    public void move() {        system.out.println(driver+"正在开车");    }}
package demo2;import org.springframework.context.annotation.componentscan;import org.springframework.context.annotation.configuration;@configuration@componentscan("demo2")public class myconfig {}
package demo2;import org.springframework.beans.factory.annotation.autowired;import org.springframework.context.annota发刷tion.annotationconfigapplicationcontext;import org.springframework.stereotype.component;@componentpublic class test {    @autowired    private car car;    public car getcar() {        return car;    }    public static void main(string[] args) {        annotationconfigapplicationcontext context = new annotationconfigapplicationcontext(myconfig.class);        test tes我以为我能够t =学历性质填什么 context.getbean(test.class);        test.getcar().move();        context.clo();    }}

你可能觉得我说半天跟自动配置有什么关系?看一下最后一个类——test.java,里面用到了@autowired注解,当我启动main()方法的时候,你猜会发生什么?控制台会打印:“小白正在开车”。是不是觉得好奇怪?这是怎么做到的?听我为你慢慢道来。我从上下文中拿到了一个test类的对象,我test类本身就是使用了@component注解的,所以上下文启动之后容器中就已经创建好了test的对象。那test对象的car car属性怎么会没有报空指针错误呢?没错了,就是在创建test的对象时,spring发现这个类的car car属性使用@autowired注解,于是就在容器中找实现了car接口的对象,一番搜索之后,找到了baomacar的对象,于是就把这个对象注入到test的对象的car属性中了。是不是很厉害?当然了,当容器中有多个实现了car接口的对象时,这个写法是有问题的,因为spring知道你需要一个实现了car接口的对象,但是由于有多个符合这个条件的对象,所以无法实现帮你自动注入,因此会发生异常。解决的办法就好几种。我就不一一列举了,还是那句话,师傅领进门,修行靠个人,你应该自己去探索一下。

到此这篇关于spring @autowired实现自动装配的文章就介绍到这了,更多相关spring @autowired自动装配内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 09:16:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/f7356840d2443290b531b47bb4694a94.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Spring框架学习之Spring @Autowired实现自动装配的代码.doc

本文 PDF 下载地址:Spring框架学习之Spring @Autowired实现自动装配的代码.pdf

标签:注解   对象   组件   容器
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图