注入配置

下面以属性文件为例:

  1. jdbcSettings.jdbcDriver = com.mysql.jdbc.Driver
  2. jdbcSettings.jdbcURL = jdbc:mysql://127.0.0.1:3306/test
  3. jdbcSettings.userName = sa
  4. jdbcSettings.userPassword =

也可以通过 Xml 文件来表示相同的配置内容:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <config xmlns="http://www.hasor.net/sechma/main">
  3. <jdbcSettings>
  4. <jdbcDriver>com.mysql.jdbc.Driver</jdbcDriver>
  5. <jdbcURL>jdbc:mysql://127.0.0.1:3306/test</jdbcURL>
  6. <userName>sa</userName>
  7. <userPassword></userPassword>
  8. </jdbcSettings>
  9. </config>

在 Bean 中通过 net.hasor.core.InjectSettings 注解来表示注入的内容来自于配置文件

  1. public class DataBaseBean {
  2. @InjectSettings("jdbcSettings.jdbcDriver")
  3. private String jdbcDriver;
  4. @InjectSettings("jdbcSettings.jdbcURL")
  5. private String jdbcURL;
  6. @InjectSettings("jdbcSettings.user")
  7. private String user;
  8. @InjectSettings("jdbcSettings.password")
  9. private String password;
  10. ...
  11. }

最后在创建容器的时候指定要加载的配置文件即可

  1. AppContext appContext = Hasor.create().mainSettingWith("<config-file-name>").build();

类型自动转换@InjectSettings 可以帮助做一些简单的类型转换,类型转换工具为 net.hasor.utils.convert.ConverterUtils。其来源为: Apache Commons

  1. public class TestBean {
  2. @InjectSettings("userInfo.myAge")
  3. private int myAge;
  4. }

注入环境变量

把敏感信息通过环境参数传递给应用是一个十分安全的做法,Hasor 支持注入一个环境参数。例如:

  1. public class DataBaseBean {
  2. @InjectSettings("${db.user}")
  3. private String user;
  4. @InjectSettings("${db.pwd}")
  5. private String password;
  6. ...
  7. }

然后当启动程序时,追加两个 -D 参数即可: java TestMain -Ddb.user=username -Ddb.pwd=password

除了 -D 参数之外,环境变量还可以是系统环境变量。例如得到 JAVA_HOME 位置。

  1. public class DataBaseBean {
  2. @InjectSettings("${JAVA_HOME}")
  3. private String javaHome;
  4. }

提示

这些位置可以成为Hasor环境变量的来源

位置
System.getenv()
System.getProperties()
hconfig.xml 配置文件中 hasor.environmentVar 的子节点
Hasor.create().addVariable(…)

注入容器类型

例如:得到容器自身

  1. public class AwareBean {
  2. @Inject()
  3. private AppContext appContext
  4. }
  5. //或
  6. public class AwareBean implements AppContextAware {
  7. public void setAppContext(AppContext appContext) {
  8. ...
  9. }
  10. }

其它容器可以被注入的特殊类型:

功效 接口
net.hasor.core.AppContext 容器
net.hasor.core.Settings 配置文件接口
net.hasor.core.Environment 环境变量接口
net.hasor.core.spi.SpiTrigger SPI 触发器
net.hasor.core.EventContext 容器事件模型接口