Spring注入Bean的七种方式

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
@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

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

大厂面试真题:

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
er2(){

return 2;

}

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

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

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

来源:juejin.cn/post/6844903813753602056

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

[外链图片转存中…(img-Ib1FAcX2-1714677133564)]

大厂面试真题:

[外链图片转存中…(img-vXkkLRhl-1714677133565)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值