当前位置:文档之家› J2EE课程设计《技术应用指导》——第2 章 Java反射和代理技术及应用(第2部分)

J2EE课程设计《技术应用指导》——第2 章 Java反射和代理技术及应用(第2部分)

J2EE课程设计《技术应用指导》——第2 章 Java反射和代理技术及应用(第2部分)
J2EE课程设计《技术应用指导》——第2 章 Java反射和代理技术及应用(第2部分)

第2 章Java反射和代理技术及应用(第2/2部分)

1.1Java反射技术在项目开发中的应用示例

Spring AOP使用了两种代理机制:基于JDK的动态代理和基于CGLib的动态代理。当然,在Spring AOP中之所以需要应用两种代理机制,主要是因为JDK中的动态代理只提供基于接口的代理实现,不支持对具体类(没有接口实现的功能类)的代理——此时,读者需要应用CGLib的动态代理的字节码的类库技术。而在这两种动态代理技术的具体实现中都应用了Java中的反射技术。

1.1.1利用Java反射技术实现可配置化的工厂类

1、工厂设计模式及在应用中所存在的主要缺点

(1)GOF工厂设计模式及代码实现的示例

在GOF的设计模式的分类划分中,把与实现对象的实例化相关的各种模式称之为“创建型模式”——其中的工厂模式为创建型模式中的一种形式,应用工厂模式的主要目的是希望达到将创建对象实例的职责与使用该对象实例的职责相互分离的设计目标。下面的【例2-10】、【例2-11】和【例2-12】为一个工厂模式的完整示例的实现代码。

其中的Product抽象类代表工厂模式中的产品接口,在其中定义有产品功能类需要具体完成的功能方法makeFunction;分别在该Product抽象类的基础上,派生出两个不同的具体产品类SomeOneProduct和AnotherOneProduct;在工厂类ProductFactory中根据请求者的需要分别实例化出SomeOneProduct和AnotherOneProduct类的对象实例。

【例2-10】工厂模式中的抽象产品接口的代码示例

public abstract class Product{

public abstract void makeFunction();

}

【例2-11】工厂模式中的具体产品类的代码示例

public class SomeOneProduct extends Product{

public void makeFunction(){

}

}

public class AnotherOneProduct extends Product{

public void makeFunction(){

}

}

【例2-12】工厂模式中的工厂类的代码示例

public class ProductFactory{

public static final int SomeOne_Product =1;

public static final int AnotherOne_Product =2;

public static Product creatorProduct(int productKind){

if (productKind == SomeOne_Product){

return new SomeOneProduct();

}

else if (productKind == AnotherOne_Product){

return new AnotherOneProduct();

}

}

}

(2)工厂设计模式及在应用中所存在的主要缺点

●除非重新编译,否则无法对某个产品的实现类进行替换

因为在工厂模式中是将具体的产品类的类名直接写在工厂类的代码中,请见上面【例2-12】中的黑体所标识的代码——如果需要将SomeOneProduct类改变为其他的类名称,读者则必须要修改工厂类ProductFactory中的有关的程序代码。

●无法透明地为不同产品组件提供多个不同的实现

在【例2-11】中的代码示例中,提供了两个不同的产品实现类,如果还需要第三种产品的实现类,如何添加到系统中呢?此时,读者也必须要修改相关的程序代码!

●无法简单地进行切换产品对象实例产生的模型——单例或者原形

在【例2-12】中的工厂类ProductFactory的功能实现代码中,目前的对象创建方式是原形方式——每次请求都创建出一个对象实例。如果需要创建出单例类型的对象实例,应该怎么办?当然,读者也只好修改工厂类ProductFactory中的有关的实现代码。

2、利用反射技术实现可配置化的工厂类的基本思路

(1)利用反射技术动态地加载目标产品类

为了避免将目标产品类的名称直接包含在工厂类中,有必要将产品类名称放在配置文件中——比如,采用属性配置文件或者XML配置文件。当产品类名称发生变化时,只需要修改该配置文件中的产品类名称的配置项目的值,而工厂类程序本身并不需要被动地修改。

在下面的【例2-13】中的可配置化的工厂类的newUserManageDAOBean方法中,接收一个代表目标产品类名称的参数,并动态地加载该目标类而产生出一个对目标类的包装类Class的对象实例oneClass。

【例2-13】利用反射技术动态地加载目标产品类的代码示例

package com.px1987.webbank.factory;

import com.px1987.webbank.config.ClassNameConfig;

import https://www.doczj.com/doc/494819712.html,erManageDAOInterface;

import com.px1987.webbank.exception.WebBankException;

public class UserManageDAOFactory {

public UserManageDAOInterface newUserManageDAOBean(

String someOneDAOClassName) throws WebBankException{

UserManageDAOInterface oneUserManageDAOJDBCImple=null;

Class oneClass=null;

try {

oneClass = Class.forName(someOneDAOClassName);

}

catch (ClassNotFoundException e){

throw new WebBankException("不能正确地获得"+

someOneDAOClassName+"类");

}

}

}

(2)利用反射技术动态地创建产品类的对象实例

一旦将具体的产品类名称从工厂类中分离后,则必须要能够动态地获得产品类的名称、并依据所接收的产品类名称动态地创建出该产品类的对象实例。

在下面的【例2-14】中的可配置化工厂类的newUserManageDAOBean方法中根据在【例

2-13】中动态加载后的结果oneClass对象,利用Class类中的newInstance方法动态地创建出产品类的对象实例。

【例2-14】利用反射技术动态地创建产品类的对象实例的代码示例

package com.px1987.webbank.factory;

import com.px1987.webbank.config.ClassNameConfig;

import https://www.doczj.com/doc/494819712.html,erManageDAOInterface;

import com.px1987.webbank.exception.WebBankException;

public class UserManageDAOFactory {

public UserManageDAOInterface newUserManageDAOBean(

String someOneDAOClassName) throws WebBankException{

/* 【例2-13】中的代码在此省略,不再重复地附录出 */

try {

oneUserManageDAOJDBCImple =

(UserManageDAOInterface)oneClass.newInstance();

}

catch (InstantiationException e){

throw new WebBankException("不能正确地创建"+

someOneDAOClassName+"类的对象实例");

}

catch (IllegalAccessException e){

throw new WebBankException("不能正确地创建"+

someOneDAOClassName+"类的对象实例");

}

return oneUserManageDAOJDBCImple;

}

}

3、利用反射技术实现可配置化的工厂类的代码示例

(1)定义一个属性配置文件

作者在银行账户信息管理系统中设计了一个classNameConfig.properties属性配置文件,在该配置文件中定义出系统中所需要的各个产品类——它们分别代表系统中的各个业务功

能实现类。下图2.11所示为该属性配置文件中的部分内容的局部截图,该属性文件放在应用系统中的WEB-INF/classes目录中。

图2.11 属性配置文件中的内容局部截图

在该属性配置文件中有一个下面的属性项目:

userManageDAOJDBCImple.className=

https://www.doczj.com/doc/494819712.html,erManageDAOJDBC_MySQLImple 该属性项目的基本含义是采用userManageDAOJDBCImple.className属性代表系统中的一个DAO组件的类名称https://www.doczj.com/doc/494819712.html,erManageDAOJDBC_MySQLImple,在程序代码中利用属性名动态地获得该DAO组件的类名、并创建出该DAO组件的对象实例和动态地调用该DAO组件中的功能方法。

(2)设计一个对属性配置文件进行解析的功能类

作者在下面的【例2-15】的代码示例中,利用静态语句块在该类被加载时动态地获得属性配置文件classNameConfig.properties中的各个属性项目,并一次性加载和保存在一个Properties类的对象中。

同时也还提供一个getProperty方法向外界程序提供访问属性项目的功能接口,按照指定的属性名称获得对应的属性项目的值。最终的功能实现的程序代码请见下面的【例2-15】中的代码示例。

【例2-15】对图2.11中的属性配置文件进行解析的程序代码示例

package com.px1987.webbank.config;

import java.util.Properties;

import java.io.*;

public class ClassNameConfig {

private static Properties props=null;

static {

props= new Properties();

try{

InputStream input=ClassNameConfig.class.

getResourceAsStream("/classNameConfig.properties");

props.load(input);

}catch(Exception e){

e.printStackTrace();

}

}

public static String getProperty(String propName){

return props.getProperty(propName);

}

public static void setProperty(String propName,String propValue){

props.setProperty(propName, propValue);

}

}

作者为了节省本书的篇幅,【例2-15】中所附录的程序代码是简化后的结果。请读者参考本书第一章“Java集合和泛型技术及应用”中的1.1.6 小节“Hashtable的子类Properties 属性类及应用”的有关内容,全面地学习和掌握Properties属性类的编程应用。

(3)设计一个可配置化的工厂类

下面的【例2-16】中的代码示例其实是【例2-13】和【例2-14】中的程序代码的完整组合,最终实现了可配置化的工厂类的功能——最终实现了将目标产品类从工厂类中彻底地分离出,并放在属性配置文件中。

