- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望在两组类(让我们称之为 Bean 和模型)之间强制执行一种模式,这样它们就可以在彼此之间进行转换,而无需在每个 Bean/模型 PoJo 中使用显式代码(让我们称之为这个汇编器)。
我想到为 Beans、Models 和 Assemblers 创建基类,并从基类调用 assemblers 方法,这样每个 Bean 和 Model 都会隐式地获得转换方法。
类似这样的事情:
BaseBean[BaseAssembler a, convertToModel(BaseBean b){a.convertToModel(b)}]
BaseModel[BaseAssembler a, convertToBean(BaseModel m){a.convertToBean(m)}]
BaseAssembler[convertToBean(BaseModel m), convertToModel(BaseBean b)]
然后我将创建一组具体的类:
EmpBean[name,id] extends BaseBean
EmpModel[name,id] extends BaseModel
EmpAssembler[convertToBean(EmpModel m),convertToModel(EmpBean b)] implements BaseAssembler
现在,我想调用 empBean.convertToModel()
并获取 EmpModel
的实例。但实际上,我得到的只是 assembler.convertToModel()
调用上的 NPE
。
关于如何告诉 Spring EmpBean
和 EmpModel
使用 EmpAssembler
而不是 BaseAssembler
有什么想法吗?
编辑:我正在使用基于注释的配置并尝试解决此问题,而无需恢复到基于 XML 的配置。如果我使用 XML 配置,我猜简单的解决方案就是将具体类设置为汇编程序的值。如下所示:
<bean id="empAssembler" class="com.blah.EmpAssembler" />
<bean id="deptAssembler" class="com.blah.DeptAssembler" />
<bean id="empBean" class="com.blah.EmpBean" >
<property name="assembler" ref="empAssembler" />
</bean>
<bean id="empModel" class="com.blah.EmpModel" >
<property name="assembler" ref="empAssembler" />
</bean>
<bean id="bookBean" class="com.blah.BookBean" >
<property name="assembler" ref="bookAssembler" />
</bean>
<bean id="bookModel" class="com.blah.BookModel" >
<property name="assembler" ref="bookAssembler" />
</bean>
如何通过基于注释的配置来实现此目的?
最佳答案
我假设您想要调用 empBean.convertToModel()
而不是 empBean.getModel()
。
请在这里放一些具体的代码,EmpBean是如何继承BaseBean以及如何初始化的。那么应该很容易看到。
如果没有这个,我只能大胆猜测:
NPE
提示您错过了初始化 BaseBean.a 如果您的 EmpBean 类如下所示:
class EmpBean extends BaseBean {
EmpAssembler a;
EmpBean(EmpAssembler a) {
this.a = a;
}
}
然后 EmpBean.a “影子”BaseBean.a,这意味着有两个 a
实例:this.a
使用构造函数中的某个实例进行初始化,但 super.a
仍然是 null
。而 BaseBean.convertToModel(...)
只知道后者。如果这是您的问题,那么您只需删除 EmpAssembler a;
回复您的评论:如果构造函数注入(inject)不可行,您可能需要尝试基于注释的 setter 注入(inject)。像这样的东西:
@Autowired
void setAssembler(EmpAssembler a) {
this.a = a;
}
关于java - Spring - 在类之间隐式转换(寻求强制执行模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58292624/
是否可以使用 av_seek_frame() 函数查找 I-Frame。 我面临的问题是,如果我在 AVC 文件中查找,如果我不刷新缓冲区,我会收到很多噪音。如果我刷新缓冲区,解码器不会返回一个帧,直
在我处理 SL3/SL4 应用程序并开始使用字体时,我发现缺乏有关字体策略的文档和最佳实践。例如: 是否有常见的后备字体 支持的字体集(Arial、Comic 无 MS 等)?是否有一组关于 Wind
是否有一个我可以运行而什么都不做(或很少做)而永远不会出错的命令? 我需要一些东西来测试海豚。 最佳答案 注释什么都不做(但如果根本没有命令,您的数据库驱动程序可能会提示): /* Hello, wo
我正在寻找与 Delphi (7) 一起使用的 FOSS SHA1 实现。 最好是一些小的东西,甚至可能是独立的 SHA1,而不是过去的一个巨大的库。易于安装和使用固然很好,但可靠性当然是第一位的。
团队, 我是 Azure 的初学者,对 Blob 存储日志有一些疑问 我指的是这个链接http://blogs.msdn.com/b/windowsazurestorage/archive/201
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我在周末发现了 Akavache,它看起来是一个强烈推荐的用于在 Win8 和 WP8 上缓存项目的解决方案。 但是,我找不到任何实际示例或如何使用它的文档! 有人可以分享任何示例项目或文档吗? 最佳
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
Delphi XE2 和 MySql。 我的 previous question导致建议我应该使用 MySql 的 native TIMESTAMP 数据类型来存储日期/时间。 不幸的是,我似乎找不到
DDX 技术是为将资源与类成员链接起来而创建的(例如)。在我的解决方案中,我需要在不存在于类成员 CCtreeCtrl 的资源中的 myCCtreeCtrl(CCtreeCtrl 实例)之间建立连接。
我遇到了这个问题: A shoemaker has N jobs (orders from customers) to execute. The shoemaker can work on only
typedef union { float flts[4]; struct { GLfloat r; GLfloat theta; GL
我有两个我想组合的以下形状的数组。 数组: arr1 = [["apple", "aardvark"], ["banana", "beach"]] arr2 = ['A', 'B'] 期望的结果: [
这个问题已经asked before , 但每次接受的答案只是辞职,使用 Application.MacroOptions ( VBA6 ) ( VBA7 ) 提供功能描述,但此信息实际上并未显示为工
如标题所述,-ss命令不适用于某些设备,例如华为 Mate 10。 这是我正在使用的命令以及如何获取值: Format formatter = new SimpleDateFormat("00:" +
我被指派负责修订当前的报告服务身份验证流程。目的是保持必要的安全级别,并简化授予对各个报告的访问权限的维护/配置。 我无权访问域 Controller 以修改或创建新的 AD 组。我必须与当前存在的组
我正在尝试使用 ashx 处理程序作为 HTML5 视频源。我可以做到这一点,但我无法在已经缓冲的视频上进一步前进。 我可以在使用标准 MP4 源的网络选项卡上看到向前搜索会创建另一个请求,但使用处理
#include #include class Test { char name[10]; int data; public: void getData()
您是否知道任何具有外键约束和/或提供事务支持的 SQLite 替代方案(基于可移植/平面文件/无服务器)? 最佳答案 从版本 3.6.19 开始,SQLite supports foreign key
我正在寻找一个简单的脚本,我可以在 bash 文件中使用它来检查是否有任何可用的系统更新。 我从 #!/bin/bash clear updates=$(apt list upgradeable) i
我是一名优秀的程序员,十分优秀!