springboot、spring cloud引入其他模块的包,无法扫描注解的解决方案

在多模块的项目中,有时候需要引入公共类,在pom文件中引入依赖:

		<!-- 公共模块 -->
		<dependency>
			<groupId>com.suyongxiao</groupId>
			<artifactId>tool</artifactId>
			<version>0.0.1</version>
		</dependency>

但是引入后,公共模块的注解不生效,如自定义注解,甚至@Autowired等都不起作用。
解决方案如下:

  • 1.通过包扫描

在application启动类的注解上,scanBasePackages ,这个注意要加上自己本身的路径

@SpringBootApplication(scanBasePackages = {"com.example"})
  • 2.使用@import注解手动导入需要装载的类
package org.authentication.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * 此类用于导入公告包(tool)的自定义切面
 * 
 * @author 放飞的承诺
 * @since 2021-09-03
 * */
@Import({
	//这里就是填写需要装载的类
	org.annotations.HttpLogsAspect.class,
	org.annotations.SqlOperaLogsAspect.class,
	org.annotations.AsyncLogs.class
})
@Configuration
public class ImportAspectConfig {

}

  • 3.推选解决的方案

application启动类默认扫描它自己下面的包,所以不要把application.java放到最顶层,参考下图的目录结构进行创建就可以扫描到
在这里插入图片描述

### 关于 SpringSpring Boot 和 Spring Cloud 的常见面试题 #### 1. **Spring 定时任务支持** 定时任务在实际开发中非常普遍,而 Spring Boot 对定时任务的支持主要来源于 Spring 框架本身的功能[^1]。通过 `@Scheduled` 注解可以轻松实现定时任务的调度。 ```java @Component public class ScheduledTasks { @Scheduled(fixedRate = 5000) public void reportCurrentTime() { System.out.println("当前时间:" + new Date()); } } ``` --- #### 2. **Spring Cloud 版本管理机制** Spring Cloud 是一个综合性框架,其由多个子项目组成,各个子项目的发布周期可能不同。因此,为了统一管理和协调版本依赖关系,Spring Cloud 提供了一个 BOM(Bill of Materials),即版本清单文件[^2]。开发者可以通过引入该清单来简化依赖管理。 ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` --- #### 3. **Spring Boot 启动类的关键注解** 在 Spring Boot 应用程序中,启动类通常需要添加 `@SpringBootApplication` 或者 `@EnableAutoConfiguration` 注解[^3]。这两个注解的核心作用在于自动扫描路径下的组件并完成必要的配置初始化工作。 ```java @SpringBootApplication(scanBasePackages = {"com.example"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` --- #### 4. **Spring Boot 中 YAML 文件的优势** 相比于传统的 `.properties` 配置文件,YAML 文件因其结构化的特性,在处理复杂嵌套配置时更具优势[^4]。它能够清晰地表达层次化数据,并减少冗余字符带来的干扰。 ```yaml server: port: 8081 servlet: context-path: /app ``` --- #### 5. **Spring Security 过滤器链的工作原理** Spring Security 的核心组成部分之一是安全过滤器链(Security Filter Chain)。这条链含了多个过滤器,每个过滤器都承担特定职责,例如认证请求、授权访问等[^5]。默认情况下,Spring Security 自带了多达 15 种标准过滤器。 以下是一些重要的过滤器及其功能概述: - **UsernamePasswordAuthenticationFilter**: 负责基于表单登录的身份验证。 - **ExceptionTranslationFilter**: 处理异常并将未授权或未经身份验证的请求转换为适当响应。 - **FilterSecurityInterceptor**: 执行方法级和 URL 级别的权限控制。 --- #### 6. **解决方案总结** 针对上述技术栈中的问题,解决思路如下: - 如果遇到定时任务无法正常运行的情况,需确认是否正确启用了 `@EnableScheduling` 并检查线程池设置。 - 在使用 Spring Cloud 时,建议始终遵循官方推荐的兼容性矩阵以避免版本冲突。 - 当面对复杂的多模块应用时,合理利用 YAML 文件分层配置能力可显著提升维护效率。 - 若发现安全性漏洞,则应深入分析现有过滤器链逻辑是否存在缺失环节,并按需扩展自定义过滤器。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值