【例2-16】可配置化的工厂类的代码示例

package com.px1987.webbank.factory;

import com.px1987.webbank.config.ClassNameConfig;

import com.px1987.webbank.exception.WebBankException;

import https://www.doczj.com/doc/494819712.html,erInfoManageInterface;

public class UserInfoManageFactory{

public UserInfoManageInterface newUserInfoManageBean(

String someOneDAOClassName) throws WebBankException{

UserInfoManageInterface oneUserInfoManageImple=null;

Class oneClass=null;

try {

oneClass = Class.forName(someOneDAOClassName);

}

catch (ClassNotFoundException e){

throw new WebBankException("不能正确地获得"+

someOneDAOClassName+"类");

}

try {

oneUserInfoManageImple =(UserInfoManageInterface)oneClass.newInstance();

}

catch (InstantiationException e){

throw new WebBankException("不能正确地创建"+

someOneDAOClassName +"类的对象实例");

}

catch (IllegalAccessException e){

throw new WebBankException("不能正确地创建"+

someOneDAOClassName +"类的对象实例");

}

return oneUserInfoManageImple;

}

}

可配置化的工厂类有利于产品类的功能扩展,并且当产品功能类的业务逻辑发生变化时,并不需要修改工厂类的程序代码。读者如果对配置化的工厂类进一步完善——将属性配置文件改变为XML配置文件、并利用XML解析的技术(如SAX或者JDom——请参考本书的第6章“XML解析技术及在项目开发中的应用”中的有关内容)获得使用者在XML 配置文件中的目标产品类的名称信息,最后再动态地创建出该目标功能类的对象实例——Spring 框架的控制反转技术(IoC)的基本原型系统将得以实现。

1.1.2基于反射技术实现动态代理模式

1、Java语言中的动态代理技术

(1)经典GoF设计模式中的代理模式是静态代理实现技术

GoF设计模式中的代理模式能够分离业务服务的请求者和业务服务的提供者的功能实现的程序代码,但代理对象的一个接口只服务于一种类型的业务功能实现类,如果要代理的业务功能实现类很多时,开发人员势必要为每个具体的业务功能类提供不同的代理类的定义。因此,静态代理模式在有多种不同形式的业务功能类都需要代理时就必定无法胜任。(2)Java语言中的动态代理技术

动态代理技术完全抽象了代理行为、并能够产生出通用功能的代理——代理的目标对象可变、代理的目标接口可变和代理的目标方式也允许可变——动态代理类可以实现不同的业务接口,并且可以在运行时决定某个代理类的实例具体对哪个接口的实现类进行代理,还可以实现对特有的调用方法进行拦截、并控制对该方法的调用过程。

动态代理技术目前被广泛地应用在各种开源轻量级框架的实现中,动态代理技术尽管具有较好的灵活性,但会对应用系统的运行性能有所影响——读者在项目开发中必须合理地权衡利弊。Sun公司在JDK 1.3之后的版本中,增加了对动态代理功能进行支持的有关的系统库。在项目开发中如果灵活地应用动态代理技术可以使得一个动态代理类能够服务于各个不同的被代理类的对象。

(3)应用动态代理技术所体现出的主要优点

由于动态代理类的字节码是在程序运行时依据Java反射机制而动态生成的,无需开发人员编程各个不同的代理类的程序代码。动态代理技术不仅简化了读者的编程工作量,而且也提高了应用系统的功能实现程序的可扩展性——因为借助于反射技术,Java运行系统程序可以生成任意类型的动态代理类的对象实例。

2、与动态代理技术实现有关的系统API

与动态代理技术实现有关的系统API主要都定义在https://www.doczj.com/doc/494819712.html,ng.reflect包中,主要涉及到如下的接口和对应的功能类。

(1)InvocationHandler接口

在该接口中仅定义了一个方法:invoke(Object obj,Method method, Object[] args)。其中的第一个参数obj是指目标代理类的对象实例,而第二个参数method是被代理的目标方法,第三个参数代表被代理的目标方法的各个参数(由于目标方法有可能有多个参数)。

InvocationHandler接口用来约束代理类的编程实现,动态代理类必须要实现该接口,并在实现类的invoke方法中完成其具体的代理功能的最终实现。

(2)Proxy类

该类代表动态代理类,在该类中主要包含有下面的成员方法:

1)protected Proxy(InvocationHandler h):构造方法;

2)static Class getProxyClass (ClassLoader loader, Class[] interfaces):获得一个代理类,

其中的第一个参数loader是类装载器,而第二个参数interfaces是被代理的类所拥有的全部接口的数组。

但目前的Java动态代理技术只是针对提供有接口的实现类进行动态代理——也就是要求被代理的目标功能类要实现某个接口。

3、动态代理技术实现的代码示例

在银行账户信息管理系统中需要为系统中的各个业务功能类中的业务方法提供日志记录功能,但为了避免直接将日志功能实现的代码与具体的业务功能实现类本身的实现代码混杂在一起,计划采用代理模式为各个业务功能类提供日志记录的功能代理——但由于考虑到系统中的业务功能类有多个、而且每个业务功能类所实现的业务接口也不相同,如果采用常规的静态代理模式实现这个功能将不可避免地会出现多个代理类、并且会重复地编程实现。

作者最终决定在项目中采用动态代理技术,下面为读者介绍动态代理技术的具体实现及有关的代码示例。在下面的【例2-17】到【例2-20】中的各个代码示例,为本功能的具体实现的程序。但为了节省本书的篇幅,作者对具体功能实现的程序代码进行了简化、并除掉了无关的细节实现的功能代码没有附录出。

(1)定义业务组件的功能接口

下面的【例2-17】中的代码示例,是代表用户信息管理的业务功能接口的定义,其中声明了两个不同的功能处理方法。

【例2-17】某个业务组件的功能接口定义的代码示例

package com.px1987.webbank.model;

public interface UserManageInterface{

public boolean doUserLogin(String userName, String userPassWord);

public boolean doUserLogout(String userName);

}

(2)为该业务组件接口提供一个具体的实现类

下面的【例2-18】中的程序代码是对【例2-17】中定义的业务组件的功能接口的具体实现类,但为了简化程序代码,除掉了真正的功能实现代码而改用System.out.println()打印输出语句作为替代。

【例2-18】业务组件接口的具体实现类的代码示例

package com.px1987.webbank.model;

public class UserManageImplement implements UserManageInterface{

public boolean doUserLogin(String userName, String userPassWord){

System.out.println("userName=" + userName +"正在登录系统!");

return true; //上面的语句替真正的业务功能的实现

}

public boolean doUserLogout(String userName){

System.out.println("userName=" + userName +"正在注销!");

return true; //上面的语句替真正的业务功能的实现

}

}

(3)动态代理类的代码示例

为【例2-18】中的业务功能实现类及【例2-17】中的业务接口设计一个动态代理类,根据动态代理技术实现的基本要求——该动态代理类必须要实现InvocationHandler接口,并重写该接口中的invoke方法,在该invoke方法中完成日志记录的代理功能实现。最终的程序代码请见下面的【例2-19】中的代码示例。

【例2-19】动态代理类的程序代码示例

package com.px1987.webbank.model;

import https://www.doczj.com/doc/494819712.html,ng.reflect.*;

import java.util.logging.*;

