请教一下大家,如何在Spring中使用注解来实现bean与bean的依赖注入,也就是如何在Child的构造函数里面调用Parent的实例。
@Service
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public class ChildServiceImpl implements ChildService {    @Resource
    private ParentService parentService;    public ChildServiceImpl() {
        parentService.run();
        // ... ...
    }
}@Service
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public class ParentServiceImpl implements ParentService {
     // ... ...
}
哪位老大帮帮忙,非常感谢。springbean注解

解决方案 »

  1.   

    问一下,你是新学还是刚入门还是中级了呢?
    网上最基本的spring例子很多的,多看看,看不懂的时候百度一下,还不懂那就问。
      

  2.   

    应该属于中级吧,做过实际的项目,很多东西都懂,只有这个地方搞了很久还是没出结果。
    已经查过很多资料了,尝试用过@Component和@DependsOn,但是总是报空指针异常。
      

  3.   

    你采用的是settert注入,setter注入的话是先调用默认的构造函数,然后调用setter方法,所以你的默认的构造函数里为空指针。
    换一个带参数的构造函数吧。一般不要覆写默认的构造函数。
      

  4.   

    不对,你用的是字段注入,不是setter注入。
    这样的话再看看吧,我也不清楚,一般不要覆写默认的构造函数,如果有有参构造,再加上一个默认无参构造,但是别引用成员。
      

  5.   

       @Resource(name="parentServiceImpl")
        private ParentService parentService;
      

  6.   

    +1这中注入方式你要有setter方法
      

  7.   

    你的这种写法是不对的,在spring的文档里面有说明,构造函数的调用要早于setter注入和字段注入的,所以在调用构造函数的时候parentService还没有赋值,要在构造函数里面使用parentService,最好在构造函数添加一个参数,使用构造函数注入parentService。
      

  8.   


    非常感谢,一语惊醒梦中人,确实是这样,会先调用构造函数,再给成员变量赋值,这样在无参构造函数里面始终会有空指针异常。我现在直接用init方法来处理其他事情,问题解决了。
      

  9.   


    虽然这个没用,但是还是感谢你的回答。
    在自动注册bean的时候,如果不写具体的name,那么会自动根据name来找相应的bean的,这个地方可以缺省。
      

  10.   

    @Service
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public class ChildServiceImpl implements ChildService {    @Resource
        private ParentService parentService;    public ChildServiceImpl() {
            parentService.run();
            // ... ...
        }
    }@Service
    @Component("parentService")
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public class ParentServiceImpl implements ParentService {
         // ... ...
    }
    这样试过吗?