为了账号安全,请及时绑定邮箱和手机立即绑定

关于Spring 注解注入对象问题

关于Spring 注解注入对象问题

尚方宝剑之说 2019-04-19 11:15:30
问题描述如下:A 类是一个WS入口,调用B类的业务。 然后在B类里面注入service ,注入的service为空。public class A{   private B b = new B();   public void test(){       b.method();}} public class B{    @Resource     private IEsbForEmpBusinessService esbForEmpBusinessService;     在这个类里面的方法,调用esbForEmpBusinessService层的方法为空注入不进去。} @Service("esbForEmpBusinessServicesImpl")public class EsbForEmpBusinessServicesImpl implements IEsbForEmpBusinessService {     @Resource     private IEsbForEmpBusinessDao esbBusinessDao ;     @Override   public EsbToHrEmpInfo queryHrEmpInfo(String  emp_num) throws ServiceException {    EsbToHrEmpInfo ethe = esbBusinessDao.queryHrEmpInfo(emp_num);    return ethe ;   } @Override public void creatHrEmpInfo(EsbToHrEmpInfo hrempInfo) throws ServiceException {  esbBusinessDao.creatHrEmpInfo(hrempInfo); } @Override public void updateHrEmpInfo(EsbToHrEmpInfo hrempInfo,String emp_num) throws ServiceException {  esbBusinessDao.updateHrEmpInfo(hrempInfo,emp_num); } @Override public List<String> queryAreaCodeByNetCode(String netCode)   throws ServiceException {  return esbBusinessDao.queryAreaCodeByNetCode(netCode); }}  问题: class B 里面的service对象注入不进来为null ,求解!!!!
查看完整描述

4 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

不能自己实例化bean,要通过sring获取。

@Service("esbForEmpBusinessServicesImpl")
public class EsbForEmpBusinessServiceImpl implements IEsbForEmpBusinessService {

@Resource
private IEsbForEmpBusinessDao esbBusinessDao;

public EsbToHrEmpInfo queryHrEmpInfo(String emp_num) {
    System.out.println(emp_num);
    EsbToHrEmpInfo ethe = new EsbToHrEmpInfo();
    return ethe;

}

}

@Service("serviceB")
public class B {

@Resource
private IEsbForEmpBusinessService esbForEmpBusinessService;

public void method() {
    esbForEmpBusinessService.queryHrEmpInfo("111111");
}

}

@Service("serviceA")
public class A {

@Autowired
@Qualifier("serviceB")
private B b;

public void test(){

    b.method();

}

public static void main(String[] args) {

    FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("test.xml");
    A a = (A) context.getBean("serviceA");
    System.out.println(a);
    a.test();
}


查看完整回答
反对 回复 2019-05-06
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

@Service("esbForEmpBusinessServicesImpl") 里面的名字和esbForEmpBusinessService名字不同,改下看可以不。

@Resource(name="esbForEmpBusinessServicesImpl") private IEsbForEmpBusinessService esbForEmpBusinessService;

查看完整回答
反对 回复 2019-05-06
?
郎朗坤

TA贡献1921条经验 获得超9个赞

看下你配置的注解扫描包路径有没有包括这个包。


查看完整回答
反对 回复 2019-05-06
?
慕仙森

TA贡献1827条经验 获得超7个赞

public class A{

private B b = new B();

public void test(){

   b.method();

}

}
直接B b = new B();是不行的,不会触发相关的注入

public class A{
@Resource(name="b")
private B b ;

public void test(){

   b.method();

}

}


查看完整回答
反对 回复 2019-05-06
  • 4 回答
  • 0 关注
  • 648 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信