【问题标题】:Spring Injection not working in different service classSpring Injection 在不同的服务类中不起作用
【发布时间】:2011-03-25 19:40:14
【问题描述】:

我有课

@Service("registrationService")
@Transactional
public class RegistrationService {

@Resource(name="registrationDAO")
 public RegistrationDAO registrationDAO;

在控制器中我可以毫无问题地访问registrationService和registrationDAO。

我还有一门课

@Service("securityService")
public class SecurityService implements UserDetailsService {

 protected static Logger logger = Logger.getLogger("service");

 @Resource(name="registrationDAO")
 public RegistrationDAO registrationDAO;


  public String test(){
        logger.debug(registrationDAO.findUserByID(1) );
    return "Testing";
  }

现在如果我在控制器中调用测试函数,那么它会在registrationDAO上给出空指针异常

【问题讨论】:

    标签: java spring-mvc annotations


    【解决方案1】:

    你所有的@Service、@Repository、@Controller、@Component(等等)注解的类必须是弹簧管理的,这样自动装配才能工作。确保它们被 spring 类路径扫描拾取:

    <context:component-scan base-package="com.company" />
    

    在某些情况下,@Autowire 按类型自动装配,可以避免使用 @Resource 提供的 name 参数。

    【讨论】:

    • 两个服务类都在同一个目录中,那么为什么注入适用于一个类而不适用于其他类
    • @Pasha,当您实例化 SecurityService 时,您没有在任何地方使用 new 关键字?
    • 不,我只使用@Resource。如果我从 SecurityService 使用但从注册服务工作,则不会加载所有自动注入依赖项,如 registrationDao 中的 sessionFactory
    • @Pasha,假设它们在同一个包中并且注入相似,两者都应该工作。我可能会使用debug 日志记录来检查弹簧的行为。另外,您使用的是...stereoptype.Service 对吗?
    • 我该怎么做,你的意思是在控制台中记录消息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2016-03-25
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    相关资源
    最近更新 更多