麻烦老师看一下

麻烦老师看一下

# 具体遇到的问题
@Autowired 默认按照类型进行注入,如果存在两个Bean类型相同,则按照名称注入​

1、加粗的这句话是不是可以理解成,在一个类里面,有两个对象类型一样的属性的情况下,要注入哪个对象,就在哪个对象的set方法或者定义属性的语句上使用名称注入的注解。

2、使用注解的方式怎么更改bean的作用域。如果我两个对象都想要注入,应该怎么办

3、如果1我理解的正确的话,老师说的也太绕了点,希望能讲解的再通俗易懂一些,这么绕真的很掉头发

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,如果是同学描述的场景,多例注入不同的属性值,需要在xml配置文件中,创建多个实例,然后在注入时,使用@Qualifier根据名称注入不同的实例。如:

xml配置文件中创建多个bean实例,属性值不同:

http://img1.sycdn.imooc.com//climg/5fbdc35b0973c32006960166.jpg

注入时,使用@Autowired @Qualifier()根据名称,注入不同的属性值,

http://img1.sycdn.imooc.com//climg/5fbdc39c0934e33c05370350.jpg

另外同学关于“@Autowired 默认按照类型进行注入,如果存在两个Bean类型相同,则按照名称注入”这句话的理解不太正确,之前的回答已做修改,同学可以再去查看。

祝学习愉快!


好帮手慕阿满 2020-11-20 15:32:31

同学你好,不是很明白同学的意思。

同学是指categoryService类下有两个categoryDAO属性吗?属性名不同,可以分别给属性注入不同的值。

如果不是上述情况,请同学具体描述,建议使用代码举例。

祝学习愉快!

  • 提问者 炙零 #1
    我有两个类,一个是GoodsDAO public class GoodsDAO { private String name; @Override public String toString() { return "GoodsDAO{" + "name='" + name + '\'' + '}'; } } 还有一个是GoodsService public class GoodsService { @Value("g0001") private String goodsId; private GoodsDAO goodsDAO1; private GoodsDAO goodsDAO2; @Override public String toString() { return "GoodsService{" + "goodsId='" + goodsId + '\'' + ", goodsDAO1=" + goodsDAO1 + ", goodsDAO2=" + goodsDAO2 + '}'; } } 怎样注入使得goodsDAO1和goodsDAO2的属性值不相同
    2020-11-24 21:34:25
好帮手慕小尤 2020-11-19 11:18:13

同学你好,1. 同学理解有一点问题,按照名称注入,是按照@Qualifier注解设置的名称进行注入。如下:

    @Autowired默认按照类型进行匹配,如果存在相同类型的属性,则就需要按照@Qualifier注解添加的名称进行注入,如:写成:@Autowired @Qualifier("personDao")就是按照personDao名称进行装配。

2. 同学描述的作用域是否是单例与多例,如果是,则同学可使用@Scope注解进行设置(@Scope("prototype")  默认是单例(singleton),  多例(prototype)),如果不是,则建议同学重新描述一下问题。

  • 提问者 炙零 #1
    是的,多例的情况下可以注入不同属性值吗
    2020-11-19 23:15:59
  • 好帮手慕阿满 回复 提问者 炙零 #2
    同学你好,多例可以有不同的属性值。祝学习愉快!
    2020-11-20 13:47:09
  • 提问者 炙零 回复 好帮手慕阿满 #3
    老师,我指的是多例的属性,能不能同时注入不同的属性值,如果能,要怎么注入
    2020-11-20 14:20:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师