public class WebBankLogHandler implements InvocationHandler{

private Logger logger = Logger.getLogger(this.getClass().getName());

private Object delegate;

public Object bind(Object delegate){

this.delegate = delegate; //获得被代理的类,并动态地创建出它的对象实例

return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),

delegate.getClass().getInterfaces(), this);

}

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable{

Object result = null;

try{ //下面的代码实现在目标方法的执行前、后附加日志记录功能的实现logger.log(https://www.doczj.com/doc/494819712.html,, "方法开始执行..." + method);

result = method.invoke(delegate, args); //利用反射技术动态地访问被代理的方法

logger.log(https://www.doczj.com/doc/494819712.html,, "方法已经结束..." + method);

}

catch (Exception e){

logger.log(https://www.doczj.com/doc/494819712.html,, e.toString());

}

return result;

}

}

作者在【例2-19】中的代码示例内利用了JDK中所提供的日志功能API实现本系统中的日志处理功能,当然读者也可以改用其他的日志记录的实现技术——如Log4J或者Commons Logger组件等。

(4)提供一个应用程序的测试类

在该测试类中,借助于动态代理类中的bind方法,将此时实际被代理的具体类的对象实例与动态代理类的对象实例相互绑定在一起——也就是最终决定被代理的目标类。然后再通过动态代理类的对象实例为客户端程序提供对业务功能方法的代理服务。最终的功能实现的程序代码请见下面的【例2-20】所示。

【例2-20】对动态代理类的功能进行测试的代码示例

package com.px1987.webbank.test;

import com.px1987.webbank.model.*;

public class TestUserManageImplement{

public TestUserManageImplement (){

WebBankLogHandler webBankLogHandler = new WebBankLogHandler();

UserManageInterface userManageProxy=(UserManageInterface)

webBankLogHandler.bind(new UserManageImplement());

userManageProxy.doUserLogin("张三","12345678");

}

public static void main(String[] args){

new TestUserManageImplement();

}

}

【例2-20】中的测试程序在Eclipse开发工具中的执行结果请见下图2.12所示,在业务功能方法的执行之前和执行之后都正常地产生了日志记录信息。但日志记录的功能实现代码并没有直接藕合在业务功能类中,达到了分离核心关注点和横切关注点的设计目标。

图2.12 【例2-20】中的测试程序在Eclipse开发工具中的执行结果的局部截图因此,通过动态代理这种技术实现方式,能够使得代理组件类不再服务于特定类型的对象的接口、并也能够达到核心关注点和横切关注点相互分离的设计目标——这也是Spring 框架中的AOP技术实现的原型。

但动态代理技术在实际项目开发中所体现出的主要问题是编程实现方式相对比较复杂、而且程序代码的可读性比较低。但读者如果在项目开发中,应用Spring 框架中的AOP 技术中的Around类型的通知来实现,则能够简化功能实现的程序代码、同时也能够达到动态代理技术类似的编程效果——因此,“反射”+“动态代理”是Spring 框架AOP技术实现的核心。

读者系统地学习和掌握Java语言中的反射和动态代理等相关的编程实现技术,能够更好地理解目前在J2EE系统平台中所出现的各种开源框架的实现原理、工作机制等。

1.2反射技术在各种开源框架和组件中的应用

目前在J2EE系统平台中的各种主流的开源框架的系统实现中,都大量地应用了反射技术自动地为框架的使用者提供各种形式的功能服务,也使得应用系统本身不再直接藕合有框架的系统API,提高了应用系统本身在应用框架技术时的可移植性和可扩展性。

作者在下文为读者介绍Java反射技术在各种主流的J2EE开源框架中的应用,让读者对反射技术在项目开发中的具体应用有一个直观的了解。

1.2.1反射技术在Struts2框架中的应用

1、Struts2框架中的业务功能控制器Action类及编程应用

(1)业务控制器Action组件类主要的技术特性

不再与J2EE Servlet容器紧密藕合,从而保证了Action类可以采用POJO类型的普通JavaBean组件技术实现。哪它是如何达到不再与J2EE Servlet容器紧密藕合的设计目标?在Struts 2框架中主要应用了ActionProxy代理类实现隔离Action组件对Servlet容器的具体依赖——代理类的主要作用是为其他对象提供一种代理以控制对这个对象的访问,而代理类的对象实例可以在客户端和目标对象之间起到一个中介的作用。

(2)代理类的技术实现是应用Java语言中的动态代理技术的实现方案

由于应用系统中的具体业务控制器Action类是多样化的功能实现,因此在Struts 2框架中的代理类的技术实现是应用Java语言中的动态代理技术实现方案。在Action类的具体编程实现方面,要求每个Action类都应该要提供一个Action类默认的方法入口execute 方法,Struts2框架中的代理类将使用反射技术自动地寻找目标Action类中的execute方法。

2、在Struts 2框架中提供的多种形式的拦截器组件中也大量地应用反射技术

(1)Struts 2框架是如何为各个Action类提供关联的表单中的属性参数

但应用了ActionProxy代理类这样的设计方案后所带来的问题是,开发人员实现的业务控制器Action组件类显然自身是无法直接获得和处理客户端发送的HTTP请求——因为无法获得请求中的各个参数。

为此,在Struts 2框架中提供了对应的拦截器组件,该系列拦截器组件主要负责将HTTP 请求中所包装的各种请求参数解析出来(它们都包装在HttpServletRequest对象中),并以成员属性的方式传入到开发人员自己实现的业务控制器Action组件类中——也就是利

用反射技术动态地对Action组件类中的setXXX()属性访问方法进行调用。

(2)Struts 2框架中的拦截器组件技术的实现原理

Struts 2框架中的拦截器组件技术的工作原理其实也很简单,当某个HTTP请求到达前端控制器FilterDispatcher组件时,Struts 2框架运行时系统程序会首先查找有关的配置文件(一般为struts.xml文件),并根据在配置文件中所定义的各个拦截器组件类、实例化相应的拦截器组件对象,然后串成一个列表(放在List集合中)——也就产生了拦截

器链,最后一个一个地按顺序利用反射技术动态地调用集合中的各个拦截器组件。

(3)Struts 2框架中的validator校验框架技术的实现原理

使用校验框架既可以方便地实现表单数据校验,又能够将表单中的各个数据的校验逻辑与业务功能的Action类相互分离。而且Struts 2框架中的validator校验框架提供了多种不同的使用方式:普通的服务器端校验方式、客户端纯JavaScript方式和Ajax方式的客户端校验。validator校验框架技术又是如何实现的呢?

每当客户端的表单产生请求提交后,Struts 2框架中的名称为validation的拦截器首先获得表单中的各个请求参数,并根据开发人员在某个validation.xml配置文件中所定义的表单字段的验证要求,利用反射技术动态地调用Struts 2框架中内带的校验器程序(在缺省的配置文件default.xml中已经定义)检查表单中的实际请求参数是否满足开发人员的最终要求。

1.2.2反射技术在Spring框架中的应用

1、Spring框架中的控制反转IoC技术

(1)控制反转IoC(Inversion of Control)技术

所谓的控制反转,也就是将应用系统中原来由程序直接控制的“对象之间的关系”转交给由外部容器程序来实现控制。借助于控制反转的机制和具体的实现技术支持的容器程序,能够实现由容器来控制程序中的各个类之间的关系,而非传统形式的编程实现中直接在程序代码中由程序代码来操控各个程序类的对象实例之间的关系。

这也就是“控制反转”的概念所在:控制权由应用系统中的程序代码转移到了外部容器的程序中。控制权的转移,也就是所谓的“控制反转”;当然,利用“控制反转”能够有效地减少对象的请求者对服务提供者的特定业务功能实现逻辑的具体依赖,因为应用系统中的各个组件类不再需要自身直接去查找或是实例化它们所依赖的其它目标组件类。(2)控制反转IoC是一种使应用程序逻辑外在化的设计模式

因为在这种编程模式下,提供服务的目标组件是被“注入”的而不是被“直接写入”到请求者(客户端)的代码中;这样的编程实现方法将能够大大地减少对象的请求者对服务提供者的特定功能实现逻辑的紧密依赖。因为开发者已经将依赖的具体“定位信息”和“关系信息”从请求者的代码中分离出来了,而在Spring框架中则是将它们放在IoC的XML 的配置文件中。

(3)控制反转IoC技术实现的核心其实是反射技术

由于容器需要动态地创建目标类的对象实例、并动态地对目标对象实例中的属性访问方法和构造方法进行调用,这不可避免地要应用到反射技术——Java语言中如果没有提供对反射技术的支持,也就不可能再出现控制反转IoC编程思想的具体实现技术。

2、控制反转IoC技术是对可配置化的工厂类的简化实现

作者在本章的【例2-16】示例中给出了一个可配置化的工厂类的程序代码示例,其实控制反转IoC技术是对可配置化的工厂类的进一步简化实现。将可配置化的工厂类所需要的配置文件改变为采用更加通用的标准格式的XML形式的配置文件,同时由Spring框架本身为开发人员提供工厂类的具体编程实现,同样也利用反射技术根据开发人员在IoC的XML配置文件中所定义的类名称动态地创建出目标类的对象实例。

因此,采用Spring框架中的控制反转IoC技术能够更简洁地实现工厂模式相同的功能效果,而且编码更加简洁、系统的功能实现更加灵活方便和功能代码更具有可扩展性。

1.2.3反射技术在Hibernate框架中的应用

1、Hibernate框架中的O/R Mapping技术

(1)对象模型和关系模型之间存在一定的差异性

从面向对象(Object-Oriented)的角度来看应用系统中的各个实体域对象时,一般都存在如下形式的关系:关联(Association)、依赖(Dependency)、聚集(Aggregation)或者组合(Composition)、一般化(Generalization)等方面的关系。但在关系型数据库系统中并不提供对面向对象中的四种关系的具体实现的技术支持,如何将实体域对象本身的属性值以及各个实体域对象之间的关系也能够持久化,是目前在企业应用系统开发中所应该要解决的一个主要的问题。

(2)Hibernate框架是一个面向Java 开发平台的对象/关系数据库映射工具Hibernate框架能够把Java持久实体类中的各个成员属性映射到对应的关系型数据库表中的字段中,当然也可以将数据库表中的各个字段的数据值再次映射回Java中的对象的成员属性值。

在Hibernate框架的系统内部是采用了XML技术、Java反射等方面的技术来实现上面的对象/关系映射功能。

2、对象关系映射技术是基于反射技术实现的

1)Hibernate框架是一个轻量级的O/R Mapping技术实现的框架

