依赖注入框架之Plexus简单使用
前言
今天在学习maven源码时,发现其中使用到了Plexus框架,它也是一个IOC容器(类似Spring和Guice),在maven中被大量使用。
添加依赖
org.eclipse.sisu
org.eclipse.sisu.plexus
0.3.4
com.google.inject
guice
4.1.0
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。
配置文件
com.imooc.sourcecode.java.google.plexus.test1.AddressService
addressService
com.imooc.sourcecode.java.google.plexus.test1.AddressService
山西
太原
com.imooc.sourcecode.java.google.plexus.test1.UserService
userService
com.imooc.sourcecode.java.google.plexus.test1.UserService
com.imooc.sourcecode.java.google.plexus.test1.AddressService
addressService
在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框架在开源项目中使用的很少,了解即可。
参考
Plexus Site