Bean 的启动

有时候我们希望有 Bean 可以在被创建时自动调用一个 init 方法,本小节就来向大家展示一下 Hasor 这方面的能力。

方式一:通过 net.hasor.core.Initjavax.annotation.PostConstruct 注解,例如下面这样。

  1. public class PojoBean {
  2. @Init
  3. public void init(){
  4. ...
  5. }
  6. }

方式二:通过编码方式在 Module 初始化时指定,例如下面这样。

  1. public class MyModule implements Module {
  2. public void loadModule(ApiBinder apiBinder) throws Throwable {
  3. apiBinder.bindType(PojoBean.class).initMethod("init");
  4. }
  5. }

提示

如果您组合使用 @Singleton 注解和 @Init 注解,同时这个类在 Hasor 启动时通过 Module 预先注册了。那么 Hasor 会在启动时自动创建这个类并调用 init 方法。例如:

  1. @Singletonpublic class PojoBean { @Init public void init(){ }}

  2. public class MyModule implements Module { public void loadModule(ApiBinder apiBinder) throws Throwable { apiBinder.bindType(PojoBean.class); }}

或者下面这样的方式也可以达到同样的效果:

  1. public class PojoBean {
  2. public void init(){
  3. ...
  4. }
  5. }
  6.  
  7. public class MyModule implements Module {
  8. public void loadModule(ApiBinder apiBinder) throws Throwable {
  9. apiBinder.bindType(PojoBean.class)
  10. .initMethod("init") // 初始化方法,相当于 @Init 注解
  11. .asEagerSingleton(); // 单例,相当于 @Singleton 注解
  12. }
  13. }

Bean 的销毁

销毁Bean同样也支持两种模式,需要注意的是只有单例的对象才支持销毁能力。

  • 注解换成 net.hasor.core.Destroyjavax.annotation.PreDestroy

  • ApiBinder 的方法对应的是 destroyMethod