【问题标题】:Spring - Autowire Service into POJOSpring - 自动装配服务到 POJO
【发布时间】:2017-06-15 11:40:43
【问题描述】:

我有一个模型,我想在其中注入我的服务。

我的模型

@Configurable
@Entity
@Table(name = "user")
public Class User {

@Autowired
private UserService userService;

{
   System.out.println("Trying Service : " + userService.getMyName()); 
}

}

在这里,我总是在第 7 行收到 NullPointerException

在我的 spring-context.xml 我有:

<context:spring-configured/>
<bean
    class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
<bean
    class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />

编辑

用户服务

@Component
public Class UserService {

  public String getMyName() { return "it's Me!";}

}

【问题讨论】:

  • 请提供UserService 的代码和您的spring 上下文XML 文件,提供的信息不足以确定性地说明任何内容。
  • 这不是将 bean 注入数据模型的好方法。为什么需要这种注射?
  • 你需要在你的spring XML文件中有组件扫描和注释驱动的条目,比如&lt;context:component-scan base-package="com.cgi.itd"/&gt; &lt;mvc:annotation-driven /&gt;,我不知道@Configurable是否是spring注释使类成为bean与否,如果不是,则必须使用@Component或类似的spring注解
  • 据我所知,Spring 不会在初始化时初始化任何 Entity。尝试调试异常以查看引发异常的确实是 Spring 还是来自您的代码
  • 你不能那样做。初始化程序块是构造函数的一部分,在构造对象之后注入依赖项。您正在尝试在它被注入之前使用它。

标签: java spring spring-mvc


【解决方案1】:

Spring 管理的组件只能连接到另一个由 Spring 管理的 bean。

但是,如果您确实需要,有一个技巧可以将服务添加到您的 POJO:

  1. 使用 setter 将 UserService 作为静态字段添加到 POJO
  2. 在Spring初始化bean后的UserService中,将自身设置为POJO上的一个字段(这可以在@PostConstruct方法中完成)

【讨论】:

  • 你能不能写代码,因为你说的我不清楚
【解决方案2】:

使 UserService 的静态实例可用:

@Service
public Class UserService {
    private static UserService instance;
    public static UserService getInstance() { return instance; }

    @PostConstruct
    void init() { instance = this; }

    public String getMyName() { return "it's Me!";}
}

致电:

UserService.getInstance().getMyName()

【讨论】:

    猜你喜欢
    • 2020-04-29
    • 2015-03-03
    • 2013-08-22
    • 2015-03-29
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2020-10-05
    相关资源
    最近更新 更多