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

发布了25 篇原创文章 · 获赞 6 · 访问量 7549

猜你喜欢

转载自blog.csdn.net/B_G_boy/article/details/103343629