Google Guice 与 Noear Solon 的简单对照

1. 简介

Google Guice 是一个轻量级的依赖注入框架,它支持Java 5或者更高版本的JDK。Noear Solon 也是一个轻量级的依赖注入框架,它支持Java 8或者更高版本的JDK

本文会通过一些例子来初步的认识一下 Guice 和 Solon 的区别,及互通性。

2. 添加依赖

guice

xml 复制代码
<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
</dependency>

solon

xml 复制代码
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon</artifactId>
</dependency>

3. 基础用法对照

  • (a) 注入

Guice 的项目代码样例(略过 logger 和 communicator 的来源)

java 复制代码
public class Communication {
    @Inject 
    private Logger logger;

    @Inject
    private Communicator communicator;

    public boolean sendMessage(String message) {
        return communicator.sendMessage(message);
    }
    
    public static void main(String[] args){
        Injector injector = Guice.createInjector();
        
        Communication comms = injector.getInstance(Communication.class)
        comms.sendMessage("软件质量保障");    
    }
}

Solon 的项目代码样例(略过 logger 和 communicator 的来源)

java 复制代码
@Component
public class Communication {
    @Inject 
    private Logger logger;

    @Inject
    private Communicator communicator;

    public boolean sendMessage(String message) {
        return communicator.sendMessage(message);
    }
    
    public static void main(String[] args){
        Solon.start(Communication.class, args);
        
        Communication comms = Solon.context().getBean(Communication.class);
        comms.sendMessage("软件质量保障");    
    }
}
  • (b) 反向控制绑定

Guice。此模块实现将Communicator绑定到其默认实现类DefaultCommunicatorImpl上,在找到Communicator的地方都将注入Default CommunicatorImpl的实例。

java 复制代码
public class BasicModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Communicator.class).to(DefaultCommunicatorImpl.class);
    }
}

Solon。则通过在 DefaultCommunicatorImpl 类上,添加组件注解。

java 复制代码
@Component
public class DefaultCommunicatorImpl extneds Communicator{
}
  • (c) by name 注入

Guice

java 复制代码
@Inject @Named("DefaultCommunicator")
Communicator communicator;


@Override
protected void configure() {
    bind(Communicator.class)
      .annotatedWith(Names.named("DefaultCommunicator"))
      .to(DefaultCommunicatorImpl.class);
}

Solon

java 复制代码
@Inject("DefaultCommunicator")
Communicator communicator;


@Component("DefaultCommunicator")
public class DefaultCommunicatorImpl extneds Communicator{
}
相关推荐
vx1_Biye_Design4 小时前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design4 小时前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
hay_lee5 小时前
Spring AI实现对话聊天-流式输出
java·人工智能·ollama·spring ai
Hx_Ma165 小时前
SpringBoot数据源自动管理
java·spring boot·spring
SunnyDays10115 小时前
Java 高效实现 CSV 转 Excel
java·csv转excel
starfire_hit5 小时前
JAVAWEB根据前台请求获取用户IP
java·服务器·网络
fengxin_rou5 小时前
[Redis从零到精通|第四篇]:缓存穿透、雪崩、击穿
java·redis·缓存·mybatis·idea·多线程
像少年啦飞驰点、5 小时前
从零开始学 RabbitMQ:小白也能懂的消息队列实战指南
java·spring boot·微服务·消息队列·rabbitmq·异步编程
宠友信息5 小时前
2025社交+IM及时通讯社区APP仿小红书小程序
java·spring boot·小程序·uni-app·web app
java1234_小锋5 小时前
Java高频面试题:Spring和SpringBoot的关系和区别?
java·spring boot·spring