나는 SpringBoot로 mongodb를 설정하려고 시도하고 있는데, context.xml을 사용하지 않고 구성 클래스와 주석으로 구성하려고합니다. 내가 내부 SequenceRepository을 사용하려는 경우@Autowired가 항상 작동하지 않는 이유는 무엇입니까?
package com.controllers;
import com.mongo.documents.Sequence;
import com.mongo.repositories.SequenceRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class IndexController {
@Autowired
private SequenceRepository sequenceRepository;
@RequestMapping("/")
public String index(){
Sequence sequence = new Sequence();
sequence.setClassName("class.Test");
sequence.setActual(1);
sequenceRepository.save(sequence);
return "index";
}
}
을하지만 :
package com.mongo.repositories;
import com.mongo.documents.Sequence;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository("sequenceRepository")
public class SequenceRepository{
@Autowired
private MongoTemplate mongoTemplate;
public Sequence findOne(Query query){
return this.mongoTemplate.findOne(query,Sequence.class);
}
public List<Sequence> find(Query query){
return this.mongoTemplate.find(query,Sequence.class);
}
public void save(Sequence object){
this.mongoTemplate.save(object);
}
public void delete(Sequence object){
this.mongoTemplate.remove(object);
}
}
난 나머지 컨트롤러 거기에 다음과 같이 사용하는 경우가 제대로 작동 :
package com.configuration;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
@Configuration
@EnableMongoRepositories(basePackages = "com.mongo")
public class MongoConfig extends AbstractMongoConfiguration {
@Override
protected String getDatabaseName() {
return "mongodbname";
}
@Override
public Mongo mongo() throws Exception {
return new MongoClient("127.0.0.1", 27017);
}
@Override
protected String getMappingBasePackage() {
return "com.mongo";
}
}
내 저장소는 다음과 같습니다 다음과 같은 시퀀스 문서 :
package com.mongo.documents;
import com.mongo.repositories.SequenceRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
public class Sequence {
@Autowired
private SequenceRepository sequenceRepository;
@Id
private String id;
private String className;
private int actual;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public int getActual() {
return actual;
}
public void setActual(int actual) {
this.actual = actual;
}
public void save(){
this.sequenceRepository.save(this);
}
public void delete(){
this.sequenceRepository.delete(this);
}
}
내가 저장() 메소드에서이 시점에서 nullPointerExceeption있어
package com.controllers;
import com.mongo.documents.Sequence;
import com.mongo.repositories.SequenceRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class IndexController {
@Autowired
private SequenceRepository sequenceRepository;
@RequestMapping("/")
public String index(){
Sequence sequence = new Sequence();
sequence.setClassName("class.Test");
sequence.setActual(1);
sequence.save();
return "index";
}
}
: 그 후 6,
나는에 컨트롤러의 코드를 변경합니다.
내가 뭘 컨트롤러에 저장소 층을 사용하려는 해달라고하면? 다른 수업에서 그것을 숨길 수있는 방법이 있습니까? –
예, 사이에 '서비스'계층을 지정하십시오. 그래서 당신의 구조는 컨트롤러 -> 서비스 -> 저장소처럼 보입니다. 따라서 SequenceService를 생성하여 컨트롤러에 삽입 할 수 있습니다. 또한 서비스에서 리포지토리 호출을 수행하는 것이 좋습니다. – rieckpil