依赖注入框架之Plexus简单使用
前言
今天在学习maven源码时,发现其中使用到了Plexus框架,它也是一个IOC容器(类似Spring和Guice),在maven中被大量使用。
添加依赖
复制<dependency>
<groupId>org.eclipse.sisu</groupId>
<artifactId>org.eclipse.sisu.plexus</artifactId>
<version>0.3.4</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.1.0</version>
</dependency>
Plexus底层是通过扩展Guice来实现的
定义Bean和依赖注入
复制import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class AddressService {
private String province;
private String city;
public String queryAddress() {
return province + city;
}
}
复制public class UserService {
private AddressService addressService;
public void queryUser() {
System.out.println(addressService.queryAddress());
}
}
定义两个bean,UserService依赖AddressService。
配置文件
复制<component-set>
<components>
<component>
<role>com.imooc.sourcecode.java.google.plexus.test1.AddressService</role>
<role-hint>addressService</role-hint>
<implementation>com.imooc.sourcecode.java.google.plexus.test1.AddressService
</implementation>
<configuration>
<province>山西</province>
<city>太原</city>
</configuration>
</component>
<component>
<role>com.imooc.sourcecode.java.google.plexus.test1.UserService</role>
<role-hint>userService</role-hint>
<implementation>com.imooc.sourcecode.java.google.plexus.test1.UserService
</implementation>
<requirements>
<requirement>
<role>com.imooc.sourcecode.java.google.plexus.test1.AddressService</role>
<field-name>addressService</field-name>
</requirement>
</requirements>
</component>
</components>
</component-set>
在META-INF/plexus下创建components.xml文件,类似于Spring的配置文件,使用configuration来配置各个属性,使用requirements来配置依赖的其他bean。
如果使用内部类的话,role需要定义为test1$UserService这种格式,不然类加载器找不到。
客户端使用
复制import org.codehaus.plexus.DefaultPlexusContainer;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
/**
* 测试Plexus的依赖注入
*/
public class Client {
public static void main(String[] args) throws PlexusContainerException, ComponentLookupException {
PlexusContainer container = new DefaultPlexusContainer();
UserService userService = container.lookup(UserService.class);
userService.queryUser();
}
}
输出结果为
复制山西太原
在maven中的使用

总结
Plexus框架在开源项目中使用的很少,了解即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2021-04-20 java之JNI入门