Spring注入Bean的七种方式

本文详细介绍了Spring框架中Bean的七种注入方式,包括:@Component、@Configuration、@Autowired、@Controller、@Service、@Repository以及通过构造方法、set方法、属性、List和Map注入。此外,还提到了不同注入方式的特性和应用场景。
摘要由CSDN通过智能技术生成

@Component(value=“Bean的id,默认为类名小驼峰”)

public class AnotherBean {

}

Configuration类

@Configuration

@ComponentScan(“com.company.annotationbean”)

public class MyConfiguration{

}

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

@AutoWired

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

@Component(默认单例模式)

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

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

  • @Controller 标注在Controller层

  • @Service 标注在Service层

  • @Repository 标注在dao层

@ComponentScan(“”)

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

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

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

通过set方法注入Bean


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

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 +

‘}’;

}

}

Configuration类 和 Test类

同上一个,就不贴了

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

通过属性去注入Bean


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

@Component

public class MyBeanProperty {

@Autowired

private AnotherBean anotherBeanProperty;

@Override

public String toString() {

return “MyBeanProperty{” +

“anotherBeanProperty=” + anotherBeanProperty +

‘}’;

}

}

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

对于有些小伙伴问私有属性,Spring怎么去加载它到IOC的?推荐去看看反射

通过List注入Bean


MyBeanList类

@Component

public class MyBeanList {

private List stringList;

@Autowired

public void setStringList(List stringList) {

this.stringList = stringList;

}

public List getStringList() {

return stringList;

}

}

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

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即可

通过Map去注入Bean


@Component

public class MyBeanMap {

private Map<String,Integer> integerMap;

public Map<String, Integer> getIntegerMap() {

return integerMap;

}

@Autowired

public void setIntegerMap(Map<String, Integer> integerMap) {

this.integerMap = integerMap;

}

}

@Bean

public Map<String,Integer> integerMap(){

Map<String,Integer> integerMap = new HashMap<String, Integer>();

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,且第二种的优先值高于第一种

以上就是Bean通过注解注入的几种方式,大家可以对比着xml注入的方式去看。

(感谢阅读,希望对你所有帮助)

来源:juejin.cn/post/6844903813753602056
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

笔者已经把面试题和答案整理成了面试专题文档

image

image

image

image

image

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
pg" alt=“img” style=“zoom: 33%;” />

最后

笔者已经把面试题和答案整理成了面试专题文档

[外链图片转存中…(img-U8TEOmap-1713426769216)]

[外链图片转存中…(img-H75wIfMC-1713426769216)]

[外链图片转存中…(img-R50OF4Mu-1713426769216)]

[外链图片转存中…(img-DXG7i4j9-1713426769217)]

[外链图片转存中…(img-00eD8eSs-1713426769217)]

[外链图片转存中…(img-K50PbwTp-1713426769217)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值