文章目录
- java框架-Springboot3-基础特性+核心原理
- profiles
- 外部化配置
- 生命周期监听
- 事件触发时机
- 事件驱动开发
- SPI
- Springboot容器启动过程
- 自定义starter
java框架-Springboot3-基础特性+核心原理
profiles
外部化配置
生命周期监听
事件触发时机
事件驱动开发
@Component
public class MyApplicationListener2 {@EventListenerpublic void onApplicationEvent2(MyApplicationEvent event){System.out.println("onApplicationEvent2======================" + event.getSource());}
}
@Component
public class MyApplicationPublish implements ApplicationEventPublisherAware {ApplicationEventPublisher applicationEventPublisher;public String publish(String msg){MyApplicationEvent myApplicationEvent = new MyApplicationEvent(msg);applicationEventPublisher.publishEvent(myApplicationEvent);return msg + "发布成功!";}@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.applicationEventPublisher = applicationEventPublisher;}
}
SPI
当您使用Java SPI机制时,首先需要创建接口、实现类和服务提供者配置文件。以下是一个示例:
- 创建服务接口:
// ServiceInterface.java
public interface ServiceInterface {void performAction();
}
- 创建服务提供者实现类:
// ServiceProviderImpl1.java
public class ServiceProviderImpl1 implements ServiceInterface {@Overridepublic void performAction() {System.out.println("Performing action from ServiceProviderImpl1");}
}
// ServiceProviderImpl2.java
public class ServiceProviderImpl2 implements ServiceInterface {@Overridepublic void performAction() {System.out.println("Performing action from ServiceProviderImpl2");}
}
- 创建服务提供者配置文件:
在src/main/resources/META-INF/services/
目录下创建一个名为com.example.ServiceInterface
的文件,内容如下:
com.example.ServiceProviderImpl1
com.example.ServiceProviderImpl2
- 使用ServiceLoader加载服务:
// MainClass.java
import java.util.ServiceLoader;public class MainClass {public static void main(String[] args) {ServiceLoader<ServiceInterface> serviceLoader = ServiceLoader.load(ServiceInterface.class);for (ServiceInterface service : serviceLoader) {service.performAction();}}
}
以上示例中,通过ServiceLoader.load(ServiceInterface.class)
加载实现了ServiceInterface
接口的所有服务提供者。通过迭代器遍历,调用performAction()
方法执行相应的操作。
请记住,上述代码应该根据您的包名和类名进行调整和修改。运行这段代码时,输出将是:
Performing action from ServiceProviderImpl1
Performing action from ServiceProviderImpl2
这个例子展示了如何使用Java SPI机制来动态地加载和使用服务提供者的实现类。
Springboot容器启动过程
自定义starter
自定义starter逐级抽取视频讲解