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 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流