环境变量
main方法参数使用:java 类名 【参数1】 【参数2】 【参数3】 .。。。
123public static void main(String[] args) { System.out.println(args);}
System.getenv获取系统环境变量同 linux 下 export
System.getProperty获取java程序变量通过 java -Dk=v配置
dubbo-spi
java有spi机制为什么dubbo还要自创一套?
javaSpi没有key value机制,全部都是实现类。没有顺序之分
javaSpi 如果有多个实现类,只能依次加载,不能精准加载
...等
dubboSPI的特性
可根据key获取指定的SPI实现
可根据@Activate注解进行分类,获取指定的SPI实现
多个实现可排序实现排序接口org.apache.dubbo.common.lang.Prioritized
可包装(静态代理)对原有的spi实现直接编码进行静态的代理,spi的实现类只留一个有参构造,参数为SPI接口的类型即可变为wrapper
可注入对spi的实现类中如果有set方法,且没有DisableInject注解,那么以此方法的第一个参数的类型+名称,再次从dubboSPI容器中寻找对应的实例。并set
spi无实现者的情况下,可自适应实现(一般开发者用不到)方法:getAdaptiveExtension()如果spi配置文件中有配置实现类并且类上有Adaptive注解,则直接用此类。如果没有实现类,但是spi接口中个别方法上有Adaptive注解,并 ...
java-spi
javaSPI机制service provider interface
12345// 通过遍历即可获取到对应的class,那么原理是什么呢?Iterator<ABC> iterator = ServiceLoader.load(ABC.class).iterator();while (iterator.hasNext()) { ABC next = iterator.next();}
原理java规定spi的配置文件都在这个目录META-INF/services/该目录下可以有多个文件,文件的名称必须以class全类名命名。通过ServiceLoader类,读取名字为spi类的全名称的文件内容为多行,一行为一个class的全类名。该class为spi的实现类。
ServiceLoader入口12345678910111213141516171819202122232425262728293031323334353637383940414243public final class ServiceLoader<S> implements ...
代码高亮
测试代码高亮
12345678910111213141516171819202122232425@Overrideprotected Object doGetInjectedBean(AnnotationAttributes attributes, Object bean, String beanName, Class<?> injectedType, InjectionMetadata.InjectedElement injectedElement) throws Exception { /** * The name of bean that annotated Dubbo's {@link Service @Service} in local Spring {@link ApplicationContext} */ String referencedBeanName = buildReferencedBeanName ...
博客
测试部署