第十章的案例有个地方搞不明白,恳请帮忙,谢谢啊。注:这个项目可以正常运行,程序和布署都没问题。在第3版的第十章的案例,简单工作流系统中,登录这一步,有两个问题没搞明白,恳请解答一下,非常非常感谢
一、在LoginAction类中,有两个属性:private Manager manager、private Manager manager,在execute方法中,直接调用了manager.getName()、和vercode.equalsIgnoreCase()方法, 我想manager和vercode这时已经被自动装配了。但在spring的配置文件applicationContext.xml和daoContext.xml中,并没有找到id是manager的bean定义,我想请问一下,这个manager和vercode是何时、根据什么注入的?值的内容是从哪里来的?二、LoginAction有个继承来的属性:protected EmpManager mgr,和setter方法:public void setEmpManager(EmpManager mgr),这里的mgr也是自动装配注入进来的吗?这里自动装配好像不是根据名字mgr,而是根据类型EmpManager,我想请教一下,在哪里能找到根据类型进行自动装配的设置?如果不指定自动装配类型,spring是如何决定用name装配还是用type装配?恳请高手解答一下,这两个问题折磨了好几天了,谢谢哈
一、在LoginAction类中,有两个属性:private Manager manager、private Manager manager,在execute方法中,直接调用了manager.getName()、和vercode.equalsIgnoreCase()方法, 我想manager和vercode这时已经被自动装配了。但在spring的配置文件applicationContext.xml和daoContext.xml中,并没有找到id是manager的bean定义,我想请问一下,这个manager和vercode是何时、根据什么注入的?值的内容是从哪里来的?二、LoginAction有个继承来的属性:protected EmpManager mgr,和setter方法:public void setEmpManager(EmpManager mgr),这里的mgr也是自动装配注入进来的吗?这里自动装配好像不是根据名字mgr,而是根据类型EmpManager,我想请教一下,在哪里能找到根据类型进行自动装配的设置?如果不指定自动装配类型,spring是如何决定用name装配还是用type装配?恳请高手解答一下,这两个问题折磨了好几天了,谢谢哈
解决方案 »
- Struts2源码问题--ActionContex的创建
- 怎么在页面添加强制QQ聊天代码
- jdbc 复制远程数据库的所有数据到本地数据库
- 求一个sql查询
- 服务器文件查看
- java 远程方法调用 凤凰框架 (附源码)
- java 中 引用和对象的区别是什么?
- 经过研究表明,ww标签库也是通过request获得数据的,非常不理解,既然ww标签库也是通过request传递数据的,为什么我设置了request却出来是
- 出现java.io.EOFException异常原因?
- MVP模式适用于J2EE开发吗?
- JXL对比两个单元格的值
- 简单区别一下session,request.getSession()的区别
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- 配置Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,
/WEB-INF/daoContext.xml</param-value>
</context-param>
<!-- 使用ContextLoaderListener初始化Spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener> <!-- 定义Struts 2的核心Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 让Struts 2的核心Filter拦截所有请求 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 定义Web应用的首页 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>AuthImg</servlet-name>
<servlet-class>org.crazyit.hrsystem.web.AuthImg</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>AuthImg</servlet-name>
<url-pattern>/WEB-INF/content/authImg.jsp</url-pattern>
</servlet-mapping >
</web-app>
spring的配置文件:applicationContext.xml<?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的Schema信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 定义数据源Bean,使用C3P0数据源实现 -->
<!-- 设置连接数据库的驱动、URL、用户名、密码
连接池最大连接数、最小连接数、初始连接数等参数 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://192.168.0.215:3306/hrSystem"
p:user="root"
p:password="518adrnd001"
p:maxPoolSize="40"
p:minPoolSize="1"
p:initialPoolSize="1"
p:maxIdleTime="20"/> <!-- 定义Hibernate的SessionFactory -->
<!-- 依赖注入数据源,注入正是上面定义的dataSource -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
p:dataSource-ref="dataSource">
<!-- mappingResouces属性用来列出全部映射文件 -->
<property name="mappingResources">
<list>
<!-- 以下用来列出Hibernate映射文件 -->
<value>org/crazyit/hrsystem/domain/Application.hbm.xml</value>
<value>org/crazyit/hrsystem/domain/Attend.hbm.xml</value>
<value>org/crazyit/hrsystem/domain/AttendType.hbm.xml</value>
<value>org/crazyit/hrsystem/domain/CheckBack.hbm.xml</value>
<value>org/crazyit/hrsystem/domain/Employee.hbm.xml</value>
<value>org/crazyit/hrsystem/domain/Payment.hbm.xml</value>
</list>
</property>
<!-- 定义Hibernate的SessionFactory的属性 -->
<property name="hibernateProperties">
<!-- 指定数据库方言、是否自动建表
是否生成SQL语句等 -->
<value>
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true
#开启二级缓存
hibernate.cache.use_second_level_cache=true
#设置二级缓存的提供者
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
</value>
</property>
</bean> <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
<!-- 该类实现PlatformTransactionManager接口,是针对Hibernate的特定实现-->
<!-- 并注入SessionFactory的引用 -->
<bean id="transactionManager" class=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory"/> <!-- 配置事务增强处理Bean,指定事务管理器 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 用于配置详细的事务语义 -->
<tx:attributes>
<!-- 所有以'get'开头的方法是read-only的 -->
<tx:method name="get*" read-only="true"/>
<!-- 其他方法使用默认的事务设置 -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 配置一个切入点,匹配empManager和mgrManager
两个Bean的所有方法的执行 -->
<aop:pointcut id="leePointcut"
expression="bean(empManager)||bean(mgrManager)"/>
<!-- 指定在leePointcut切入点应用txAdvice事务增强处理 -->
<aop:advisor advice-ref="txAdvice"
pointcut-ref="leePointcut"/>
</aop:config> <!-- 定义业务逻辑组件模板 -->
<!-- 为之注入DAO组件 -->
<bean id="managerTemplate" abstract="true" lazy-init="true"
p:appDao-ref="appDao"
p:attendDao-ref="attendDao"
p:typeDao-ref="attendTypeDao"
p:checkDao-ref="checkDao"
p:empDao-ref="employeeDao"
p:mgrDao-ref="managerDao"
p:payDao-ref="payDao"/> <!-- 定义两个业务逻辑组件,继承业务逻辑组件的模板 -->
<bean id="empManager"
class="org.crazyit.hrsystem.service.impl.EmpManagerImpl"
parent="managerTemplate"/>
<bean id="mgrManager"
class="org.crazyit.hrsystem.service.impl.MgrManagerImpl"
parent="managerTemplate"/><bean id="cronTriggerPay"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<!-- 使用嵌套Bean的方式来定义任务Bean -->
<bean
class="org.springframework.scheduling.quartz.JobDetailBean">
<!-- 指定任务Bean的实现类 -->
<property name="jobClass"
value="org.crazyit.hrsystem.schedule.PayJob"/>
<!-- 为任务Bean注入属性 -->
<property name="jobDataAsMap">
<map>
<entry key="empMgr" value-ref="empManager"/>
</map>
</property>
</bean>
</property>
<!-- 指定Cron表达式:每月3日2时启动 -->
<property name="cronExpression" value="0 0 2 3 * ? *"/>
</bean><!-- 定义触发器来管理任务Bean -->
<bean id="cronTriggerPunch"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<!-- 使用嵌套Bean的方式来定义任务Bean -->
<bean
class="org.springframework.scheduling.quartz.JobDetailBean">
<!-- 指定任务Bean的实现类 -->
<property name="jobClass"
value="org.crazyit.hrsystem.schedule.PunchJob"/>
<!-- 为任务Bean注入属性 -->
<property name="jobDataAsMap">
<map>
<entry key="empMgr" value-ref="empManager"/>
</map>
</property>
</bean>
</property>
<!-- 指定Cron表达式:周一到周五7点、12点执行调度 -->
<property name="cronExpression"
value="0 0 7,12 ? * MON-FRI"/>
</bean>
<!-- 执行实际的调度调度 -->
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronTriggerPay"/>
<ref local="cronTriggerPunch"/>
</list>
</property>
</bean>
</beans>
<!-- 指定Spring配置文件的Schema信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 配置DAO组件的模板 -->
<bean id="daoTemplate" abstract="true" lazy-init="true"
p:sessionFactory-ref="sessionFactory"/> <bean id="employeeDao"
class="org.crazyit.hrsystem.dao.impl.EmployeeDaoHibernate"
parent="daoTemplate"/> <bean id="managerDao"
class="org.crazyit.hrsystem.dao.impl.ManagerDaoHibernate"
parent="daoTemplate"/> <bean id="attendDao"
class="org.crazyit.hrsystem.dao.impl.AttendDaoHibernate"
parent="daoTemplate"/> <bean id="attendTypeDao"
class="org.crazyit.hrsystem.dao.impl.AttendTypeDaoHibernate"
parent="daoTemplate"/> <bean id="appDao"
class="org.crazyit.hrsystem.dao.impl.ApplicationDaoHibernate"
parent="daoTemplate"/> <bean id="checkDao"
class="org.crazyit.hrsystem.dao.impl.CheckBackDaoHibernate"
parent="daoTemplate"/> <bean id="payDao"
class="org.crazyit.hrsystem.dao.impl.PaymentDaoHibernate"
parent="daoTemplate"/></beans>
struts.xml文件:<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- Struts2配置文件的根元素 -->
<struts>
<!-- 配置了系列常量 -->
<constant name="struts.custom.i18n.resources" value="resource"/>
<constant name="struts.i18n.encoding" value="GBK"/>
<constant name="struts.devMode" value="true"/>
<package name="default" extends="struts-default">
<interceptors>
<!-- 配置普通员工角色的权限检查拦截器 -->
<interceptor name="empAuth" class=
"org.crazyit.hrsystem.action.authority.EmpAuthorityInterceptor"/>
<!-- 配置经理角色的权限检查拦截器 -->
<interceptor name="mgrAuth" class=
"org.crazyit.hrsystem.action.authority.MgrAuthorityInterceptor"/>
<!-- 配置普通员工的默认的拦截器栈 -->
<interceptor-stack name="empStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="empAuth"/>
</interceptor-stack>
<!-- 配置经理的默认的拦截器栈 -->
<interceptor-stack name="mgrStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="mgrAuth"/>
</interceptor-stack>
</interceptors> <!-- 定义全局Result映射 -->
<global-results>
<!-- 定义sql、root两个异常对应的视图页 -->
<result name="business">/WEB-INF/content/error.jsp</result>
<result name="root">/WEB-INF/content/error.jsp</result>
<!-- 定义login逻辑视图对应的视图资源 -->
<result name="login">/WEB-INF/content/login.jsp</result>
</global-results> <!-- 定义全局异常映射 -->
<global-exception-mappings>
<!-- 当Action中遇到HrException异常时,
系统将转入name为business的结果中 -->
<exception-mapping
exception="org.crazyit.hrsystem.exception.HrException"
result="business"/>
<!-- 当Action中遇到Exception异常时,
系统将转入name为root的结果中 -->
<exception-mapping exception="java.lang.Exception"
result="root"/>
</global-exception-mappings><!--============================下面是员工角色的Action========================-->
<!-- 定义处理登出请求的Action -->
<action name="logout"
class="org.crazyit.hrsystem.action.LogoutAction">
<result>/WEB-INF/content/main.jsp</result>
</action>
<!-- 定义处理登录系统的的Action -->
<action name="processLogin"
class="org.crazyit.hrsystem.action.LoginAction">
<result name="input">/WEB-INF/content/login.jsp</result>
<result name="mgr">/WEB-INF/content/manager/index.jsp</result>
<result name="emp">/WEB-INF/content/employee/index.jsp</result>
<result name="error">/WEB-INF/content/login.jsp</result>
</action>
<!-- 进入打卡 -->
<action name="*Punch"
class="org.crazyit.hrsystem.action.PunchAction">
<interceptor-ref name="empStack"/>
<result>/WEB-INF/content/{1}/punch.jsp</result>
</action> <!-- 处理上班打卡 -->
<action name="*Come" method="come"
class="org.crazyit.hrsystem.action.ProcessPunchAction">
<interceptor-ref name="empStack"/>
<result>/WEB-INF/content/{1}/index.jsp</result>
</action>
<!-- 处理下班打卡 -->
<action name="*Leave" method="leave"
class="org.crazyit.hrsystem.action.ProcessPunchAction">
<interceptor-ref name="empStack"/>
<result>/WEB-INF/content/{1}/index.jsp</result>
</action>
<!-- 查看自己的非正常出勤 -->
<action name="viewUnPunch"
class="org.crazyit.hrsystem.action.ViewUnAttendAction">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="empAuth"/>
<result>/WEB-INF/content/employee/viewUnAttend.jsp</result>
</action> <!-- 进入异动申请 -->
<action name="appChange"
class="org.crazyit.hrsystem.action.AppChangeAction">
<interceptor-ref name="store">
<param name="operationMode">RETRIEVE</param>
</interceptor-ref>
<interceptor-ref name="basicStack"/>
<interceptor-ref name="empAuth"/>
<result>/WEB-INF/content/employee/appChange.jsp</result>
</action><!-- 提交异动申请 -->
<action name="processApp"
class="org.crazyit.hrsystem.action.ProcessAppAction">
<interceptor-ref name="store">
<param name="operationMode">STORE</param>
</interceptor-ref>
<interceptor-ref name="empStack"/>
<result name="input" type="redirect">
/appChange.action?attid=${attId}</result>
<result>/WEB-INF/content/employee/index.jsp</result>
</action> <!-- 查看本人工资的Action -->
<action name="view*Salary"
class="org.crazyit.hrsystem.action.ViewSalaryAction">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="empAuth"/>
<result>/WEB-INF/content/{1}/viewSalary.jsp</result>
</action><!--============================下面是经理角色的Action========================-->
<action name="viewDeptSal"
class="org.crazyit.hrsystem.action.ViewDeptAction">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="mgrAuth"/>
<result>/WEB-INF/content/manager/viewDeptSal.jsp</result>
</action> <!-- 经理查看员工 -->
<action name="viewEmp"
class="org.crazyit.hrsystem.action.ViewEmpAction">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="mgrAuth"/>
<result>/WEB-INF/content/manager/viewEmp.jsp</result>
</action> <!-- 经理查看申请 -->
<action name="viewApp"
class="org.crazyit.hrsystem.action.ViewAppAction">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="mgrAuth"/>
<result>/WEB-INF/content/manager/viewApps.jsp</result>
</action> <!-- 进入添加员工 -->
<action name="addEmp">
<interceptor-ref name="mgrStack"/>
<result>/WEB-INF/content/manager/addEmp.jsp</result>
</action> <!-- 经理增加员工 -->
<action name="processAdd"
class="org.crazyit.hrsystem.action.AddEmpAction">
<!-- 使用系统默认的拦截器栈 -->
<interceptor-ref name="mgrStack"/>
<!-- 使用防刷新的token拦截器 -->
<interceptor-ref name="token"/>
<!-- 定义重复提交转向的视图,该逻辑视图名必须是invalid.token -->
<result name="invalid.token">/WEB-INF/content/manager/addEmp.jsp</result>
<result name="input">/WEB-INF/content/manager/addEmp.jsp</result>
<result name="failure">/WEB-INF/content/manager/addEmp.jsp</result>
<result>/WEB-INF/content/manager/index.jsp</result>
</action> <!-- 经理处理申请 -->
<action name="check"
class="org.crazyit.hrsystem.action.CheckAppAction">
<interceptor-ref name="mgrStack"/>
<result type="chain">viewApp</result>
</action> <action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
</struts>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>登录系统</title>
<s:head/>
</head>
<body>
<%@include file="header.jsp"%>
<table width=780 align="center"
background="${pageContext.request.contextPath}/images/bodybg.jpg">
<tr >
<td >
请输入用户名和密码来登录<br />
<s:if test="tip!=null">
<div class="error">
<s:property value="tip"/>
</div>
</s:if>
<s:actionerror cssClass="error"/>
<div align="center">
<s:form action="processLogin">
<s:textfield name="manager.name" label="用户名"/>
<s:textfield name="manager.pass" label="密码"/>
<s:textfield name="vercode" label="验证码"/>
<tr><td colspan="2">
<s:submit value="登录" theme="simple"/><s:reset theme="simple" value="重填"/>
</td></tr>
</s:form>
</div>
验证码:<img name="d" src="authImg">
</td>
</tr>
</table>
<%@include file="footer.jsp"%>
</body>
</html>处理登录的action:package org.crazyit.hrsystem.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.opensymphony.xwork2.*;
import org.apache.struts2.interceptor.*;import org.crazyit.hrsystem.service.EmpManager;
import org.crazyit.hrsystem.domain.*;
import org.crazyit.hrsystem.exception.HrException;
import org.crazyit.hrsystem.action.base.EmpBaseAction;
import static org.crazyit.hrsystem.service.EmpManager.*;/**
* Description:
* <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
* <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee [email protected]
* @version 1.0
*/
public class LoginAction
extends EmpBaseAction
{
//定义一个常量作为员工登录成功的Result名
private final String EMP_RESULT = "emp";
//定义一个常量作为经理登录成功的Result名
private final String MGR_RESULT = "mgr";
//封装请求参数
private Manager manager;
//登录的验证码
private String vercode;
//处理登录后的提示信息
private String tip;
//manager属性的setter和getter方法
public void setManager(Manager manager)
{
this.manager = manager;
}
public Manager getManager()
{
return this.manager;
} //vercode属性的setter和getter方法
public void setVercode(String vercode)
{
this.vercode = vercode;
}
public String getVercode()
{
return this.vercode;
} //tip属性的setter和getter方法
public void setTip(String tip)
{
this.tip = tip;
}
public String getTip()
{
return this.tip;
}
//处理用户请求
public String execute()
throws Exception
{
//创建ActionContext实例
ActionContext ctx = ActionContext.getContext();
//获取HttpSession中的rand属性
String ver2 = (String)ctx.getSession().get("rand");
if (vercode.equalsIgnoreCase(ver2))
{
//调用业务逻辑方法来处理登录请求
int result = mgr.validLogin(getManager());
//登录结果为普通员工
if (result == LOGIN_EMP)
{
ctx.getSession().put(WebConstant.USER
, manager.getName());
ctx.getSession().put(WebConstant.LEVEL
, WebConstant.EMP_LEVEL);
setTip("您已经成功登录系统");
return EMP_RESULT;
}
//登录结果为经理
else if (result == LOGIN_MGR)
{
ctx.getSession().put(WebConstant.USER
, manager.getName());
ctx.getSession().put(WebConstant.LEVEL
, WebConstant.MGR_LEVEL);
setTip("您已经成功登录系统");
return MGR_RESULT;
}
//用户名和密码不匹配
else
{
setTip("用户名/密码不匹配");
return ERROR;
}
}
//验证码不匹配
else
{
setTip("验证码不匹配,请重新输入");
return ERROR;
}
}
}
父类:EmpBaseAction
package org.crazyit.hrsystem.action.base;import com.opensymphony.xwork2.ActionSupport;import org.crazyit.hrsystem.service.EmpManager;/**
* Description:
* <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
* <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee [email protected]
* @version 1.0
*/
public class EmpBaseAction
extends ActionSupport
{
//依赖的业务逻辑组件
protected EmpManager mgr;
//依赖注入业务逻辑组件所必须的setter方法
public void setEmpManager(EmpManager mgr)
{
this.mgr = mgr;
}
}
LoginAction中用到的属性类:Managerpackage org.crazyit.hrsystem.domain;import java.io.Serializable;
import java.util.*;/**
* Description:
* <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
* <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee [email protected]
* @version 1.0
*/
public class Manager
extends Employee implements Serializable
{
private static final long serialVersionUID = 48L;
//该经理管理的部门
private String dept;
//该经理对应的所有员工
private Set<Employee> employees = new HashSet<Employee>();
//该经理签署的所有批复
private Set<CheckBack> checks = new HashSet<CheckBack>();
//无参数的构造器
public Manager()
{
}
//初始化全部属性的构造器
public Manager(String dept , Set<Employee> employees
, Set<CheckBack> checks)
{
this.dept = dept;
this.employees = employees;
this.checks = checks;
} //dept属性的setter和getter方法
public void setDept(String dept)
{
this.dept = dept;
}
public String getDept()
{
return this.dept;
} //employees属性的setter和getter方法
public void setEmployees(Set<Employee> employees)
{
this.employees = employees;
}
public Set<Employee> getEmployees()
{
return this.employees;
} //checks属性的setter和getter方法
public void setChecks(Set<CheckBack> checks)
{
this.checks = checks;
}
public Set<CheckBack> getChecks()
{
return this.checks;
}
}
我的Email:[email protected] 谢谢
我的 e-mail:[email protected] QQ:904263803