当前位置: 编程技术>移动开发
本页文章导读:
▪基础匡扶教程:XCode 4.2的Storyboard 基础辅助教程:XCode 4.2的Storyboard
基础辅助教程:XCode 4.2的Storyboard今天我准备做一个短暂的辅助教程关于怎么用Xcode 4.2里边的Storyboard.当storyboard出现的时候相比于以前IB的工作方式有些让人茫.........
▪ 施用phantom-limb 模拟Touch 事件 使用phantom-limb 模拟Touch 事件
1下载 phantom-limb.js2.使用2.1 index.html
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<link rel="stylesheet" href="/touch/resources/css/sencha-touch.........._/font__/div__div_ ▪ 3大框架复习 _font style=/index.html"font-size:10pt;font-weight:normal;color:black;"> 三大框架复习
Struts1.写web.xml配置文件,当服务器启动时,会先读取web.xml配置文件,此时加载ActionServlet类,这个类是Struts的入口。以.do结尾的URL都会被映射到ActionServlet中,它根据struts-confi.........
[1]基础匡扶教程:XCode 4.2的Storyboard
来源: 互联网 发布时间: 2014-02-18
基础辅助教程:XCode 4.2的Storyboard
基础辅助教程:XCode 4.2的Storyboard
今天我准备做一个短暂的辅助教程关于怎么用Xcode 4.2里边的Storyboard.当storyboard出现的时候相比于以前IB的工作方式有些让人茫然不解, 我也感觉苹果在这个技术上真的打了一个曲线球.
实际上当你开始使用它的时候并不是完全那么糟糕,这个教程将会展现用一个按钮怎么连接两个视图控制器, 在这个过程中不会有一行代码.
废话就说这么多,现在让我们进入正题,马上建立一个新的Xcode工程.
1.建立Demo工程
我们将用Single View Application模板,我们给它取名为Demo.为了简单起见我们这个教程只针对于iPhone. 记住勾选"use Storyboard"和"Use Automatic Reference Counting"这两个选项(虽然在这次教程里我并不会讲解ARC, 注:ARC也就是IOS5内存管理的自动引用计数技术). 我不准备给我的类加任何前缀所以我把那一个位置留空.
现在你应该拥有了你的新的空工程,包含你的App Delegate, 一个single View Controller, 和一个storyboard文件.
在我们开始storyboard 的学习之前,让我们先建立一个新的view controller. 右击Demo组(就在App Delegage的上面),然后选择"New File", 在Cocoa Touch组里选择UIViewController subclass 然后我们给它取名为"NewViewController"
确保下边的两个选项都没有被标记.
现在你就有一个工程像下边这幅图的样子.
2.Storyboard
现在我们进入正题, storyboard将允许我们定义在我们应用程序中不同的视图之间的相互作用关系.在一个程序中你可以拥有一个或多个storyboard, 这并不是说你真正的需要它().让我们点击storyboard文件然后看看都有些什么.
首先我们看到我们的工程有了我们第一个view controller 而且也包含我们程序的入口点.
现在我们首先要做的就是添加一个navigation controller以便我们能够推入或弹出新的视图. 幸运的是Xcode我们提供了一个简单的做此事情的方法.
左键单击 View Controller的图片,然后在屏幕的顶部选择Editor menu,然后选择Embed In最后选择Navigation Controller. Xcode非常友好的我们加入了一个新的navigation controller 而且把所有的为了使它能够工作的后台工作都做好了.
谢谢Xcode,但是我想如果这个选项能够更明显一点它会更实用的.现在你拥有了两个box 在你的storyboard 上,如下图所示
非常棒!现在我们需要一个button来展示从一个视图转到另一个.所以现在让我们添加一个button到View Controller. 只需要托一个"rounded rect button"从对象列表里到view controller上(注意如果你的视图进行了缩放的话你是无法托项目到view上的);
让我们给这个button命名为"New View". 让我们也给navigation bar一个标题"Original View" ,我们可以双击导航条并输入.
现在我们需要一个新的View Controller 对象来展现我们的 "NewViewController", 在右侧托一个已经存在的viewController进来. 添加一个label写上比如"My New View"或什么其它的. 这样当我们测试把这个视图推入的时候我们就能知道了.现在你的soryboard应该看起来像下面这样
现在我们需要链接我们的view Controller 对象到我们的 "NewViewController" 子类.
选择你刚才托入的view controller然后选择Identity Inspector在右上方,选择第三个标签,从Class里选择"NewViewController". 最终, 我们需要告诉第一个视图的按钮,当它被点击的时候我们想要移入第二一个视图.简单的按住Ctrl然后从button托动到新的view controller.当我们做完这些时将会出现一个选项列表,有三个选项(push, modal 和custom).选择Push. 这是可行的因为我们有一个Navigation Controller在我们的工程里.如果我们没有在开始把navigation controller加进来,这样做是没有意义的,在运行的时候点击button将不会任何事情发生.不管怎么样,你还可以选择"modal"选项它并不需要navigation controller.
也注意当我们连接了两个视图以后, navigation bar将会出现在第二个视图.
你的最终的storyboard应该看起来像下边这个样子
现在如果你运行你的工程, 你将看到第一个视图, 点击按钮出现第二个视图.
可能唯一需要提到的就是如果我们需要给新的视图传送数据我们可以实现方法"prepareForSegue:sender:". 当然你也可以从视图返回数据用delegates就像我们平时做的那样.
基础辅助教程:XCode 4.2的Storyboard
今天我准备做一个短暂的辅助教程关于怎么用Xcode 4.2里边的Storyboard.当storyboard出现的时候相比于以前IB的工作方式有些让人茫然不解, 我也感觉苹果在这个技术上真的打了一个曲线球.
实际上当你开始使用它的时候并不是完全那么糟糕,这个教程将会展现用一个按钮怎么连接两个视图控制器, 在这个过程中不会有一行代码.
废话就说这么多,现在让我们进入正题,马上建立一个新的Xcode工程.
1.建立Demo工程
我们将用Single View Application模板,我们给它取名为Demo.为了简单起见我们这个教程只针对于iPhone. 记住勾选"use Storyboard"和"Use Automatic Reference Counting"这两个选项(虽然在这次教程里我并不会讲解ARC, 注:ARC也就是IOS5内存管理的自动引用计数技术). 我不准备给我的类加任何前缀所以我把那一个位置留空.
现在你应该拥有了你的新的空工程,包含你的App Delegate, 一个single View Controller, 和一个storyboard文件.
在我们开始storyboard 的学习之前,让我们先建立一个新的view controller. 右击Demo组(就在App Delegage的上面),然后选择"New File", 在Cocoa Touch组里选择UIViewController subclass 然后我们给它取名为"NewViewController"
确保下边的两个选项都没有被标记.
现在你就有一个工程像下边这幅图的样子.
2.Storyboard
现在我们进入正题, storyboard将允许我们定义在我们应用程序中不同的视图之间的相互作用关系.在一个程序中你可以拥有一个或多个storyboard, 这并不是说你真正的需要它().让我们点击storyboard文件然后看看都有些什么.
首先我们看到我们的工程有了我们第一个view controller 而且也包含我们程序的入口点.
现在我们首先要做的就是添加一个navigation controller以便我们能够推入或弹出新的视图. 幸运的是Xcode我们提供了一个简单的做此事情的方法.
左键单击 View Controller的图片,然后在屏幕的顶部选择Editor menu,然后选择Embed In最后选择Navigation Controller. Xcode非常友好的我们加入了一个新的navigation controller 而且把所有的为了使它能够工作的后台工作都做好了.
谢谢Xcode,但是我想如果这个选项能够更明显一点它会更实用的.现在你拥有了两个box 在你的storyboard 上,如下图所示
非常棒!现在我们需要一个button来展示从一个视图转到另一个.所以现在让我们添加一个button到View Controller. 只需要托一个"rounded rect button"从对象列表里到view controller上(注意如果你的视图进行了缩放的话你是无法托项目到view上的);
让我们给这个button命名为"New View". 让我们也给navigation bar一个标题"Original View" ,我们可以双击导航条并输入.
现在我们需要一个新的View Controller 对象来展现我们的 "NewViewController", 在右侧托一个已经存在的viewController进来. 添加一个label写上比如"My New View"或什么其它的. 这样当我们测试把这个视图推入的时候我们就能知道了.现在你的soryboard应该看起来像下面这样
现在我们需要链接我们的view Controller 对象到我们的 "NewViewController" 子类.
选择你刚才托入的view controller然后选择Identity Inspector在右上方,选择第三个标签,从Class里选择"NewViewController". 最终, 我们需要告诉第一个视图的按钮,当它被点击的时候我们想要移入第二一个视图.简单的按住Ctrl然后从button托动到新的view controller.当我们做完这些时将会出现一个选项列表,有三个选项(push, modal 和custom).选择Push. 这是可行的因为我们有一个Navigation Controller在我们的工程里.如果我们没有在开始把navigation controller加进来,这样做是没有意义的,在运行的时候点击button将不会任何事情发生.不管怎么样,你还可以选择"modal"选项它并不需要navigation controller.
也注意当我们连接了两个视图以后, navigation bar将会出现在第二个视图.
你的最终的storyboard应该看起来像下边这个样子
现在如果你运行你的工程, 你将看到第一个视图, 点击按钮出现第二个视图.
可能唯一需要提到的就是如果我们需要给新的视图传送数据我们可以实现方法"prepareForSegue:sender:". 当然你也可以从视图返回数据用delegates就像我们平时做的那样.
[2] 施用phantom-limb 模拟Touch 事件
来源: 互联网 发布时间: 2014-02-18
使用phantom-limb 模拟Touch 事件
1
下载 phantom-limb.js
2.
使用
2.1
index.html
注意phantom-limb位置.
2.2
app.js
3
测试
3.1
测试结果在Canvas上可以正常写字,表示通过.
在Chrome测试通过.
1
下载 phantom-limb.js
2.
使用
2.1
index.html
<!DOCTYPE html> <html> <head> <title>Hello World</title> <link rel="stylesheet" href="/touch/resources/css/sencha-touch.css" type="text/css"> <script type="text/javascript" src="/touch/sencha-touch-all-debug.js"></script> <script type="text/javascript" src="/blog_article/app.js"></script> </head> <body></body> <script src="/phantom-limb/phantom-limb.js" type="text/javascript"></script> </html>
注意phantom-limb位置.
2.2
app.js
/** * @example miniphone */ Ext.application({ name: 'App', launch: function() { Ext.create('Ext.Panel', { fullscreen: true, html: '<div id="canvasCt"><canvas id="canvas" width="600" height="600" /></div>' }); var canvas = Ext.get('canvas'); var context = canvas.dom.getContext('2d'); context.lineWidth = 4; var drawer = { isDrawing : false, touchstart : function(e) { e.preventDefault(); var coors = { x : e.targetTouches[0].pageX, y : e.targetTouches[0].pageY }; context.beginPath(); context.moveTo(coors.x, coors.y); this.isDrawing = true; } , touchmove : function(e) { var coors = { x : e.targetTouches[0].pageX, y : e.targetTouches[0].pageY }; if (this.isDrawing) { context.lineTo(coors.x, coors.y); context.stroke(); } } , touchend : function(e) { if (this.isDrawing) { this.isDrawing = false; } } } // 在这里可以直接监听touch事件了. canvas.dom.addEventListener('touchstart', drawer.touchstart, false); canvas.dom.addEventListener('touchmove', drawer.touchmove, false); canvas.dom.addEventListener('touchend', drawer.touchend, false); } });
3
测试
3.1
测试结果在Canvas上可以正常写字,表示通过.
在Chrome测试通过.
[3] 3大框架复习
来源: 互联网 发布时间: 2014-02-18
三大框架复习
Struts
1.写web.xml配置文件,当服务器启动时,会先读取web.xml配置文件,此时加载ActionServlet类,这个类是Struts的入口。以.do结尾的URL都会被映射到ActionServlet中,它根据struts-config.xml中的配置,将请求分配到指定的action上。运行代码在不同的action实现。
<servlet>
<servlet-name>actionservlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>//用到struts时就必须写加载struts-config.xml配置文件
</servlet>
<servlet-mapping>
<servlet-name> actionservlet </servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2.写用到的JavaBean类
3.写一个formbean的类 让它继承actionform类
4.写个stuts-config.xml文件 写在web-info下面
5.让写的action类继承Action或dispatchedAction
<struts-config>
<form-beans>
<form-bean name="fileform" type="com.fit.struts.formfile.Form" />
</form-beans>
<global-forwards>
<forward name="tolist" path="/WEB-INF/jsp/EmpList.jsp" />
</global-forwards>
<action-mappings>
<action path="/fileformaction" type="com.fit.struts.action.FileFormAction"
scope="request" name="fileform" parameter="m">
<forward name="success" path="/WEB-INF/page/Seccess.jsp" />
</action>
</action-mappings>
</form-beans>
</struts-config>
当struts-config.xml文件被加载后:
1.actionservlet将按配置文件,将提交的表单信息添加到form-bean中,form-bean中的属性必须和表单中的一致,可以是一个实体类。
2.actionservlet按照配置文件,将请求分配到指定的action上。 parameter是用在action类继承dispatchaction里
Hibernate
1.在javabean类中写一个将javabean和表连接的配置文件 employee.hbm.xml
<hibernate-mapping package="com.fit.entity">
<class name="Employee" table="employee">
<id name="email">//主键
<generator ></generator>
</id>
<property name="ename" />
<property name="idcard" />
<property name="gender" />
<property name="birthday" />
<property name="address" />
<property name="mobile" />
<property name="hometel" column="home_tel" type=”String”/>
<property name="fax" />
<property name="intro" />
<property name="esource" />
<property name="photo" />
</class>
</hibernate-mapping>
2.在src根目录下建个hibernate.cfg.xml文件
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">
jdbc:oracle:thin:@127.0.0.1:1521:FITDEMO
</property>
<property name="connection.username">zxl</property>
<property name="connection.password">1988311</property>
<property name="dialect">org.hibernate.dialect.Oracle9iDialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<mapping resource="com/fit/entity/Employee.hbm.xml" />
</session-factory>
</hibernate-configuration>
在给文件中 配置数据库连接信息 配置方言
<mapping resource="com/fit/entity/Employee.hbm.xml" /> 该配置是映射Employee.hbm.xml
3.建个HibernateUtil的工具类 通过sessionfactory的到session类
public class HibernateUtil {
private static final SessionFactory factory;
static {
factory = new Configuration().configure().buildSessionFactory();
}
public static Session getCurrentSession() {
return factory.getCurrentSession();
}
}
4.在过滤器中创建事物并提交
5.修改dao层中的类 session.
Spring+Hibernate
1.写application.xml的配置文件 写在src的根目录下 将连接数据库 得到sessionfactory类
<beans>
<bean id="data"
>
//得到DriverManagerDataSource类
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:FITDEMO" />
<property name="username" value="cui" />
<property name="password" value="cui" />
</bean>
<bean id="factory"
>
<property name="dataSource" ref="data" />//得到sessionfactory类
<property name="mappingResources">
<list>
<value>com/_11fit/struts/bean/Employee.hbm.xml</value>
//连接Employee.hbm.xml
</list>
</property>
</bean>
<bean id="employeeDao" >
<property name="sessionFactory" ref="factory" />//得到一个dao类
</bean>
</beans>
2.dao层中连接数据库的类要继承HibernateDaoSupport接口
3.修改dao类 用getHibernateTemplate()模板
getHibernateTemplate().delete(e) 删除
getHibernateTemplate().loadAll(Employee.class) 得到全部信息
getHibernateTemplate().get(Employee.class, email) 得到一条信息
getHibernateTemplate().save(emp) 提交 保存信息
getHibernateTemplate().update(emp) 修改
4.修改action类 通过ApplicationContext来得到bean
private ApplicationContext context = new ClassPathXmlApplicationContext(
"application.xml");//找到application.xml文件
private EmployeeDao edao = (EmployeeDao) context.getBean("employeeDao");
//employeeDao与配置文件中的 红字相同 得到一个employeeDao类的实例
Spring+Struts(方法一 代理bean)
1. 修改struts-config.xml 加一个托管的插件(加),加载文件时,先找代理的action bean
通过代理bean 找到真正的action
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />//关联applicationContext.xml
</plug-in>
2. 修改applicationContext.xml的配置文件(加)
<bean name="/emp" >
<property name="edao" ref="employeeDao" />
</bean>//将真正的action放到IoC容器中
3. 将action中的type改了
<action path="/emp" type="org.springframework.web.struts.DelegatingActionProxy"
name="newform" scope="request" parameter="m">
<forward name="false" path="/WEB-INF/jsp/False.jsp" />
<forward name="updataemp" path="/WEB-INF/jsp/Updata.jsp" />
</action>
4. 修改action类 通过依赖注入的参数注入方法
private EmployeeDAO edao;//定义的edao要和applicationContext.xml中的bean 配置相同
(红字)
public void setEdao(EmployeeDAO dao) {
edao = dao;
}
Spring+Struts(方法一继承ActionSupport)
1. 注册ServletContext监听器 在web.xml中添加 得到ContextLoaderListener类
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2. action类继承ActionSupport类(获DispatchActionSupport类)
3. 在Action内部获得ApplicationContext,查找所依赖的Bean
ApplicationContext context = getWebApplicationContext();
EmployeeDAO edao = (EmployeeDAO) context.getBean("employeeDao");
Struts
1.写web.xml配置文件,当服务器启动时,会先读取web.xml配置文件,此时加载ActionServlet类,这个类是Struts的入口。以.do结尾的URL都会被映射到ActionServlet中,它根据struts-config.xml中的配置,将请求分配到指定的action上。运行代码在不同的action实现。
<servlet>
<servlet-name>actionservlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>//用到struts时就必须写加载struts-config.xml配置文件
</servlet>
<servlet-mapping>
<servlet-name> actionservlet </servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2.写用到的JavaBean类
3.写一个formbean的类 让它继承actionform类
4.写个stuts-config.xml文件 写在web-info下面
5.让写的action类继承Action或dispatchedAction
<struts-config>
<form-beans>
<form-bean name="fileform" type="com.fit.struts.formfile.Form" />
</form-beans>
<global-forwards>
<forward name="tolist" path="/WEB-INF/jsp/EmpList.jsp" />
</global-forwards>
<action-mappings>
<action path="/fileformaction" type="com.fit.struts.action.FileFormAction"
scope="request" name="fileform" parameter="m">
<forward name="success" path="/WEB-INF/page/Seccess.jsp" />
</action>
</action-mappings>
</form-beans>
</struts-config>
当struts-config.xml文件被加载后:
1.actionservlet将按配置文件,将提交的表单信息添加到form-bean中,form-bean中的属性必须和表单中的一致,可以是一个实体类。
2.actionservlet按照配置文件,将请求分配到指定的action上。 parameter是用在action类继承dispatchaction里
Hibernate
1.在javabean类中写一个将javabean和表连接的配置文件 employee.hbm.xml
<hibernate-mapping package="com.fit.entity">
<class name="Employee" table="employee">
<id name="email">//主键
<generator ></generator>
</id>
<property name="ename" />
<property name="idcard" />
<property name="gender" />
<property name="birthday" />
<property name="address" />
<property name="mobile" />
<property name="hometel" column="home_tel" type=”String”/>
<property name="fax" />
<property name="intro" />
<property name="esource" />
<property name="photo" />
</class>
</hibernate-mapping>
2.在src根目录下建个hibernate.cfg.xml文件
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">
jdbc:oracle:thin:@127.0.0.1:1521:FITDEMO
</property>
<property name="connection.username">zxl</property>
<property name="connection.password">1988311</property>
<property name="dialect">org.hibernate.dialect.Oracle9iDialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<mapping resource="com/fit/entity/Employee.hbm.xml" />
</session-factory>
</hibernate-configuration>
在给文件中 配置数据库连接信息 配置方言
<mapping resource="com/fit/entity/Employee.hbm.xml" /> 该配置是映射Employee.hbm.xml
3.建个HibernateUtil的工具类 通过sessionfactory的到session类
public class HibernateUtil {
private static final SessionFactory factory;
static {
factory = new Configuration().configure().buildSessionFactory();
}
public static Session getCurrentSession() {
return factory.getCurrentSession();
}
}
4.在过滤器中创建事物并提交
5.修改dao层中的类 session.
Spring+Hibernate
1.写application.xml的配置文件 写在src的根目录下 将连接数据库 得到sessionfactory类
<beans>
<bean id="data"
>
//得到DriverManagerDataSource类
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:FITDEMO" />
<property name="username" value="cui" />
<property name="password" value="cui" />
</bean>
<bean id="factory"
>
<property name="dataSource" ref="data" />//得到sessionfactory类
<property name="mappingResources">
<list>
<value>com/_11fit/struts/bean/Employee.hbm.xml</value>
//连接Employee.hbm.xml
</list>
</property>
</bean>
<bean id="employeeDao" >
<property name="sessionFactory" ref="factory" />//得到一个dao类
</bean>
</beans>
2.dao层中连接数据库的类要继承HibernateDaoSupport接口
3.修改dao类 用getHibernateTemplate()模板
getHibernateTemplate().delete(e) 删除
getHibernateTemplate().loadAll(Employee.class) 得到全部信息
getHibernateTemplate().get(Employee.class, email) 得到一条信息
getHibernateTemplate().save(emp) 提交 保存信息
getHibernateTemplate().update(emp) 修改
4.修改action类 通过ApplicationContext来得到bean
private ApplicationContext context = new ClassPathXmlApplicationContext(
"application.xml");//找到application.xml文件
private EmployeeDao edao = (EmployeeDao) context.getBean("employeeDao");
//employeeDao与配置文件中的 红字相同 得到一个employeeDao类的实例
Spring+Struts(方法一 代理bean)
1. 修改struts-config.xml 加一个托管的插件(加),加载文件时,先找代理的action bean
通过代理bean 找到真正的action
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />//关联applicationContext.xml
</plug-in>
2. 修改applicationContext.xml的配置文件(加)
<bean name="/emp" >
<property name="edao" ref="employeeDao" />
</bean>//将真正的action放到IoC容器中
3. 将action中的type改了
<action path="/emp" type="org.springframework.web.struts.DelegatingActionProxy"
name="newform" scope="request" parameter="m">
<forward name="false" path="/WEB-INF/jsp/False.jsp" />
<forward name="updataemp" path="/WEB-INF/jsp/Updata.jsp" />
</action>
4. 修改action类 通过依赖注入的参数注入方法
private EmployeeDAO edao;//定义的edao要和applicationContext.xml中的bean 配置相同
(红字)
public void setEdao(EmployeeDAO dao) {
edao = dao;
}
Spring+Struts(方法一继承ActionSupport)
1. 注册ServletContext监听器 在web.xml中添加 得到ContextLoaderListener类
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2. action类继承ActionSupport类(获DispatchActionSupport类)
3. 在Action内部获得ApplicationContext,查找所依赖的Bean
ApplicationContext context = getWebApplicationContext();
EmployeeDAO edao = (EmployeeDAO) context.getBean("employeeDao");
最新技术文章: