千家信息网

SpringBoot如何通过注解注入Bean

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要为大家展示了"SpringBoot如何通过注解注入Bean",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot如何通过注解注入B
千家信息网最后更新 2026年11月03日SpringBoot如何通过注解注入Bean

这篇文章主要为大家展示了"SpringBoot如何通过注解注入Bean",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SpringBoot如何通过注解注入Bean"这篇文章吧。

    1、背景

    我们谈到Spring的时候一定会提到IOC容器、DI依赖注入,Spring通过将一个个类标注为Bean的方法注入到IOC容器中,达到了控制反转的效果。那么我们刚开始接触Bean的时候,一定是使用xml文件,一个一个的注入,就例如下面这样。

     

    我们的项目一般很大的话,就需要成千上百个Bean去使用,这样写起来就很繁琐。那么Spring就帮我们实现了一种通过注解来实现注入的方法。只需要在你需要注入的类前面加上相应的注解,Spring就会帮助我们扫描到他们去实现注入。

    xml扫描包的方式

     

    2、通过注解注入的一般形式

    一般情况下,注入Bean有一个最直白,最易懂的方式去实现注入,下面废话先不多说,先贴代码。

    2.1、Bean类

     public class MyBean{ }

    2.2、Configuration类

    //创建一个class配置文件@Configurationpublic class MyConfiguration{//将一个Bean交由Spring进行管理    @Bean    public MyBean myBean(){        return new MyBean();    }}

    2.3、Test类

    与xml有一点不同,这里在Test中,实例化的不再是ClassPathXmlApplicationContext,而是获取的AnnotationConfigApplicationContext实例。

    ApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);MyBean myBean = cotext.getBean("myBean",MyBean.class);System.out.println("myBean = " + myBean);

    上面的代码中MyBean也就是我们需要Spring去管理的一个Bean,他只是一个简单的类。而MyConfiguration中,我们首先用@Configuration注解去标记了该类,这样标明该类是一个Spring的一个配置类,在加载配置的时候会去加载他。

    在MyConfiguration中我们可以看到有一个方法返回的是一个MyBean的实例,并且该方法上标注着@Bean的注解,标明这是一个注入Bean的方法,会将下面的返回的Bean注入IOC。

    3、通过构造方法注入Bean

    我们在生成一个Bean实例的时候,可以使用Bean的构造方法将Bean实现注入。直接看代码

    3.1、Bean类

     @Component public class MyBeanConstructor {     private AnotherBean anotherBeanConstructor;     @Autowired     public MyBeanConstructor(AnotherBean anotherBeanConstructor){         this.anotherBeanConstructor = anotherBeanConstructor;     }     @Override     public String toString() {         return "MyBean{" +             "anotherBeanConstructor=" + anotherBeanConstructor +             '}';     } }

    3.2、AnotherBean类

     @Component(value="Bean的id,默认为类名小驼峰") public class AnotherBean { }

    3.3、Configuration类

     @Configuration @ComponentScan("com.company.annotationbean") public class MyConfiguration{ }

    这里我们可以发现,和一般方式注入的代码不一样了,我们来看看新的注解都是什么意思:

    @AutoWired

    简单粗暴,直接翻译过来的意思就是自动装配:wrench:,还不理解为什么叫自动装配:wrench:?看了下一个注解的解释你就知道了。若是在这里注入的时候指定一个Bean的id就要使用@Qualifier注解

    @Component(默认单例模式)

    什么??这翻译过来是零件,怎么感觉像是修汽车??是的,Spring管理Bean的方法就是修汽车的方式。我们在需要将一个类变成一个Bean被Spring可以注入的时候加上注解零件@Conmonent,那么我们就可以在加载Bean的时候把他像零件一样装配:wrench:到这个IOC汽车上了

    在这里我们还有几个其他的注解也可以实现这个功能,也就是细化的@Component:

    @Controller 标注在Controller层

    @Service 标注在Service层

    @Repository 标注在dao层

    @ComponentScan("")

    还是翻译,零件扫描,我们去看看括号里的"零件仓库"里面,哪些"零件"(类)需要被装载,Spring就会去扫描这个包,将里面所有标注了@Component的类进行注入。

    这里的通过构造方法进行注入就很好理解了,我们在装配MyBean这个零件的时候,突然发现他必须在AnotherBean的基础上才能安装到IOC里面,那么我们就在每次装配MyBean的时候自动装配:wrench:一个AnotherBean进去。举个:chestnut:吧:

    还是以汽车为例,我们在踩油门出发之前,是不是必须发车??这里的AutoWired的内容就像发车,你不发车,这个油门你踩断都没有用,他都不会走。

    4、通过set方法注入Bean

    我们可以在一个属性的set方法中去将Bean实现注入,看代码吧

    4.1、MyBean类

     @Component public class MyBeanSet {     private AnotherBean anotherBeanSet;     @Autowired     public void setAnotherBeanSet(AnotherBean anotherBeanSet) {         this.anotherBeanSet = anotherBeanSet;     }     @Override     public String toString() {         return "MyBeanSet{" +             "anotherBeanSet=" + anotherBeanSet +             '}';     } }

    4.2、Configuration类 和 Test类

    同上一个,就不贴了

    这里我们发现在setter方法上我们有一个@AutoWired,与上面不同的是,我们不会在实例化该类时就自动装配:wrench:这个对象,而是在显式调用setter的时候去装配。

    5、通过属性去注入Bean

    我们前面两种注入的方式诸如时间不同,并且代码较多,若是通过属性,即就是

     @Component public class MyBeanProperty {     @Autowired     private AnotherBean anotherBeanProperty;     @Override     public String toString() {         return "MyBeanProperty{" +             "anotherBeanProperty=" + anotherBeanProperty +             '}';     } }

    这里我们可以看到我们这个类中需要使用AnotherBean这个实例对象,我们可以通过@AutoWired去自动装配它。

    6、通过List注入Bean

    6.1、MyBeanList类

     @Component public class MyBeanList {     private List stringList;     @Autowired     public void setStringList(List stringList) {         this.stringList = stringList;     }     public List getStringList() {         return stringList;     } }

    6.2、MyConfiguration类

     @Configuration @ComponentScan("annoBean.annotationbean") public class MyConfiguration {     @Bean     public List stringList(){        List stringList = new ArrayList();         stringList.add("List-1");         stringList.add("List-2");         return stringList;     } }

    这里我们将MyBeanList进行了注入,对List中的元素会逐一注入。下面介绍另一种方式注入List

    6.3、MyConfiguration类

    @Bean//通过该注解设定Bean注入的优先级,不一定连续数字@Order(34)public String string1(){    return "String-1";}@Bean@Order(14)public String string2(){    return "String-2";}

    注入与List中泛型一样的类型,会自动去匹配类型,及时这里没有任何List的感觉,只是String的类型,但他会去通过List的Bean的方式去注入。

    第二种方式的优先级高于第一种,当两个都存在的时候,若要强制去使用第一种方式,则要去指定Bean的id即可

    7、通过Map去注入Bean

     @Component public class MyBeanMap {     private Map integerMap;     public Map getIntegerMap() {         return integerMap;     }     @Autowired     public void setIntegerMap(Map integerMap) {         this.integerMap = integerMap;     } } @Bean    public Map integerMap(){        Map integerMap = new HashMap();        integerMap.put("map-1",1);        integerMap.put("map-2",2);        return integerMap;    }    @Bean    public Integer integer1(){        return 1;    }    @Bean    public Integer integer2(){        return 2;    }

    同样这里也具有两种方式去注入Map类型Bean,且第二种的优先值高于第一种

    以上是"SpringBoot如何通过注解注入Bean"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    注解 方法 时候 方式 装配 零件 代码 实例 内容 类型 不同 就是 属性 汽车 篇文章 帮助 管理 配置 也就是 优先级 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 互联网 科技创新 齐家互联网科技 云电互联网科技 互联网女皇 腾讯科技 互联网高科技企业 一五八零互联网科技 海南购全球互联网科技 广西拼得多互联网科技有限公司 山东吉时兔互联网科技有限公司 科技赋能互联网健康 博兴的互联网电子科技公司 智腾互联网科技有限公司 厦门千工互联网科技有限公司 赶超互联网科技 微信多开 滨湖区互联网智能科技产品有哪些 银川新华互联网科技学校是国营吗 中国科技和美国互联网 张家口科技产业互联网平台 互联网企业和网络科技有限公司 广州大一互联网络科技有限公司 互联网科技未来 互联网金融 科技 互联网的科技创新 上海亿帐通互联网科技 顶级互联网科技成果有哪些 苏州五指互联网络科技有限 互联网科技大赛获奖感言 徐州市互联网科技有限公司 九思连强互联网电子科技有限公司
    0