解决SpringBoot常见问题

本文主要探讨了SpringBoot开发过程中常见的问题,包括@Autowired无法注入bean类的解决办法、利用BeanDefinitionBuilder创建bean并注册到Spring容器的方法,以及部署到Tomcat服务器时遇到的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发相关:

*使用@Autowired无法注入bean类

Consider defining a bean of type ‘xxx’ in your configuration.

1.@ComponentScan配合@Component、@Configuration、@Entity、@Repository、@Service等注解

@ComponentScan

@ComponentScan注解的basePackages属性可指定扫描的包路径(com.xxx),basePackages属性默认从被@ComponentScan所注解类的包路径开始向下扫描,因此SpringBoot的启动类最好位于源码根目录(com.xxx)。

@Component

组件类注解(通用),被@Repository和@Service包含。

@Configuration

配置类注解,作用相当于Spring在xml文件中定义bean。

@Entity

实体类注解,@Table(name=“表名”)作用于类上,@Id为主键字段,@Column为普通字段。

@Repository

DAO层注解,注入后bean的名称为类名的首字母小写,@Repository的value属性可指定bean的名称。

@Service

Service层注解,注入后bean的名称为类名的首字母小写,@Service的value属性可指定bean的名称。

2.使用@Import(xxx.class)注解在类名?

3.利用BeanDefinitionBuilder创建bean并注册到Spring容器

Tomcat不执行SpringApplication.run语句之后的所有代码,实现ApplicationListener接口的onApplicationEvent的方法可截获ApplicationContext ,在Tomcat完全启动SpringBoot项目前注入bean。

@Component
public class TomcatListener implements ApplicationListener<ContextRefreshedEvent> {
	@Override
	public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
		ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();
		DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
		BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(xxx.class);
		defaultListableBeanFactory.registerBeanDefinition("xxx", beanDefinitionBuilder.getRawBeanDefinition());
		Assert.notNull(applicationContext.getBean("xxx"));
	}
}

编译相关:

*Error assembling WAR:webxml is required

指定maven-war-plugin版本3.1.0以上即可。

<?xml version="1.0" encoding="UTF-8"?>
	<packaging>war</packaging>
	。。。
	<build>
        <plugins>
            <plugin>
            	<groupId>org.apache.maven.plugins</groupId>
            	<artifaceId>maven-war-plugin</artifaceId>
            	<version>3.1.0</version>
            </plugin>
        </plugins>
    </build>   

部署相关:

*部署到Tomcat不运行(无日志)

在IDE运行SpringBoot项目时使用的是SpringBoot集成的tomcat,部署到Tomcat服务器时SpringBoot的启动类需继承SpringBootServletInitializer并重写configure方法。

@SpringBootApplication
public class AppMain extends SpringBootServletInitializer {
    public static void main(String[] args) {
    	SpringApplication.run(AppMain.class, args);
    }
    
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(AppMain.class);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值