• 依赖注入框架之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

  • 相关阅读:
    js事件冒泡替我背了很多黑锅 嘿嘿
    opencvmin函数
    关于Block Formatting Context--BFC和IE的hasLayout
    javascript面向对象包装类Class的类库解析
    nodejs中exports与module.exports的区别
    ie6固定定位层fixed
    CSS的类名交集复合选择器
    遮罩层覆盖整个页面
    nodejs的require模块及路径
    struts.properties配置详解
  • 原文地址:https://www.cnblogs.com/strongmore/p/16167967.html
Copyright © 2020-2023  润新知