SpringBoot中构建带有含参构造函数的Bean,解决报错Parameter 0 of constructor in XXX required a bean ...

报错信息如下:


***************************

APPLICATION FAILED TO START
***************************


Description:
Parameter 0 of constructor in com.deng.service.impl.ImageServiceImpl required a bean of type 'java.lang.String' that could not be found.

Action:

Consider defining a bean of type 'java.lang.String' in your configuration.


报错信息是由于ImageServiceImpl中定义了含参数的构造函数,Spring自动构造和注入时未为该Bean传入参数,引起报错。


解决方案:使用@Bean注解手动创建ImageServiceImpl的实例,具体步骤如下:

1、定义BeanConfig类(或者将Bean的定义直接写在Application启动类中)

package com.deng.config;

import com.deng.service.ImageService;
import com.deng.service.impl.ImageServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Created by deng on 2018/5/21.
 */
@Configuration
public class BeanConfig {
    @Bean
    ImageService imageService(){
        return new ImageServiceImpl("test");
    }
}

2、修改ImageServiceImpl(含有参构造函数的Bean):

package com.deng.service.impl;

import com.deng.bean.Image;
import com.deng.dao.ImageDao;
import com.deng.service.ImageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by deng on 2018/5/18.
 */
//@Service
public class ImageServiceImpl implements ImageService {
    @Autowired
    private ImageDao imageDao;

    private String test;

    public ImageServiceImpl(String s) {
        test = s;
    }

...
}
注意,其中的@Service(或者@Component、@Controller、@Repository、@Configuration这些用来定义Bean的注解)注解一定要注释掉或者删掉,这样才能够让自己手动构建的Bean起作用



注:SpringBoot中的@Bean注解相当于在Spring框架中使用xml文件定义...











你可能感兴趣的:(SpringBoot中构建带有含参构造函数的Bean,解决报错Parameter 0 of constructor in XXX required a bean ...)