报错信息如下:
***************************
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文件定义<bean>...</bean>