解读Spring配置与服务组件的关系和注入机制
1. 基本知识
使用 Spring 框架进行开发时,理解配置类与服务组件之间的关系,以及如何通过依赖注入将它们串联起来,是非常重要的
1.1 配置类(@Configuration)
配置类是 Spring 中用于定义 Bean 的地方
通常使用 @Configuration 注解标记,表示这是一个配置类,Spring 将会扫描这些类并注册其定义的 Bean
@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}基本的参数补充如下:
- 定义 Bean:通过 @Bean 注解的方法可以返回一个 Bean 对象,Spring 容器将会管理这个 Bean 的生命周期
- 包扫描:使用 @ComponentScan 注解可以指定扫描的包,自动发现并注册 Spring 组件(例如 @Component, @Service, @Repository 等)
1.2 实现类(@Service)
通常使用 @Service 注解标记,表示这是一个业务服务组件
通常实现一个接口,并在其内部封装了具体的业务逻辑
@Service
public class MyServiceImpl implements MyService {
private final MyRepository myRepository;
@Autowired
public MyServiceImpl(MyRepository myRepository) {
this.myRepository = myRepository;
}
@Override
public void performService() {
// 业务逻辑实现
}
}主要的功能如下:
- 业务逻辑实现:服务类实现具体的业务逻辑
- 依赖注入:服务类通常会通过构造函数或字段注入所需的依赖(例如其他服务、配置属性等)
1.3 依赖注入(Dependency Injection)
允许将依赖对象(即其他 Bean)注入到目标 Bean 中,减少了对象间的耦合度
主要的方式有如下:
- 构造函数注入:通过构造函数将依赖注入到 Bean 中
- 这种方式通常是推荐的,因为它可以确保依赖在 Bean 创建时就被提供
@Service
public class MyService {
private final AnotherService anotherService;
@Autowired
public MyService(AnotherService anotherService) {
this.anotherService = anotherService;
}
}- 字段注入:通过直接将依赖注入到字段中
- 这种方式相对简单,但不如构造函数注入显式
@Service
public class MyService {
@Autowired
private AnotherService anotherService;
}- 方法注入:通过特定的方法注入依赖,通常用于处理需要在运行时决定的依赖
@Service
public class MyService {
private AnotherService anotherService;
@Autowired
public void setAnotherService(AnotherService anotherService) {
this.anotherService = anotherService;
}
}1.4 组件类(@Component)
可以被自动发现和注册为 Spring 管理的 Bean
@Component
public class MyComponent {
// 组件逻辑
}用于标记一个普通的组件类,可以是任意的类,不特定于服务、仓库等特定角色
2. 实战
为更好展示实战项目中的运用,结合上述的知识点给予案例
以下的Demo只列出代码前半部分,主要是为了更好的说明
JmReportConfiguration配置了 manongServiceImpl 作为 BeanmanongServiceImpl实现了 manongServiceI 接口manongClient依赖于 manongServiceI,并通过 Spring 注入使用它
2.1 配置类
- 通过 @ComponentScan 注解扫描指定的包,自动发现和注册 Spring 组件
- 使用 @Bean 注解定义一个名为 manongService 的 Bean,类型为 manongServiceI
- 此方法会创建 manongServiceImpl 的实例,并将其作为 Spring 容器中的 Bean
@Configuration(proxyBeanMethods = false)
@ComponentScan(basePackages = "org.jeecg.modules.jmreport") // 扫描积木报表的包
public class JmReportConfiguration {
@Bean
public manongServiceI manongService(A a, B b) {
return new manongServiceImpl(a, b);
}
}2.2 实现类
使用 @RequiredArgsConstructor 注解自动生成一个包含所有 final 字段的构造函数,
补充阅读:详细分析Java中@RequiredArgsConstructor注解的基本知识(附Demo)
@RequiredArgsConstructor
public class manongServiceImpl implements manongServiceI {
private final A a;
private final B b;
}2.3 接口类
这是一个接口,定义了服务的合同
public interface manongServiceI {
}2.4 组件类
负责与 manongServiceI 进行交互
默认构造函数,通过 Spring 的 @Autowired 注解注入依赖
@Component("manongClient")
public class manongClient {
@Autowired(required = false)
private manongServiceI jimuTokenService;
@Autowired(required = false)
private JmReportBaseConfig jmBaseConfig;
public manongClient() {
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
WebUploader客户端批量上传图片 后台使用springMVC
这篇文章主要为大家详细介绍了WebUploader客户端批量上传图片,后台使用springMVC接收实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-09-09
详解在springboot中使用Mybatis Generator的两种方式
这篇文章主要介绍了详解在springboot中使用Mybatis Generator的两种方式,本文将介绍到在springboot的项目中如何去配置和使用MBG以及MBG生成代码的两种方式,非常具有实用价值,需要的朋友可以参考下2018-11-11
SpringBoot通过Filter实现整个项目接口的SQL注入拦截详解
这篇文章主要介绍了SpringBoot通过Filter实现整个项目接口的SQL注入拦截详解,SQL注入是比较常见的网络攻击方式之一,在客户端在向服务器发送请求的时候,sql命令通过表单提交或者url字符串拼接传递到后台持久层,最终达到欺骗服务器执行恶意的SQL命令,需要的朋友可以参考下2023-12-12
MyBatis-Plus中使用Wrapper自定义SQL的详细步骤
在 MyBatis-Plus 中使用 Wrapper 自定义 SQL 可以灵活组合条件并复用条件逻辑,通过 ${ew.customSqlSegment} 占位符注入 Wrapper 生成的 SQL 片段,本文给大家介绍了详细步骤和示例,需要的朋友可以参考下2025-07-07
Java常用类库Apache Commons工具类说明及使用实例详解
这篇文章主要介绍了Java常用类库Apache Commons工具类说明及使用实例详解,需要的朋友可以参考下2020-02-02


最新评论