应用系统中的持久实体类并不需要继承Hibernate框架中的某个基类或者实现它的某个

接口,而是一个普通的Java类——只需要在该类中提供成员属性变量和为每个成员属性变量提供get/set属性访问方法。Hibernate框架系统程序将依据开发人员在O/R Mapping映射定义的配置文件中所设定的映射关系、并利用反射技术动态地实现持久实体类和数据库表之间的映射功能。

2)持久实体类程序能够在容器之外开发和执行

轻量级的O/R Mapping框架也意味着应用系统中的持久实体类能够脱离特定的J2EE容器的环境,并能够在容器之外开发和执行。因此,Hibernate框架不仅可以应用于J2EE开发环境,也能够应用于J2SE的开发环境中。

同时由于能够脱离容器的运行环境,这将有助于开发人员对基于它而开发产生的持久层中的各种功能组件进行单元测试。

1.2.4反射技术在Apache Commons组件中的应用

1、反射技术在Commons–BeanUtils工具类中的应用

Commons-BeanUtils组件中的BeanUtils功能类的copyProperties方法主要是利用反射技术实现源和目标实体类中的对应的成员属性值直接复制,利用源实体类中的getXXX()属性访问方法获得属性值,然后再调用目标实体类中的setXXX()属性访问方法设置对应的属性成员的值。

因此,只要源和目标两个实体类中的成员属性名称相同,但并不需要它们在属性成员的个数上保持一致,就可以自动地完成两个实体类中的成员属性值之间的直接拷贝。

2、反射技术在Commons–DBUtils工具类中的应用

Commons-DbUtils组件提供有对ResultSetHandler接口的各个不同的功能实现类,直接实现将JDBC结果集包装转换为某种形式的包装类——这样的功能实现其实也是采用反射技术实现的。

1.3本章小结

1.3.1本章的学习重点

作者在本章通过具体的程序示例为读者详细地介绍了Java语言中的反射和动态代理技术及它们在项目开发中的具体应用、各种主流的开源框架中是如何应用反射和动态代理技术的,由于反射和代理技术是整个Java技术的核心,而且也是学习J2EE Web组件技术、

EJB组件技术和各种J2EE框架技术的知识基础。

因此,希望读者一定要掌握Java语言中的这两种核心技术及在项目开发中的具体应用,当然也希望读者能够了解反射和代理技术在目前的各种主流的J2EE开源框架中的具体应用——为深入地学习和掌握某个框架的内部工作机制和实现原理提供相关知识基础。

1.3.2本章的学习难点

由于应用反射和代理技术编程实现的程序代码的可读性一般都比较低,部分读者在阅读有关的程序代码时可能会有一定的困难——高度的功能实现代码的灵活性的背后一定会牺牲代码的可读性。

克服这些学习难点的最好的学习方法是希望读者通过大量的编程实践增强感性认识,然后再反过来理解反射技术实现的内部机制——这样的学习方法能够取得比较好的效果。

1.3.3本章的学习要点

读者在项目开发中对反射和代理技术的应用也应该要合理和切合项目中的实际应用的需要——因为反射和代理技术的灵活性背后不仅会降低功能实现代码的可读性,也会牺牲系统的性能。

因此,建议读者在项目开发中,如果需要追求功能实现的通用性和灵活性、代码实现的可扩展性等方面的要求时,才应该应用反射和代理技术。

1.3.4本章练习

1、请描述Java反射技术的主要作用是什么?请编程动态获得java.io.File类中的各个成员方法的程序?

2、请通过具体的程序代码示例说明Java反射技术编程实现的基本步骤?

3、请说明https://www.doczj.com/doc/494819712.html,ng.reflect包中的Constructor类、Field类和Method类的主要作用是什么?

4、https://www.doczj.com/doc/494819712.html,ng.Class类的主要作用又是什么?如何实现对某个目标类进行对象包装?

5、请编程实现获得https://www.doczj.com/doc/494819712.html,.Socket类中的构造方法的定义信息的程序?

6、请编程实现获得java.util.Vector类中的各个成员变量的定义信息的程序?

7、请编程实现获得java.sql.SQLException类的基类中的各个成员方法定义信息的程序?

8、请编程实现动态创建java.io.FileInputStream类的对象实例、并动态地对其中的read()方

法进行调用的程序?

9、请通过具体的程序代码示例说明利用反射技术实现可配置化工厂类的基本思路?

10、请说明Java语言中的动态代理技术的主要技术特性?它与经典的GoF设计模式中的代理模式有什么不同?

毕业论文-毕业设计选题列表1

毕业设计课程设计类: 1、泵体无夹具工艺设计论文 2、连接座课程设计 设计类: 1、斗式提升机的设计 2、建筑卷扬机的设计 3、船用挖掘机起升机构的设计 4、15KN船用柴油机绞车的设计 5、3T悬臂起重机的设计 6、平面转弯带式输送机的设计 7、12T桥式起重机起升机构的设计 8、8T桥式起重机主起升机构的设计 9、SGB-620-40T型刮板输送机的设计 10、钢筋弯曲机的设计 11、单轨抓斗起重机设计 12、5T电动单梁桥式起重机的设计 13、矿用提升机构的设计 14、胶带式输送机的设计 15、数控龙门三枪H型钢自动火焰切割机 16、双梁起重机毕业设计

17、螺旋输送机的设计 18、船用锚机的设计(起重) 19、船用柴油机绞车的设计 20、机械手设计 21、电动(液压)锚机的设计(起重) 22、12.5T单卷筒绞缆车设计(起重) 23、柴油机绞车的设计(起重) 24、-WY型滚动轴承压装机设计 25、带式输送机 26、设计-“包装机对切部件”设计 27、数控回转工作台 28、无摩擦球阀设计 29、旋风除尘器设计 30、液压控制阀的理论研究与设计 31、起毛机主传动结构设计 32、球面蜗杆加工专用数控机床进给系统设计 33、发动机余热发电系统设计 34、射流抛光实验装置中抛光槽系统的研制 35、基于MATLAB的数字滤波器的设计. 36、减速机设计 39、1.8T慢速卷扬机设计 40、愕式破碎机

PLC设计: 1、自动装卸料气动机械手PLC控制设计 2、自动售货机的PLC系统设计 3、机械手控制PLC设计 4、机舱环境检测系统设计(单片机) 5、乘客电梯的PLC控制 6、电梯的PLC控制 7、卧式双面钻孔机床PLC 8、自动钻床与机械手的配合运用PLC控制设计 9、污水处理系统的PLC设计 10、单片机:加热炉温度控制系统的设计 11、基于UC3842开关电源的设计 12、PLC在X53K铣床改造中的应用 工艺夹具类: 1、中间泵壳工艺与两套工装夹具的设计 2、空气管工艺与两套工装夹具的设计 3、排气管工艺与两套工装夹具的设计 4、钻床立柱工艺与两套工装夹具的设计 5、涡轮箱工艺与两套工装夹具的设计 6、摇臂工艺与两套工装夹具的设计 7、前刹车调整臂外壳

课程设计说明书范本模板

辽宁工业大学 工艺课程设计( 论文) 题目: Al-12.5 Si-3 Cu-2-2Ni-0.5Mg铸造合金热处理工艺设计 院(系): 光伏学院 专业班级: 材料工程技术102 学号: 学生姓名: 杨向天 指导教师: 李青春 教师职称: 副教授 起止时间: -7-5~ -7-16

前言 合金工具钢的淬硬性、淬透性、耐磨性和韧性均比碳素工具钢高, 按用途大致可分为刃具、模具和检验尺寸使用的量具用钢三类。合金工具钢广泛用作刃具、冷、热变形模具和量具, 也可用于制作柴油机燃料泵的活塞、阀门、阀座以及燃料阀喷嘴等。 此设计是经过在课堂学习热处理理论知识后的探索和尝试, 其内容讨论如何设计圆板牙钢的热处理工艺, 重点是制定合理的热处理规程, 并按此完成Al-12.5Si-3Cu圆板牙钢的热处理工艺设计。

目录( 小二号黑体, 段前段后1行, 1.25倍行距, 居中排列) 1 低合金刃具钢热处理工艺概述........................................ 错误!未定义书签。 2 圆板牙钢的热处理工艺设计............................................ 错误!未定义书签。 2.1 圆板牙钢的服役条件、失效形式......................... 错误!未定义书签。 2.2 圆板牙技术要求及示意图 ...................................... 错误!未定义书签。 2.3 圆板牙钢的材料选择 .............................................. 错误!未定义书签。 2.4 圆板牙9SiCr钢的C曲线...................................... 错误!未定义书签。 2.5 圆板牙9SiCr钢加工工艺流程图........................... 错误!未定义书签。 2.6 9SiCr圆板牙(M12)钢退火-淬火-回火热处理工艺错误!未定义书签。 2.7 9SiCr圆板牙钢退火、淬火、回火热处理工艺理论错误!未定义书 签。 2.8 选择设备、仪表和工夹具..................................... 错误!未定义书签。 2.9 圆板牙热处理质量检验项目、内容及要求 ........ 错误!未定义书签。 2.10 圆板牙热处理常见缺陷的预防及补救方法........ 错误!未定义书签。 3 参考文献 ............................................................................ 错误!未定义书签。

