我想出了一个奇怪的问题,我必须在尝试过的Entity类中注入Spring Managed依赖项,但是依赖项是null
,我做错了无法弄清。
我有一个实用程序类的依赖项,该实用程序类被标记为组件,我可以从控制器和服务类中访问它,但是在实体中却不能,因为缺少它,因为它们是spring-boot,我是否会丢失一些我不知道的jars? 这是代码:
@Table
@Entity
@DiscriminatorValue("3")
@Component
public class LoginBot extends Bot implements Serializable {
private static final long serialVersionUID = 1L;
public LoginBot() {}
@Autowired
SelUtil util;
@Override
public Map<String, Object> test() {
Map<String, Object> returnMap=new HashMap<>();
util.selectBrowserAndPlatform(this);
return returnMap;
}
}
答案 0 :(得分:1)
AFAIK spring不会对实体类进行后处理,因此它不会自动装配任何东西,实体也不是spring上下文bean,并且将一些util类放入实体bean中确实是一种不好的做法。如果您确实需要使用一些实用程序,也许只是向其中添加静态方法?
答案 1 :(得分:0)
实体不是spring bean,创建不是由spring容器管理的。它们是由持久性提供程序创建的。您不能在此处使用自动装配线和组件注释。
将SelUtil添加到实体意味着您要保留它。真的是这样吗?
答案 2 :(得分:0)
是的,暂时不可能。 但是在Spring的帮助下有一个补丁工作,在dao和对我有用的控制器之间添加了额外的Service类层。 我做了一些更改:
@Transient
的成员变量中添加了Bot class(super class)
注释,因此child仍然可以使用它,并且还添加了一个抽象方法,即test()
。BotRepoCustom
的服务接口Bot getBotWithTransientFields(Long id);
BotRepoCustomImpl
现在,当我通过BotRepoCustomImpl
类获得具有Spring Dependency的Bot时,可以直接使用它。
目前,补丁程序有效,并且没有静态方法。
如果您想使用代码,我可以提供。