依赖注入框架之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框架在开源项目中使用的很少,了解即可。

参考

Plexus Site

posted @   strongmore  阅读(682)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2021-04-20 java之JNI入门
点击右上角即可分享
微信分享提示