毕业课程设计

目录 第1章绪论 (3) 第2章设计总体方案 (4) 2.1设计要求 (4) 2.2 设计思路 (4) 2.3 设计方案 (4) 第3章硬件电路设计 (5) 3.1 A/D转换模块 (5) 3.1.1 逐次逼近型A/D转换器原理 (5) 3.1.2 ADC0808 主要特性 (6) 3.1.3ADC0808的外部引脚特征 (6) 3.1.4 ADC0808的内部结构及工作流程 (7) 3.2 单片机系统 (9) 3.2.1 AT89C51性能 (9) 3.2.2 AT89C51各引脚功能 (9) 3.3 复位电路和时钟电路 (10) 3.3.1 复位电路设计 (10) 3.3.2 时钟电路设计 (11) 3.4 LED显示系统设计 (12) 3.4.1 LED基本结构 (12) 3.4.2 LED显示器的选择 (13) 3.4.3 LED译码方式 (14) 3.4.4 LED显示器与单片机接口设计 (14) 3.5 总体电路设计 (15) 第4章程序设计 (17) 4.1 程序设计总方案 (17) 4.2 系统子程序设计 (17)

4.2.1 初始化程序 (17) 4.2.2 A/D转换子程序 (17) 4.2.3 显示子程序 (17) 4.2.4程序代码 (17) 第5章总结 (20) 参考文献 (21) 致谢 (22)

第1章绪论 什么是数字电压表?数字电压表就是采用数字化技术,把需要测量的直流电压转换成数字形式,并显示出来。通过单片机技术,设计出来的数字电压表具有精度高,抗干扰能力强的特点。通过网上资料显示,目前由各种A/D转换器构成的数字电压表已经广泛的应用于电工测量,工业自动化仪表等各个领域。 在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。 目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。 本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。其中,A/D转换采用ADC0808对输入的模拟信号进行转换,控制核心AT89C51再对转换的结果进行运算处理,最后驱动输出装置LED显示数字电压信号。

J2EE课程设计《项目开发指导》——第7章 提高Web应用系统的响应性能(第2部分)

第7章提高Web应用系统的响应性能(第2/3部分) 1.1应用FreeMarker静态模板框架技术 1.1.1FreeMarker静态模板框架技术概述 1、FreeMarker是目前比较流行的静态模板框架 FreeMarker是一种基于Java技术实现的静态模板框架,它允许表示层的开发人员通过使用简单而强大的模板语言来引用在Java程序代码中所定义的对象;FreeMarker也允许将Web应用的表示层设计和开发实现同应用系统的业务逻辑功能实现的代码相互分离;FreeMarker模板使用运行在Servet容器中的Servlet程序所提供的各种模型数据动态地生成HTML页面文件内容、并在浏览器中显示输出。 由于模板语言具有简单高效和编译处理速度快,并且其输出的速度接近于静态HTML 页面的速度。因此,利用FreeMarker静态模板框架能够大大地提高页面显示的性能。 2、为什么要应用FreeMarker静态模板框架 在Web应用系统的表示层开发实现中,不仅需要达到将表现逻辑与业务逻辑相分离的设计目标,也还希望能够获得较好的系统响应性能和较快的页面显示效果。而常规的JSP 页面文件由于在第一次被请求加载时,需要被编译为*.class的类代码文件,所以会出现很明显的响应延迟现象。 而由于FreeMarker静态模板文件无需编译、并且FreeMarker与J2EE Servlet容器无关——因为它并不需要关联与Http或Servlet等有关的信息,因此在技术实现中能够达到将Web应用系统中的表现逻辑与业务逻辑相互分离的效果;另外,也能够分离Web应用系统中的表示层开发人员和业务处理层开发人员各自的工作职责——页面美工只需专注关心Web应用系统中的各个页面模板的设计和开发实现,而系统业务逻辑处理功能的Java程序员则也只需要专注于自身的业务逻辑的功能实现代码。 3、FreeMarker静态模板适合作为Web应用系统中的一个组件 读者可以通过下图7.8所示的FreeMarker官方网站下载FreeMarker静态模板的系统包文件,下载完FreeMarker系统包文件后再进行解压缩该系统包文件,就能够获得FreeMarker 的系统JAR包freemarker-2.3.8.jar文件;最后再将freemarker-2.3.8.jar文件加入到Web应用系统的WEB-INF/lib目录中。

JavaWeb宠物店课程设计报告

河北农业大学 课程设计报告 题目:Java Web宠物店 学院:职业技术学院 专业班级:计算机应用技术0901学生姓名:曹明珠 学号: 2009513100121 指导教师:张玉新 2O11 年 10 月 25 日

目录 1.需求分析 (2) 项目开发背景 (2) 功能介绍 (2) 1.1整体介绍 (2) 1.2 详细说明 (2) 开发平台 (2) 2.系统设计 (3) 1.1总体设计 (3) 1.1.1静态网页设计 (3) 1.1.2界面逻辑关系 (5) 1.1.3详细设计 (5) 1.1.4界面格式的CSS设计 (7) 1.2数据库设计 (8) 1.2.1数据表设计 (8) 1.2.2数据库连接和DAO设计 (9) 3.网站发布 (10) 4.参考文献 (11)

一需求分析 1.1项目开发背景 PetStore 是SUN公司推出的一个宠物店系统,是J2EE应用和学习的一个好例子。针对不同的侧重点,具有不同的版本。该系统不同的版本是优秀程序员智慧的结晶。从功能层面来说,这个系统具有:宠物分类展示、下订单、添加到购物车、浏览产品细节等一系列网上商城所具备的基本功能。 1.2 功能介绍 1.2.1 整体介绍 Petstore提供网上商城系统所必需的功能:用户身份认证、商品信息列表、选购商品、下订单等,围绕这些功能,系统的设计分为以下四个部分: ·.宠物分类展现和宠物查找模块(catalog部分),供用户浏览、查找并选购宠物。 ·.购物车管理(cart部分),供用户查看购物车的情况,并作出是否购买的选择。 ·账户管理模块(account部分),为用户提供注册和账户登录功能。 ·订单管理(order部分),供用户管理自己的账单。 1.2.2 详细说明。 宠物店主通过账户管理模块登录或者注册新用户,只有拥有经过注册的用户名和正确的密码才能更改系统内部代码、页面形式、系统数据库以及管理客户账户等;宠物分类展现部分是系统与客户的交流界面,用户在此功能界面上可以浏览整个宠物店的所有产品情况,包括:宠物生活习性、宠物产地、库存情况、售价等等。用户在此处还可以点击单一宠物的链接进入更进一步的说明;购物车模块是系统与用户账户交流的平台,用户是否购买某产品将直接反映在这个界面和相关的数据库上。订单管理是账户管理的配合模块,是对客户的账户的直接管理和反应。 1.3 系统开发平台 ·Jdk 即Java开发数据包。 ·Web服务器tomcat。可使用版本5.5.26. ·Mysql数据库,用于网站系统文件表格的建立、更改、维护等。 ·Mysql GUI tool ,即对数据库管理的图形界面,在此也可以使用navicat。 ·用于编写、调试系统代码、生成发布的My eclipse 。可选5.5.26版本。 二系统设计

本科生毕业论文(设计)规范

本科生毕业论文(设计)规范 一、基本规范 (一)毕业论文(设计)文本结构规范及装订顺序: 1.毕业论文(设计)任务书 2.毕业论文(设计)题目、摘要、关键词(中英文) 3.毕业论文(设计)目录 4.毕业论文(设计)正文(理工类): (1)选题背景; (2)方案论证; (3)过程(设计或实验)论述; (4)结果分析; (5)结论或总结。 注:文科及其他学科,可根据学科特点,参照上述结构制定统一的正文结构规范。 5.致谢 6.附录 7.参考文献 (二)内容要求 1.任务书、题目、摘要、关键词、目录等项内容由指导教师把关。 2.论文文本每页右下角必须有页码,目录中必须标明页码。 3.毕业论文(设计)正文: 正文内容层次结构序数为:一、二、三、……;(一)(二)(三)……;1.2.3.……;(1)(2)(3)……。 (1)选题背景:说明本设计课题的来源、目的、意义、应解决的主要问题及应达到的技术要求;简述本课题在国内外发展概况及存在的问题,本设计的指导思想。 (2)方案论证:说明设计原理并进行方案选择,阐明为什么要选择这个设计方案(包括各种方案的分析、比较)以及所采用方案的特点。 (3)过程(设计或实验)论述:指作者对自己研究工作的详细表述。要求

