温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用Spring @Autowired实现自动装配

发布时间:2022-01-04 10:19:43 来源:亿速云 阅读:138 作者:iii 栏目:开发技术

本篇内容主要讲解“怎么用Spring @Autowired实现自动装配”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Spring @Autowired实现自动装配”吧!

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

自动装配(Autowired)这个概念,如果你已经使用过SpringMVC或者SpringBoot做开发,你会发现@Autowired注解是特别经常使用到的。比如你的Controller、Service相关的类里面就会经常用到。如果你看过@Controller或者@Service的定义,你会发现这两个注解也是使用了@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配置类,因为我要启动Spring上下文就是需要这个配置类,同时我也需要让Spring发现这些我声明的Component,所以还需要使用@Component注解(中文意思:组件扫描),参数是当前的包,默认就扫描当前package下的所有类,看看哪个类上面使用@Component注解就把哪个类交由Spring管理。直接看代码吧!

package demo2;

public interface Car {
    void move();
}
package demo2;
import org.springframework.stereotype.Component;
@Component
public 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.annotation.AnnotationConfigApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class Test {
    @Autowired
    private Car car;

    public Car getCar() {
        return car;
    }

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
        Test test = context.getBean(Test.class);
        test.getCar().move();
        context.close();
    }
}

你可能觉得我说半天跟自动配置有什么关系?看一下最后一个类——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实现自动装配”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI