麋鹿迷路了耶
2021-03-09 19:07
采纳率: 50%
浏览 276

spring同时使用构造器和注解注入引发的属性冲突

这是applicationcontext.xml构造器的bean
通过list注入到注解的list中去
  <util:list id="list">
        <value>网络工程</value>
        <value>计算机网络</value>
        <value>Android</value>
        <value>ASP.NET</value>
    </util:list> 

构造器的bean
<bean id="stu2" class="com.cyh.Student" >
        <constructor-arg index="0" value="105"/>
        <constructor-arg index="1" value="陈玉航"/>
        <constructor-arg index="2" value="计算机科学与技术"/>
        <constructor-arg index="3" >
            <list>
                <value>"Android课程"</value>
                <value>"ASP.NET课程"</value>
                <value>"SSM课程"</value>
                <value>"网络工程"</value>
            </list>
        </constructor-arg>
    </bean>

这是student.java文件

@Component("stu3")
public class Student {
   @Value("105")
    private int sno;

    @Value("陈玉航")
    private String sname;

    @Value("计算机科学与技术")
    private String major;

     @Value("#{list}")
    private List<String> required;

Main测试方法

 public static void main(String[] args) {
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
        //属性注入
        System.out.println( applicationContext.getBean("stu1"));
       // 构造注入
       System.out.println(applicationContext.getBean("stu2"));
        //注解
        System.out.println(applicationContext.getBean("stu3"));
    }

得到的结果是stu2的和stu3的数据一样

Student{sno=105, sname='陈玉航', major='计算机科学与技术', required=["SSM课程", "网络工程", "Android课程", "ASP.NET课程"]}
Student{sno=105, sname='陈玉航', major='计算机科学与技术', required=[网络工程, 计算机网络, Android, ASP.NET]}
Student{sno=105, sname='陈玉航', major='计算机科学与技术', required=[网络工程, 计算机网络, Android, ASP.NET]}

(去掉tostring方法后发现stu2和stu3的地址是不一样的),这是老师发的实验报告,所以需要三种方法一起用,如果有优先级,为啥属性注入没有受影响,脑壳疼。。。求大神解答一下。跪谢。

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

相关推荐 更多相似问题