论理正确、论据确凿、逻辑性强、层次分明、表达确切。 (4)结果分析:对研究过程中所获得的主要数据、现象进行定性或定量分析,得出结论和推论。 (5)结论或总结:对整个研究工作进行归纳和综合,阐述本课题研究中尚存在的问题及进一步开展研究的见解和建议。 4.致谢:简述自己完成论文(设计)的体会,并对指导教师以及协助完成论文(设计)的有关人员表示谢意。 5.附录:包括与论文有关的图表、计算机程序、运行结果,主要设备、仪器仪表的性能指标和测试精度等。 6.参考文献:为了反映论文的科学依据和作者尊重他人研究成果的严肃态度以及向读者提出有关信息的出处,正文中应按顺序在引用参考文献处的文字右上角用[]标明,[]中序号应与“参考文献”中序号一致,正文之后则应刊出参考文献,并列出只限于作者亲自阅读过的发表在公开出版物上的最主要文献。 参考文献的著录,按著录/题名/出版事项顺序排列: 期刊——著者,题名,期刊名称,出版年,卷号(期号),起始页码。 书籍——著者,书名、版次(第一版不标注),出版地,出版者,出版年,起始页码。 7.文字要求:文字通顺,语言流畅,无错别字,采用计算机打印成文。 8.图纸要求:图面整洁,布局合理,线条粗细均匀,圆弧连接光滑,尺寸标注规范,文字注释必须使用工程字书写。提倡学生使用计算机绘图。 9.曲线图表要求:所有曲线、图表、线路图、流程图、程序框图、示意图等不准徒手画,必须按国家规定标准或工程要求采用计算机或手工绘制。 10.译文要求:内容必须与课题(或专业内容)有联系,并说明出处。 11.论文字数要求: 毕业论文(设计)字数文科0.8—1.2万(其中外语专业不少于3000个单词),理工科不少于1.5万字(含图表);外文翻译不少于1.5万印刷符号、外文参考资料阅读量不少于10万印刷符号。文科各专业的文献综述必须单独写,其字数应在2千汉字以上,要求与译文相同。 12.毕业论文(设计说明书)用A4开纸打印,并使用学校统一制作的封面

课程设计说明书模板

机械制造学课程设计说明书 题目名称 专业班级 学生姓名 学号 指导教师 机械与电子工程系 二○一四年月日

目录 一、任务书--------------- -------3 二、指导教师评阅表----------------------4 三、序言-------------------------------------------------------------------------------------------3 四、零件的分析-----------------------------------------------------------------------------------3 五、工艺规程的设计------------------------------------------------------------------------------4 (1). 确定毛坯的制造形式---------------------------------------------------------------4 (2). 基面的选择---------------------------------------------------------------------------4 (3). 制订工艺路线------------------------------------------------------------------------4 (4). 机械加工余量、工序尺寸及毛坯尺寸的确------------------------------------5 (5). 确定切削用量及基本工时---------------------------------------------------------6 六、设计心得与小结-----------------------------------------------------------------------------11 七参考文献-------------------------------------------------------------------------------------1 1

毕业课程设计格式模板

克拉玛依职业技术学院 毕业设计 题目 专业 班级 学号 学生姓名 指导教师

摘要 摘要部分说明: “摘要”是摘要部分的标题,不可省略。 标题“摘要”选用模板中的样式所定义的“摘要”;或者手动设置成字体:黑体,居中;字号:小三;1.5倍行距,段前为0行,段后1行。 设计摘要是设计的缩影,文字要简练、明确。内容要包括目的、方法、结果和结论。单位制一律换算成国际标准计量单位制,除特殊情况外,数字一律用阿拉伯数码。文中不允许出现插图,重要的表格可以写入。 摘要正文选用模板中的样式所定义的“正文”,每段落首行缩进2个汉字;或者手动设置成每段落首行缩进2个汉字,字体:宋体,字号:小四,行距:多倍行距 1.25,间距:前段、后段均为0行,取消网格对齐选项。 篇幅以一页为限,摘要正文后列出3-5个关键词,关键词与摘要之间空一行。 “关键词:”是关键词部分的引导,不可省略,黑体,小四。 关键词请尽量用《汉语主题词表》等词表提供的规范词。关键词之间用分号间隔,末尾不加标点。

1 正文格式说明 (1) 1.1 设计格式基本要求 (2) 1.2 设计页眉页脚的编排 (2) 1.3 设计正文格式 (2) 1.4 章节标题格式 (3) 1.5 各章之间的分隔符设置 (3) 1.6 正文中的编号 (3) 2 图表及公式的格式说明 (5) 2.1 图的格式说明 (5) 2.1.1 图的格式示例 (5) 2.1.2 图的格式描述 (5) 2.2 表的格式说明 (6) 2.2.1 表的格式示例 (6) 2.2.2 表的格式描述 (7) 2.3 公式的格式说明 (7) 2.3.1 公式的格式示例 (7) 2.3.2 公式的格式描述 (8) 2.4 参考文献的格式说明 (8) 2.4.1 参考文献在正文中引用的示例 (8) 2.4.2 参考文献在正文中引用的书写格式 (8) 2.4.3 参考文献的书写格式 (8) 2.4.4 参考文献的书写格式示例 (9) 2.5 量和单位的使用 (9) 2.5.1 使用方法 (9) 2.5.2 中华人民共和国法定计量单位 (9) 2.6 规范表达注意事项 (11) 2.6.1 名词术语 (11) 2.6.2 数字 (11) 2.6.3 外文字母 (12) 2.6.4 量和单位 (12) 2.6.5 标点符号 (12) 3 打印说明 (13)

J2EE 课程设计实训项目——《蓝梦网上商城》——系统UML包图的设计

J2EE 课程设计实训项目——《蓝梦网上商城》——系统UML包图的设计“蓝梦网上商城”的UML包图的设计 1、UML中的包图(Package Diagram) (1)包图是保持系统整体结构简明、清晰的重要工具 通过给出包可以列出各个包之间的关系。包图由包和包之间的联系构成,它是维护和控制系统总体结构的重要建模工具。 (2)在Rose中包图是通过类图来体现的 并且注意如果某个包为其它包的子包,则应该将子包放入到父包的里面。 2、本系统中的包图中表示层的各个组件所在的包 (1)新建某个包 (2)输入包的名称 (3)在该包中再新建其各个子包 本系统分为四个----- JSP表示组件包、ViewHelp表示逻辑JavaBean组件包、ViewHelp 表示逻辑标签组件包。

3、本系统中的包图中的控制层的各个组件所在的包 (1)新建某个包 (2)输入包的名称 (3)在该包中再新建其各个子包 本系统分为四个-----前端控制器组件包、后端控制器组件包、过滤器组件包、监听器组件包

4、本系统中的包图中的业务层的各个组件所在的包 (1)新建某个包 (2)输入包的名称 (3)在该包中再新建其各个子包 本系统分为四个-----用户信息管理包、商品信息管理包、购物车信息管理包、订单信息管理包

5、本系统中的包图中的数据访问层的各个组件所在的包 (1)新建某个包 (2)输入包的名称 (3)在该包中再新建其各个子包 本系统分为四个----- DAO服务组件包、DAO CRUD组件包、数据连接组件包、持久实体组件包

6、本系统中的包图设计 由于在Rose中包图是通过类图来体现的,并且注意如果某个包为其它包的子包,则应该将子包放入到父包的里面,因此新建一个类图。 (1)新建一个类图 (2)并且输入名称:蓝梦网上商城前台服务的UML包图

J2ee课程设计文档

J2EE与中间件 课程设计报告 课程设计题目:图书馆管理系统 班级:软件工程2011级1班小组成员: 信息科学与工程学院 2014年06月

目录 一、图书馆管理系统现状...................................... 错误!未定义书签。 二、涉及的技术.............................................. 错误!未定义书签。 2.1 登陆页面采用cookie 技术............................ 错误!未定义书签。 2.2 JQuery技术......................................... 错误!未定义书签。 2.3 数据库连接池........................................ 错误!未定义书签。 2.4 MVC架构............................................ 错误!未定义书签。 三、设计任务................................................ 错误!未定义书签。 3.1用例设计............................................ 错误!未定义书签。 3.2界面设计............................................ 错误!未定义书签。 3.3数据库设计.......................................... 错误!未定义书签。 3.4编码设计............................................ 错误!未定义书签。 四、功能描述................................................ 错误!未定义书签。 4.1用例设计............................................ 错误!未定义书签。 4.2界面设计............................................ 错误!未定义书签。 4.3 数据库设计.......................................... 错误!未定义书签。 4.4 编码设计............................................ 错误!未定义书签。 五、功能实现................................................ 错误!未定义书签。 5.1用例设计............................................ 错误!未定义书签。 5.2 界面设计............................................ 错误!未定义书签。 5.3数据库设计.......................................... 错误!未定义书签。 5.4编码设计............................................ 错误!未定义书签。 六、实验体会................................................ 错误!未定义书签。 6.1遇到的困难.......................................... 错误!未定义书签。 6.2经验:.............................................. 错误!未定义书签。 七、组内分工................................................ 错误!未定义书签。 1

写毕业论文(设计)的步骤

写毕业论文(设计)的步骤 完成一篇毕业论文,一般要经过以下几个步骤: 一、选题 二、收集、占有资料 三、确立论点,拟定写作提纲 四、撰写初稿 五、修改定稿 一、如何选题 确立论文题目,就是确定研究的目标,研究的主攻方向。考生在选题时应该注意以下三点: 1、论题要大小适中。题目不要太大,尽量"小题大做"。一般来说题目大小要适宜,或小点好驾驭,容易写得丰满。但也不要小到像本单位的工作总结,或意见建议书。论文要求深刻和严谨。所谓深刻就是对某一问题进行深层次、多角度、全方位的探讨。所谓严谨就是观点鲜明,论证有力,层次清晰,语言规范。有的学员怕题目小了,难以展开分析,几句话就说完,甚至连要求的字数也不够。解决这个问题的办法,就是“小题大做”,即从各种不同角度,不同层面展开分析某一“小问题”,要多用些具体材料,图表、公式来证明表达自己的观点。这样,既可以使论文充实、丰满、具有说服力,又可以解决字数不足问题。题目大小适当,才能在短时间内经过努力,可以圆满完成写作任务。 2、注意研究角度要有新意。进行科学研究,就是找问题,没有新问题就谈不上研究,更谈不到创新,论文也就没有写作的价值,因此,确定研究方向只有从新的角度去研究、研究以前没有人研究过的问题,或者是研究过探讨过但说法不一的问题去分析论证,才会得出与众不同的结论,才会见出新意。 3、要知己知彼。在选题中,要了解本专业本领域中已有的科研成果,了解别人已经解决了什么问题,还存在什么问题;是否有争论,争论的焦点是什么;那些方面的研究较薄弱,那些方面的研究尚待开拓等等。只有知己知彼才能避免重复和雷同。 二、根据论题,收集资料,拟定论文提纲 1.收集材料。题目确定之后,要在题目所涉及的领域广泛收集材料。材料一般分为两类,即理论材料和事实材料。理论材料可以到图书馆、资料室、理论性刊物、互联网上按分类目录查找。事实 材料,可从图书、报刊资料中,自己亲身接触到的,他人工作经验,工作中的统计资料、案例等 查找。有条件的可以亲自调查研究。收集材料要多积精选。选择材料的标准,最大限度的选择资 料,应为必要的;最小限度选择资料,应为充分的。收集材料时应注意,真实性(出处;二手资料

课程设计任务书及指导书格式

课程设计任务书及指导书格式 课程设计任务指导书文本格式一般为: 1.设计题目 2.设计目的 3.任务(要求:对于一班一题或半班一题的,需明确列出每位学生所对应的设计参数,学生以学号的后两位代替;对于一组一题的,应明确每题的学生人数和学生姓名) 4.时间安排 5.设计内容 6.设计工作要求 7.成绩评定标准 8.主要参考资料 Ⅰ、课程设计任务书 一、题目一:刚性基础 某厂房承重体系为三层钢筋混凝土框架结构,边柱荷载标准值F K边=400kN,中柱荷载标准值F K中=600kN,设计只考虑竖向荷载,要求学生完成刚性独立基础的设计(素混凝土基础),并计算沉降。工程设计正负零标高为20.0米,现形场平整平标高为20.0米。 二、设计条件 1 地质条件:场地土层如下:①素填土:松散,厚0.8m;②粘土:可塑,厚4.0 m; ③粉质粘土:硬塑,厚10.0 m;其下为不可压缩基岩; 2、水文地质条件:分布上层滞水,水位随季节性变化,现水位为地下埋深0.5m ; 3、根据岩土工程勘察报告,相关土层的设计参数如下表: 表1:土层设计参数表

表2:土层压缩试验成果表 注:②层土的基础承载力修正系数为η b =0.3,ηd=1.6; 三、设计内容 1 学生承担的具体设计题号见表一,要求每班分4个组。 表三、课程设计题号表 2 设计计算书一份(内容包括) (1)基础平面尺寸、埋深、验算; (2)基础结构施工图; (3)沉降计算; 四、题目二:桩基础 某高层民房,采用钢筋混凝土框架结构,建筑高度46米,边柱(柱断面尺寸600×600mm2 ) 荷载标准值F K边=18000kN,中柱(柱断面尺寸800×800mm2)荷载标准值F K中=30000kN,柱弯矩M K=200KN·m,水平荷载H K=100KN,桩顶允许水平位移10mm,桩顶约束按固结考虑;要求学生完成桩基础的设计。工程设计正负零标高为20.0米,现形场平整平标高为20.0米。 地质条件:场地土层如下:①素填土:松散,厚1.8m;②粘土:可塑,厚5.0 m;③粉质粘土:硬塑,厚10.0 m;其下为不可压缩基岩; 水文地质条件:分布上层滞水,水位随季节性变化,现水位为地下埋深0.5m ; 桩的设计参数如下表。 表5:土层设计参数表

(完整版)工商管理专业毕业课程设计

课程设计 设计内容:森马公司的薪酬体系设计 所属课程:《薪酬制度设计》 设计时间:2013年 12 月 5 日至2013年 12 月 25 日 学生姓名: 学生学号: 班级:

指导教师: 所在院(系):商学院工商管理系 2013 年 12 月 25 日

课程设计成绩评定表

森马公司薪酬体系设计 一、公司简介 浙江森马服饰股份有限公司是以虚拟经营为特色,以系列成人休闲服饰和儿童服饰为主导产品的品牌服饰企业,公司旗下拥有“森马”和“巴拉巴拉”两大服饰品牌。“森马”品牌创立于1996年,是中国休闲服饰行业的领先品牌,先后荣获中国驰名商标、中国名牌和国家免检产品等殊荣。“巴拉巴拉”品牌创立于2002年,是中国儿童服饰行业的领军品牌,也是首批荣登中国名牌榜单的童装品牌。 森马自创立以来,大胆采用虚拟经营模式,巧妙地采用“借鸡生蛋”的虚拟生产策略,在珠三角、长三角两大区域以及山东、湖北等地整合了160多家生产能力强大、技术力量雄厚、产品质量过硬的专业生产厂家,强强联合,实行订单化生产,通过服装产业链的垂直整合,建立了一套快速反应的供应链体系,构建成“大物流、大管理”的发展格局。同时强化品质管理,先后通过了ISO9001国际质量体系认证和ISO14001环境管理体系认证,使企业的质量管理直接与国际接轨。森马创立并发展了“小河有水大河满”的经营思想,坚持终端是最好的品牌传播渠道,推出了一系列双赢共赢的市场拓展政策,极大地

鼓舞了广大加盟商的投资热情,销售市场得到迅速扩大。到目前为止,森马在全国各地的销售网点已达5000多家。公司先后与法国PROMOSTYLE公司、韩国色彩协会、德国永恒力物流、北京用友软件、上海奥美广告、美世咨询、上海东华大学、浙江理工大学等一批国内外机构结成战略合作伙伴,成立设计开发中心和技术中心,始终致力于国际化与本土化、时尚与流行的完美结合。2009年又与世界顶级咨询公司--麦肯锡展开了深度合作,为森马制定了未来五年的战略发展目标,致力把森马、巴拉巴拉打造成为一个真正的民族品牌、世界品牌;在品牌提升上,森马全面导入“360度品牌管理”,分别从产品、声誉、顾客、卖场通道、视觉识别、形象等方面提升森马品牌影响力。2003年森马聘请香港小天王谢霆锋和香港美少女组合--TWINS 共同演绎“穿什么就是什么”的品牌休闲风格。2008年,森马又正式携手时下两岸三地最具人气的当红偶像--罗志祥和中韩两地超人气偶像团体--SuperJunior-M共同演绎“Neverthesame”的品牌风格,更好地传播森马崇尚年轻活力、炫耀青春本质的品牌主张。2009年,森马通过对消费者更深入地研究,对时下年轻人生活形态的洞察,将品牌定位作了重新梳理。广告语也正式从“穿什么就是什么”升级为“穿什么潮

j2ee实习报告

《j2ee软件开发》课程设计报告 系部:信息工程系 班级:计网0931班 姓名:陈银生 指导老师:陆立松、陈晓华、田娟 学期:2011-2012-1

目录 一、对Struts2的理解 (3) Struts2的模板和主题介绍 (3) jsp:基于JSP的模板技术 (4) 理解Struts2拦截器 (4) 实现Struts2拦截器原理 (4) displaytag问题 (4) 二、对各程序的分析 (5) ※对程序e_learning的分析 (5) 页面关系图 (5) 程序的调试 (5) 关键代码的分析 (6) ※对程序S2SH-Page的分析 (7) 页面关系图 (7) 关键代码的分析 (7) ※对程序s2shOaDemo的分析 (8) 页面实现的效果 (8) 重要代码分析 (10) ※对程序ckeditor的分析 (11) ※对程序display的分析 (11) 分页 (13) 对列排序 (13) 导出数据 (13) Display Tag的属性设置 (13) DisplayTag的不足 (13) 三、学习心得 (14)

在为期三个礼拜的j2ee课程设计中,我分别从e_learning、S2SH-Page、s2shOaDemo、ckeditor等程序中,再加上老师的讲解,让我受益匪浅啊,因此我将这三周老师的讲解做了做了初步总结工作。在总结之初我看到了两个问题。一个是要对J2EE认真总结,因为在以后的很长时间里我会离不开J2EE;另一个是要对学习过程和学习方法认真总结,因为这些将伴随我的一生。其实这两方面都很有指导意义,它们指引我未来一段时间要怎么度过,要学习哪些J2EE知识,要怎么学习这些知识。不过总结还有很大缺陷,J2EE组件间的联系和.NET之间的对比等都不是十分明朗。要在后续的课程学习和实践学习中再做完善与总结。J2EE有两个设计初衷,对生产厂商来说,它是一套开放标准,加入这个标准各厂商的产品就是一个成熟的企业运算体系中可以替换的部件了;对于开发者来讲,J2EE是一套现成的解决方案,采用这个解决方案,企业应用中的许多难题,如跨平台、事务处理、安全性等等,就会迎刃而解。所以,下面就是我对这些程序的一些分析。 一、对Struts2的理解 Struts2的模板和主题介绍 因为Struts2所有的UI标签都是基于主题和模板的,主题和模板是Struts2所有UI标签的核心。模板是一个UI标签的外在表示形式,例如:当我们使用标签时,Struts2就会根据对应select模板来生成一个有模板特色的下拉列表框。如果为所有的UI标签都提供了对应的模板,那么这系列的模板就形成了一个主题。 对于一个JSP页面里包含的UI标签而言,即可以直接设置该UI标签需要使用的模板,也可以设置该UI标签使用的主题。实际上对开发者而言,并不推荐直接设置模板属性,而是应该选择特定主题。设置主题的方法有以下几种:1,通过设定特定UI标签上的theme属性来指定主题。 2,通过设定特定UI标签外围的Form标签的theme属性来指定主题。 3,通过取得page会话范围内以theme为名称的属性来确定主题。 4,通过取得request会话范围内以theme为名称的属性来确定主题。 5,通过取得session会话范围内以theme为名称的属性来确定主题。 6,通过取得application会话范围内以theme为名称的属性来确定主题。

大学本科毕业论文、毕业设计

山东大学本科毕业论文、毕业设计 工作管理条例(试行) 毕业论文、毕业设计教学过程是高等学校实现本科培养目标要求的重要培养阶段。毕业论文、毕业设计是在大学期间学生毕业前的最后学习阶段,是学习深化和提高的重要过程;是学生运用已学过知识的一次全面总结和综合训练;是学生素质与能力培养效果的全面检验;是对学生的毕业及学位资格进行认证的重要依据;是衡量教育质量和办学效益的重要评价内容。因此,搞好比业论文、毕业设计工作,对全面提高教学质量具有重要意义。为了加强对毕业论文、毕业设计工作的规范化管理,根据教育部有关规定和本科专业培养计划的要求,结合我校实际情况,特制定本条例。 本条例适用于全日制本科生毕业论文、毕业设计,全日制专科生毕业论文、毕业设计亦可参照执行。 一、目的和要求 (一)目的 毕业论文是高等学校的应届毕业生在毕业前所撰写的学位论文,表明作者在科学研究工作中取得的新成果和新见解,反映作者具有的科研能力和学识水平。毕业设计是高等学校技术科学与工程技术专业的应届毕业生在毕业前接受课题任务,进行实践的过程及取得的成果。毕业论文、毕业设计的目的是培养学生综合运用所学的基础理论、专业知识和基本技能,提高分析和解决实际问题的能力,使学生在知识、能力素质方面得到综合训练、转化和提高。 (二)要求 各院(部)要加强对毕业论文、毕业设计工作的领导。在毕业论文、毕业设计工作中,要认真贯穿“三个结合”的原则:理论与实践相结合,教学与科研、生产相结合,教育与国民经济建设相结合。通过三个结合,实现毕业论文、毕业设计的教学、教育功能和社会功能。按照高等学校人才培养目标和毕业论文、毕业设计工作教学目标的基本要求,重视学生多学科的理论、知识和技能等综合运用能力的实际训练,加强学生创新意识和创造能力的培养,不断提高毕业论文、毕业设计质量、人才培养质量及教学管理工作水平。 搞好毕业论文、毕业设计工作的关键在于指导教师。各院(部)要采取有效措施,加强指导教师队伍的建设,按要求选配好指导教师,并充分发挥指导教师的作用。要加强对学生毕业论文、毕业设计的选题、指导、答辩、成绩评定等各个环节的质量检查,切实保证毕业论文、毕业设计的质量。 除医学类部分专业(如临床医学、口腔医学、护理学等专业)外,其余专业都要进行毕业论文、毕业设计工作。 二、进程安排

课程设计设计说明书格式规范

课程设计设计说明书格式规范

课程设计设计说明书格式规范 一、课程设计设计说明书格式规范 装订成册的书面说明书和完整电子文档各一份,说明书统一采用A4纸打印,说明书格式如下,顺序为: (一)封面 (二)索命数正文,包括: 1、摘要(包括中文摘要和英文摘要): 分别为300字左右,应包括:工作目的、内容、结论、关键词 2、目录 以上部分以I、II……编制页码。以下部分根据章节编写序号和页码。 3、主体部分(不少于1 字,按要求设定页眉页角,要求居中) 主要包括引言或绪论、正文、结论、致谢,采用全角符号,英文和数字半角。每页28行、每行32-35个汉字,1.5倍行间距 3.1格式:主体部分的编写格式由引言(绪论)开始,以结论结束。主体部分必须由1页开始。一级标题之间换页,二级标题之间空行。 3.2序号 3.2.1毕业说明书各章应有序号,序号用阿拉伯数字编码,层

次格式为:1××××(三号黑体,居中)×××××××××××××××××××××× (内容用小四号宋体)。 1.1××××(小三号黑体,居左) ××××××××××××××××××××× (内容用小四号宋体)。 1.1.1××××(四号黑体,居左) ×××××××××××××××××××× (内容用小四号宋体)。 ①××××(用与内容同样大小的宋体) 1)××××(用与内容同样大小的宋体)a.××××(用与内容同样大小的宋体) 3.2.2说明书中的图、表、公式、算式等,一律用阿拉伯数字分别依序连编号编排序号。序号分章依序编码,其标注形式应便于互相区别,可分别为:图 2.1、表 3.2式(3.5)等 3.2.3说明书一律用阿拉伯数字连续编页码。页码由前言(或绪论)的首页开始,作为第1页,并为右页另页。题名页、摘要、目次页等前置部分可单独编排页码。页码必须统一标注每页页脚中部。力求不出空白页,如有,仍应以右页作为单页页码。 3.2.4说明书的附录依序用大写正体英文字母A、B、C……编序号,如:附录A。

课程设计模板

__________ 大学课程设计 年月日

___大学课程设计任务书 课程 题目 专业姓名学号 主要内容: 选取一种方法设计音乐彩灯控制器,要求该音乐彩灯控制器电路由三路不同控制方法的彩灯所组成,采用不同颜色的发光二极管作课题实验。 基本要求: (1)第一路为音乐节奏控制彩灯,按音乐节拍变换彩灯花样。 (2)第二路按音量的强弱(信号幅度大小)控制彩灯。强音时,灯的亮度加大,且灯被点亮的数目增多。 (3)第三路按音量高低(信号频率高低)控制彩灯。低音时,某一部分灯点亮;高音时,另一部分灯电亮。 参考资料: [1]刘国钧,陈绍业,王凤翥.图书馆目录[M].北京:高等教育出版社,1957.15-18. [2]刘润华,刘立山.模拟电子技术[J].山东:石油大学出版社,2003. [3]苏成富.彩灯控制器[J].北京:电机电器技术,2000,(01). [4]祝富林.音乐彩灯电路CS9482[J].北京:电子世界,1995,(12). [5]彭介华.电子技术课程设计指导[J].北京:高等教育出版社,1997. 完成期限2014.6.30至2014.7.6 指导教师 专业负责人 年月日

目录 1设计要求 (1) 2方案设计 (1) 2.1设计思路 (1) 2.2总体方案方框图 (1) 2.3基本原理 (2) 3总体方案的选择和设计 (2) 3.1简单声控音乐彩灯控制器 (2) 3.2音乐彩灯控制器 (3) 4单元电路的设计 (3) 4.1整流电路的设计 (3) 4.2滤波电路的设计 (4) 4.3高通滤波器 (5) 4.4低通滤波器 (5) 4.5元件参数的计算及选择 (6) 5总电路图 (7) 6总结 (7) 参考文献 (8) 附录 (9)

相关主题
文本预览
相关文档 最新文档