Nutz框架學習

一、ioc

相當於spirng中的ioc,spring中提供了xml與註解的方式加載bean,nutz中提供了json和註解的方式加載bean

@IocBean註解

AnnotationIocLoader 根據這個註解來判斷哪些類應該被自己加載。

不要單例?

默認的,Ioc 容器管理的對象都是單例的,你如果不想單例,你可以:

@IocBean(name="myObject", singleton=false)
public class MyObject {
    ...

爲對象傳遞構造函數 

@IocBean(name="myObject", args={"a string", "refer:anotherObject", true, 234})
public class MyObject {
    ...

 你的構造函數有多少個參數,你就一併在 "args" 屬性裏聲明就好了

若沒有聲明args,那麼就會找無參構造方法哦

聲明對象的事件

在 Nutz.Ioc 容器裏,一個對象有三種事件:

  1. create - 當對象被創建時觸發
  2. fetch - 當對象被從容器中取出時觸發
  3. depose - 當對象被銷燬時觸發

同 JSON 配置一樣, Annotation 方式的配置也允許聲明這三種事件的處理方式

@IocBean(
    create = "init",
    fetch = "com.myapp.MyObjectOnFetchTrigger",
    depose = 'onDepose'
)
public class MyObject {
    ...

對於上面的例子,可以讓MyObject 有一個函數 init 來處理創建時的事件,有一個函數 onDepose 來處理註銷時的事件。當然這兩個函數不能是靜態的, 也不能有任何參數。 

如果要注入的字段在超類怎麼辦

@IocBean(fields={"dao"})
public AbcService extends Service {
    ...

上例,AbcService 從 Service 繼承,但是 Serivce 有一個私有字段爲 "private Dao dao", 可以通過 @IocBean 註解提供 fields 屬性,描述你要注入超類那個字段,比如上面的例子,爲超類的 "dao" 字段注入一個名爲 "dao" 容器對象。 

 

@Inject註解

爲對象的字段注入,AnnotationIocLoader 根據這個註解來了解類中的字段,具體的注入方式。

@IocBean
public class MyObject {
    
    @Inject("daoSlave") // 等價於 refer:daoSlave
    private Dao dao;
    
    @Inject("refer:another")
    private AnotherObject obj;
    
    @Inject // 先按名字找,然後按類型找
    private UserService users;
    
    ...

下面是一個列表

@Inject("refer:objName") 注入容器其他對象的引用
@Inject("refer:$ioc") 容器自身
@Inject("refer:$Name") 對象的名稱,即你在 @InjectName 或者 @IocBean 裏聲明的 name
@Inject("refer:$Context") 容器上下文
@Inject("env:JAVA_HOME") 系統環境變量
@Inject("sys:user.home") 虛擬機屬性
@Inject("jndi:jndiName") JNDI 資源
@Inject("file:/home/zzh/abc.txt") 文件對象
@Inject("java:com.my.SomeClass.staticPropertyName") 調用某 JAVA 類的靜態屬性
@Inject("java:com.my.SomeClass.someFunc") 調用某 JAVA 類的靜態函數
@Inject("java:com.my.SomeClass.someFunc("p1",true)") 調用某 JAVA 類的帶參數的靜態函數
@Inject("java:$xh") 獲得容器對象 xh ,相當於 "refer:xh"
@Inject("java:$xh.name") 容器對象某個屬性
@Inject("java:$xh.getXXX()") 容器對象某個方法的返回值
@Inject("$xh.getXXX("some string", true, 34)") 容器對象某個方法的返回值

二、Dao

創建 POJO

在 Java 項目中建立一個POJO,比如 com.zzh.demo.Person :

import org.nutz.dao.entity.annotation.*;

@Table("t_person")   // 聲明瞭Person對象的數據表
public class Person { // 不會強制要求繼承某個類

    @Id       // 表示該字段爲數值主鍵,且是一個自增長的Id,注意,是數據庫表中自增!!
    private int id; // @Id與屬性名稱id沒有對應關係.

    @Name    // 表示該字段是字符型主鍵,或者是唯一性約束
    private String name;

    @Column      // 表示該對象屬性可以映射到數據庫裏作爲一個字段
    private int age;

    // 省略getter/setter
}

參考文檔:http://www.nutzam.com/core/nutz_preface.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章