- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试从上下文接收类的bean,然后将其保存在mongodb集合中。问题是,由于未知原因,它的所有属性在保存之前都设置为 null。当我尝试将对象保存在由 new
运算符创建的数据库中(但不使用 beans)时,它工作得非常好:
public static void main(String[] args) {
ApplicationContext ctx;
ctx = new ClassPathXmlApplicationContext("context.xml");
Komputer komputer = (Komputer)ctx.getBean("komputer");
Dao dao = (Dao)ctx.getBean(Dao.class);
dao.deleteAll();
System.out.println("inserting: " + komputer.getTyp());
dao.save(komputer); // sets everything to null and puts in db
Komputer new_komputer = new Komputer();
new_komputer.setTyp("test");
System.out.println("inserting: " + komputer.getTyp());
dao.save(new_komputer); // correctly puts in db
Iterable <Komputer> komputer_iterable = dao.findAll();
System.out.println("List: ");
for (Komputer komputer : komputer_iterable) {
System.out.println("id:" + komputer.getId() + ", typ: " + komputer.getTyp());
}
}
控制台打印结果:
inserting: Intel Pentium B970
13:33:38.719 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - Inserting DBObject containing fields: [_class, _id, obwodKola, liczbaLosowa] in collection: komputer
13:33:38.720 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[lab_test]
inserting: test
13:33:38.726 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - Inserting DBObject containing fields: [_class, _id, typ, obwodKola, liczbaLosowa] in collection: komputer
13:33:38.726 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[lab_test]
13:33:38.730 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - find using query: { } fields: null for class: class org.zut.lab1.Komputer in collection: komputer
13:33:38.731 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[lab_test]
List:
id:56657ca244ae837d313d8b29, typ: null
id:56657ca244ae837d313d8b2a, typ: test
当然,所有第一个对象属性都设置正确。
这就是 dao 类的样子:
import org.springframework.data.repository.CrudRepository;
public interface Dao extends CrudRepository<Komputer, String> {
}
还有计算机类:
import org.springframework.data.annotation.Id;
public class Komputer {
@Id
private String id;
private Procesor procesor;
private String typ;
private float obwodKola; // 2 * pi * r
private float liczbaLosowa;
public void setProcesor(Procesor procesor) {
this.procesor = procesor;
}
public Procesor getProcesor() {
return this.procesor;
}
public void setTyp(String typ) {
this.typ = typ;
}
public String getTyp() {
return this.typ;
}
public float getObwodKola() {
return obwodKola;
}
public void setObwodKola(float obwodKola) {
this.obwodKola = obwodKola;
}
public float getLiczbaLosowa() {
return liczbaLosowa;
}
public void setLiczbaLosowa(float liczbaLosowa) {
this.liczbaLosowa = liczbaLosowa;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
context.xml 文件中的 Bean:
<mongo:mongo id="mongo" host="localhost" port="27017" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongo" />
<constructor-arg name="databaseName" value="lab_test" />
</bean>
<mongo:repositories base-package="org.zut.lab1"></mongo:repositories>
<bean id="procesor" class="org.zut.lab1.Procesor">
<property name="iloscRdzeni" value="4"/>
<property name="czestotliwosc" value="300000"/>
</bean>
<bean id="komputer" class="org.zut.lab1.Komputer">
<property name="liczbaLosowa" value="#{T(java.lang.Math).random() * procesor.czestotliwosc}"/>
<property name="procesor" ref="procesor"/>
<property name="obwodKola" value="#{T(java.lang.Math).PI * 2 * procesor.getIloscRdzeni()}"/>
<property name="typ" value="Intel Pentium B970"/>
</bean>
这让我完全迷失了方向。我做错了什么?
最佳答案
基本上,Spring AOP 为 ID 为 komputer
的 bean 实例创建一个Proxy
。
作为代理,它调用代理方法(就像使用 Mockito
进行模拟时一样),但原始属性为 null。如果您使用某些 IDE(例如 Eclipse)调试代码,您可以看到发生了什么。
因此,当您保存代理实例时,它采用属性
值,而不是getters。
如果从上下文中删除 aop proxy
,komputer bean 将被正确保存。
<aop:aspectj-autoproxy/>
....
<aop:config>
<aop:aspect ref="profiler">
<aop:pointcut expression="execution(* org.zut.lab1.Komputer.oblicz(..)) and args(czas)"
id="test"/>
<aop:around method="profile" pointcut-ref="test"/>
</aop:aspect>
</aop:config>
关于java - mongodb DAO 在 save() 之前将所有属性设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34133189/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!