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() {
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论