Nrdesire 2018-07-17 19:52 采纳率: 100%
浏览 1587
已采纳

xml配置与Autowired注解混合

使用xml文件配置Bean,然后不想使用property标签来设置属性值,想使用Autowired注解来注解属性。请问这样可以实现吗?我自己测试了一下发现,一直提示NullPointerException异常。代码如下:

xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">


代码Test.java:

package com.nrdesire.xml;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.annotation.Resource;

class Factory{
public Test test;

public Factory(){
    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:xmd.xml");
    test = (Test) context.getBean("test");
}

}

public class Test {
@Autowired
private CompactDisc cd;
@Autowired
private CDPlayer player;

public static void main(String[] args){
    Factory factory = new Factory();
    factory.test.cd.play();
    factory.test.player.play();
}

}

代码CompactDisc.java:
package com.nrdesire.xml;

public interface CompactDisc {
void play();

}

代码SgtPeppers.java:
package com.nrdesire.xml;

public class SgtPeppers implements CompactDisc {
@Override
public void play() {
System.out.println("shuangge!");
}

}

package com.nrdesire.xml;

import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;

public class CDPlayer {
@Autowired
private CompactDisc cd;

public void play(){
    cd.play();
}

}

百度了好多都没有相应的资源,这本书后续说的也是java代码配置方式和xml配置方式的混用,唯独没提到过我想的这种情况。
使用xml属性配置然后设置属性的set方法之后可以跑起来。但是去掉xml属性配置和属性set方法而是换成Autowired注解跑不起来!这种方法可行不?

  • 写回答

3条回答 默认 最新

  • howard4 2018-07-18 01:09
    关注

    你的Factory类在Spring容器之外。所以在spring容器启动时,Factory里的成员变量Test,没有被赋值;
    所以,你需要在审批让配置文件中注入这个Factory,并且设置这个Factory的成员变量Test等于你注入的Test配置的ID;
    主要目的就是,把你的所有类都交给spring管

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 10月23日

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题