【问题标题】:Could not initialize bean class in Spring无法在 Spring 中初始化 bean 类
【发布时间】:2015-09-27 14:15:09
【问题描述】:

我正在尝试使用 spring 开发其余代码。

@RestController
public class MongoController {

    @Autowired
    private MongoDAO mongoDAO ;

    @RequestMapping(value = "/mongotest", method = RequestMethod.GET)
    public String creatTest() {

        return " YO Mongo";
    }


}  

我的 MongoDAO 类如下所示

@Service("mongoDAO")
@Component
public class MongoDAO {


    @Resource
    private DBCollection user ;
    @Resource
    private MongoDatabase userDatabase;
    @Resource
    private MongoCollection<Document> usersCollection;
    @Resource
    private MongoClient mongoClient;

/*  public MongoDAO(final MongoDatabase userDatabase) {
        usersCollection = userDatabase.getCollection("user");
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        DB db = mongoClient.getDB("ITAU");
        user = db.getCollection("user");
    }*/

    public MongoDAO(MongoDatabase userDatabase1) {
        usersCollection = userDatabase1.getCollection("user");

    }

    public MongoDAO() {
        usersCollection = userDatabase.getCollection("user");

    }

但我得到的错误是..

引起:org.springframework.beans.factory.BeanCreationException: 创建文件中定义的名称为“mongoDAO”的 bean 时出错 [C:\用户\用户\桌面\ITAU\77\ABC-iCOE-WAL\ItauBankingTransac s\rest-client\target\classes\com\ABC\WAL\itaudemo\mongo\dao\MongoDAO.class]:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException: 可以 n nstantiate bean 类 [com.ABC.WAL.itaudemo.mongo.dao.MongoDAO]: 构造函数抛出异常;嵌套异常是 java.lang.NullPointerException 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076)

【问题讨论】:

    标签: java spring spring-mvc spring-boot spring-data


    【解决方案1】:

    userDatabase 字段在创建 MongoDao bean 后自动装配。如果您想在构建操作后执行一些操作,请尝试以下操作:

    @Service("mongoDAO")
    public class MongoDAO {
    
    
        @Resource
        private DBCollection user ;
        @Resource
        private MongoDatabase userDatabase;
        @Resource
        private MongoCollection<Document> usersCollection;
        @Resource
        private MongoClient mongoClient;
    
        public MongoDAO() {
    
        }
    
        @PostConstruct
        public postConstruct() {
            usersCollection = userDatabase.getCollection("user");
    
        }
    

    构造函数可能被省略。通常最好不要为组件类自定义构造函数。

    【讨论】:

      【解决方案2】:

      只需使用@Service("mongoDAO") 不需要@Component

      @Service("mongoDAO")
      public class MongoDAO {
      

      您可以使用这两个注解中的任何一个,@Service 用于服务层代码以提高可读性。 @Component 更像是一个通用注解。

      【讨论】:

      • 你说的当然是对的,但它并没有解决@Aman的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2013-05-25
      • 2020-11-30
      相关资源
      最近更新 更多