`
gevin
  • 浏览: 40883 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在Nutz中使用Ioc-Annotation的入门教程

    博客分类:
  • Nutz
 
阅读更多

接触Nutz已经有很久了,从1.a.15就开始关注,至今也用Nutz做了几个项目,由于工作较忙,因此都没空写学习心得。惭愧的是一直没空去研究源码!!

 

今天心血来潮,测试了Ioc-Annotation,觉得挺方便的,由于Nutz提供了几种注入的配置方式(JS、XML、Annotation),因Nutz最开始是只支持JS配置,所以之前做的项目都是使用JS配置。但经常会忘了在JS配置文件加入注入的对象,经常获取到NULL值。

 

因在Spring-MVC中经常用注解,所以今天就抽空试了下Nutz的注解方式。还挺给力的!!!哈哈~~

 

好了,正奔主题!!

 

 

Nutz版本:1.b.38

数据库:MySQL

 

 

一、创建数据库

 CREATE TABLE `articleinfo` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) DEFAULT NULL,
  `content` text,
  `addDate` datetime DEFAULT NULL,
  `addIp` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

 

-- ----------------------------
-- Records of articleinfo
-- ----------------------------
INSERT INTO `articleinfo` VALUES ('1', '关于Nutz的Ioc-Annotation测试', '关于Nutz的Ioc-Annotation测试\r\n', '2011-07-23 21:42:43', '127.0.0.1');
INSERT INTO `articleinfo` VALUES ('2', 'Ioc-Annotation测试例子', 'Ioc-Annotation测试例子', '2011-07-23 21:44:16', '127.0.0.1');
INSERT INTO `articleinfo` VALUES ('3', '哈哈,成功了吧!', '哈哈,成功了吧!', '2011-07-23 21:44:40', '127.0.0.1');

 

 

二、例子使用的Jar包


 

三、结构图

 

 

 四、代码

1、首先配置Web.xml,配置Nutz的主模块。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>TestIocAnnotation</display-name>

	<filter>
		<filter-name>nutz</filter-name>
		<filter-class>org.nutz.mvc.NutFilter</filter-class>
		<init-param>
			<param-name>modules</param-name>
			<param-value>demo.nutz.setup.MainModule</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>nutz</filter-name>
		<url-pattern>*.shtml</url-pattern>
	</filter-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

</web-app>

 

 

2、创建主模块类MainModule.java

package demo.nutz.setup;

import org.nutz.mvc.annotation.IocBy;
import org.nutz.mvc.annotation.Modules;
import org.nutz.mvc.annotation.SetupBy;
import org.nutz.mvc.ioc.provider.ComboIocProvider;

import demo.nutz.action.ArticleInfoAction;

/**
 * 主模块
 *
 * @author gevin(gevinhjy@foxmail.com)
 *
 */
@Modules(value = ArticleInfoAction.class, scanPackage = true)
@IocBy(type = ComboIocProvider.class, args = {
	"*org.nutz.ioc.loader.json.JsonLoader", "ioc/dao.js", 
	"*org.nutz.ioc.loader.annotation.AnnotationIocLoader", "demo.nutz"})
@SetupBy(NutzSetup.class)
public class MainModule {

}

 由于使用了两种注入的配置方式,因此此处使用了Ioc复合加载器ComboIocProvider。

1)使用"*org.nutz.ioc.loader.json.JsonLoader", "ioc/dao.js"加载JS文件,dao.js中配置了数据源对象和dao对象的注入,貌似听“Wendal-兽”说无法用注解来配置,只能用配置文件。

2)使用"*org.nutz.ioc.loader.annotation.AnnotationIocLoader", "demo.nutz"来自动加载包demo.nutz或其子包中被@IocBean注解过的类。

3)@Modules(value = ArticleInfoAction.class, scanPackage = true) 用来告诉Nutz自动去扫描ArticleInfoAction.class所在包的所有类,如果有类包括了一个以上的入口函数将被认为是模块类。

 

 

3、“ioc/dao.js”文件

/*
 * 本配置文件声明了整个应用的数据库连接部分。
 */
var ioc = {
	/*
	 * 数据库连接池
	 */
	dataSource : {
		type : "com.mchange.v2.c3p0.ComboPooledDataSource",
		fields : {
			driverClass : "com.mysql.jdbc.Driver",
			jdbcUrl : "jdbc:mysql://127.0.0.1/nutzdemo",
			user : "root",
			password : "123456"
		} 
	},
	/*
	 * 这个配置很好理解, args 表示这个对象构造函数的参数。显然,下面的注入方式将调用 new NutDao(dataSource)
	 */
	dao : {
		type : "org.nutz.dao.impl.NutDao",
		args : [ {
			refer : "dataSource"
		} ]
	}
};

 

 

4、建立一个与上面数据库表ArticleInfo对应的Model类ArticleInfo.java

package demo.nutz.model;

import java.util.Date;

import org.nutz.dao.entity.annotation.Id;
import org.nutz.dao.entity.annotation.Table;

/**
 * 文章类
 * 
 * @author gevin(gevinhjy@foxmail.com)
 * 
 */
@Table("ArticleInfo")
public class ArticleInfo {

	@Id
	private int id;
	private String title;
	private String content;
	private Date addDate;
	private String addIp;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public Date getAddDate() {
		return addDate;
	}

	public void setAddDate(Date addDate) {
		this.addDate = addDate;
	}

	public String getAddIp() {
		return addIp;
	}

	public void setAddIp(String addIp) {
		this.addIp = addIp;
	}

}

  其中@Table注解指定对应的数据库表名称,@Id注解指定主键为字段id,整型,并且默认是自增1

 

 

5、业务处理类ArticleInfoService.java

package demo.nutz.service;

import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.service.IdEntityService;

import demo.nutz.model.ArticleInfo;

/**
 * 业务层
 *
 * @author gevin(gevinhjy@foxmail.com)
 *
 */
@IocBean(args = { "refer:dao" })
public class ArticleInfoService extends IdEntityService<ArticleInfo> {

	public ArticleInfoService() {
		super();
	}

	public ArticleInfoService(Dao dao, Class<ArticleInfo> entityType) {
		super(dao, entityType);
	}

	public ArticleInfoService(Dao dao) {
		super(dao);
	}

}

 1)由于主键是整型,因此此处是继承IdEntityService

2)此处最重要的是@IocBean(args = { "refer:dao" })这句话,等同于

@IocBean( name = "articleInfoService", args = { "refer:dao" })

使用@IocBean,若没有指定属性name的值,则默认为类名首字母小写。

 3)args = { "refer:dao" })指定构造函数所要注入的对象,由于ArticleInfoService要使用到dao对象,因此此处不要忘了带参数。

 

 

 

6、子模块 ArticleInfoAction.java

(哈哈,可能有些人看完Nutz手册,也没有看到以Action结尾的类名,个人习惯吧,因为之前用惯了SSH,觉得那样命名也挺好的,所以就搬过来了。按Nutz的推荐命名应该是ArticleInfoModule.java吧!你懂的啦!)

package demo.nutz.action;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.nutz.dao.Cnd;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;

import demo.nutz.model.ArticleInfo;
import demo.nutz.service.ArticleInfoService;

/**
 * 文章模块
 *
 * @author gevin(gevinhjy@foxmail.com)
 *
 */
@IocBean
@At("/articleinfo")
public class ArticleInfoAction {

	@Inject
	private ArticleInfoService articleInfoService;
	
	/**
	 * 获取文章列表
	 * 
	 * @return
	 */
	@At("/showArticleInfoList")
	@Ok("jsp:/articleinfo/showArticleInfoList")
	public Map<String, Object> showArticleInfoList() {
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			// 获取文章列表
			List<ArticleInfo> aiList = this.articleInfoService.query(Cnd.orderBy().desc("addDate"), null);
			map.put("articleInfoList", aiList);
			
			return map;
		} catch (Exception e) {
			e.printStackTrace();
			map.put("msg", "getFailure");
			return map;
		}
	}
}

  首先用@IocBean声明该类可被注入,然后用@Inject标明需要注入的属性。 

 

 

7、JSP文件articleinfo/showArticleInfoList.shtml,使用了JSTL,所以大家在加包时记得加。

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ taglib uri="/WEB-INF/tld/c-1_0-rt.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/tld/fmt-1_0-rt.tld" prefix="fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>显示文章列表</title>
</head>

<body>
<div>
    <ul>
        <c:forEach var="ai" items="${obj.articleInfoList}">
        	<li><c:out value="${ai.title}" />(<fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${ai.addDate}" />)</li>
        </c:forEach>
    </ul>
</div>
</body>
</html>

 

 

8、OK了,所有文件都配置好了,我们重启Tomcat,访问以下测试地址。

http://localhost:204/TestIocAnnotation/articleinfo/showArticleInfoList.shtml

 

效果图:


 

---------------------------------------------------------------------------------------------------------------------------

第一次在Javaeye上写学习心得,还蛮花时间的。以后有空再继续写了!!

不过,Nutz挺给力的!!!!!最后附上整个例子的源代码,希望对大家有帮助了!

 

 

  • 大小: 43 KB
  • 大小: 9.4 KB
  • 大小: 37.1 KB
分享到:
评论
5 楼 lIO01 2016-03-04  
年轻人,需要你理解的东西还很多
4 楼 wuyuetiank 2015-05-27  
  
3 楼 细胞vs宇宙 2011-09-01  
开始研究nutz。ioc这一块还是蛮复杂的。
2 楼 gevin 2011-07-24  
wendal 写道
呵呵,不错,挺详细的

如果用上@Inject就更好了

呵呵,已经有用到了,在ArticleInfoAction.java中用到了。
@Inject  
private ArticleInfoService articleInfoService;
1 楼 wendal 2011-07-24  
呵呵,不错,挺详细的

如果用上@Inject就更好了

相关推荐

    nutz简单综合实例----通过html网页对数据库进行管理操作(MVC,Ioc,Dao)

    在Nutz中,IoC容器负责对象的创建和管理,使得开发者可以声明依赖关系,而不是在代码中直接实例化对象。这样提高了代码的可测试性和可维护性。 DAO层是数据库操作的接口,它封装了SQL查询和其他数据库交互逻辑。在...

    nutz需要的jar包

    此外,`nutz-ioc`和`nutz-aop`分别提供了依赖注入和面向切面编程的支持,增强了代码的可维护性和灵活性。 Nutz还提供了其他一些辅助性的jar包,例如`nutz-anno`包含了许多注解,简化了代码编写;`nutz-log`提供了...

    nutz.ar包---框架

    Web开发框架,java,提供Ioc,Aop,el等机制;

    nutz初使用之MVC HelloWorld (netbeans jsp版)

    在本文中,我们将深入探讨如何使用Nutz框架创建一个简单的MVC(Model-View-Controller)应用程序,以“HelloWorld”为例。Nutz是一个轻量级的Java开发框架,它提供了全面的MVC支持,使得开发者能够高效地构建Web应用...

    nutz-1.b.52.zip

    如果你觉得在多个服务器部署或者修改 Spring 配置文件很麻烦,Nutz.Ioc 专为你设计 如果你觉得直接写 XML 配置文件很麻烦,可视化编辑器又没控制感,Nutz.Mvc 专为你设计 如果你觉得 JSON 转换很麻烦(要写超过一行...

    高效,小巧的开源JAVA WEB 开发框架-Nutz (源码,开发文档)

    Nutz 的原则性目标 为最大限度的提高 Web 程序员的生产力,Nutz 必须具备如下特性: 提供 SSH 大部分功能 ...我会尽可能的注意任何渠道给我的反馈,任何有助于简化 Nutz 使用的想法,都会被我认真评估

    nutz-1.r.61-发布包

    在开发项目时,将此jar文件添加到项目的类路径中,就可以使用Nutz提供的各种服务和功能。 4. **Nutz-1.r.61-sources.jar** 这个文件提供了Nutz 1.r.61版本的源代码,对于开发者来说,这是一个宝贵的资源,可以深入...

    Nutz框架文档

    活 -- 各个部分可以独立使用,比如在 Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等 整 -- 它所有功能均不依赖第三方 jar 文件。 这就意味着:如果一个 Web 应用,你在 WEB-INF/lib 下只 需要...

    nutz框架使用手册.zip

    在"nutz框架使用手册.zip"中,我们可以预期找到关于Nutz框架全面的学习资源,从基础概念到高级用法,帮助开发者从零开始掌握Nutz平台的开发技能。手册可能包含以下主要知识点: 1. **Nutz IOC**:Nutz IOC是Nutz...

    nutz-1.r.58

    "nutz-1.r.58"是一个特定版本的Nutz框架发布包,包含了该框架的各种组件和文档,便于开发者在项目中使用和学习。 在提供的文件列表中,我们有以下内容: 1. `nutz-1.r.58-javadoc.jar`:这是Nutz框架的API文档,...

    nutz-1.b.48-manual.pdf 文档

    Nutz的设计目的之一是解决Java在Web开发领域相对于脚本语言而言显得开发效率较低的问题,通过提供一整套简洁、高效的组件和工具,如Dao、Ioc、Mvc、Json、Castors、Lang、Aop、Plugin和Resource,它们独立使用且功能...

    Nutz-1.b.38

    Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等整 -- 它所有功能均不依赖第三方 jar 文件。这就意味着:如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 就够了当然你要使用其它...

    Nutz的插件与集成库-nutzmore

    如果你在使用Nutz的过程中遇到了特定的需求,不妨查看Nutzmore,很可能你会发现解决问题的利器。由于GitHub下载速度问题,你可以通过提供的备份压缩包获取Nutzmore的资源,以确保能顺利地使用这些优秀的插件和集成库...

    nutz-1.b.49-manual.pdf

    - 如果开发中使用Hibernate觉得过于繁琐,或使用iBatis编写SQL感到不便,Nutz.Dao能提供专门设计的解决方案。 - 对于不习惯使用Spring或不愿意直接写XML配置的用户,Nutz.Ioc提供了简化配置的方案。 - 针对编写...

    nutz-1.b.43-jdk5.jar

    nutz-1.b.43-jdk5.jar 资源包

    wendal-nutz-master.zip

    在压缩包“wendal-nutz-master.zip”中,你可能会找到以下内容: - 项目结构:通常包括src/main/java目录下的源码,src/main/resources下的配置文件,以及pom.xml或build.gradle构建文件。 - 源码:展示了如何使用...

    nutz-wechat-app-master.zip

    我们的小程序源码功能多样,涵盖社交、电商等领域。高度定制化,轻松打造专属风格。用户体验佳,界面美观操作便捷。安全可靠,保障数据与运行稳定。适合创业者、企业和开发者。提供技术支持与文档说明。...

    Nutz 例子,从mvc ioc 到数据插入

    在Nutz中,你可以使用`@IocBean`注解标记一个类为IOC容器中的bean,这样就可以在其他类中通过依赖注入来使用它。这种方式降低了类之间的耦合度,提高了代码的灵活性和可测试性。 关于数据插入,Nutz提供了一个强大...

Global site tag (gtag.js) - Google Analytics