快速上手
普通 Java 应用从 hasor-core 开始;注解配置使用 hasor-config;Web MVC 使用 hasor-web;需要可执行 Fat Jar 或内嵌容器时再加入对应的 hasor-boot 子模块。
应用需要使用 JDK 17 或以上版本。
引入 hasor-core
以下示例使用 Hasor 5.2.0。
- Maven
- Gradle
<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-core</artifactId>
<version>5.2.0</version>
</dependency>
implementation "net.hasor:hasor-core:5.2.0"
创建容器
最小启动方式是一行代码:
import net.hasor.core.AppContext;
import net.hasor.core.Hasor;
AppContext appContext = Hasor.create().build();
一个应用中可以创建多个 AppContext,它们彼此独立。通常一个进程只需要一个主 AppContext。
编写 Module
Hasor 的配置入口是 net.hasor.core.Module。在 loadModule 中使用 ApiBinder 声明 Bean、SPI、作用域、AOP 等能力。
import net.hasor.core.ApiBinder;
import net.hasor.core.Module;
public class AppModule implements Module {
@Override
public void loadModule(ApiBinder apiBinder) {
apiBinder.bindType(HelloService.class).toInstance(new HelloService());
}
}
启动时传入 Module:
AppContext appContext = Hasor.create().build(new AppModule());
HelloService helloService = appContext.getInstance(HelloService.class);
Module 也可以继续安装其它 Module:
public class RootModule implements Module {
@Override
public void loadModule(ApiBinder apiBinder) throws Throwable {
apiBinder.installModule(new UserModule());
apiBinder.installModule(new WebFeatureModule());
}
}
读取配置
默认情况下 Hasor 会从 classpath 读取 hconfig.xml。如果配置文件使用其它名称,可以在启动时指定:
AppContext appContext = Hasor.create()
.mainSettingWith("my-hconfig.xml")
.build(new AppModule());
也可以在启动时直接写入配置项:
AppContext appContext = Hasor.create()
.addSettings("hasor", "app.name", "demo")
.build(new AppModule());
选择 Web 或 Boot
如果应用需要 Web MVC,引入 hasor-web:
<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-web</artifactId>
<version>5.2.0</version>
</dependency>
如果应用需要直接打包成可执行 Fat Jar,使用 Maven 或 Gradle 打包插件。Web 应用还需要选择一个内嵌容器模块:
<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-boot-web-tomcat</artifactId>
<version>5.2.0</version>
</dependency>
Web Boot 应用可以通过 WebServers.run(args, RootModule.class) 启动。详细说明见 Boot 启动、工程配置 和 Web 启动器。
使用注解配置
加入 net.hasor:hasor-config 后,可以用 @Configuration 和 @Bean 声明对象,并通过 ApplicationBoot.run(Application.class, args) 启动应用。扫描范围由 hasor.loadPackages 显式指定,不会自动推导启动类所在包。启动类不必实现 Module。完整示例、扫描范围和 Bean 生命周期见 Java 注解配置。