跳到主要内容

快速上手

普通 Java 应用从 hasor-core 开始;注解配置使用 hasor-config;Web MVC 使用 hasor-web;需要可执行 Fat Jar 或内嵌容器时再加入对应的 hasor-boot 子模块。

运行环境

应用需要使用 JDK 17 或以上版本。

引入 hasor-core

以下示例使用 Hasor 5.2.0

<dependency>
<groupId>net.hasor</groupId>
<artifactId>hasor-core</artifactId>
<version>5.2.0</version>
</dependency>

创建容器

最小启动方式是一行代码:

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 注解配置