﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Jblue-文章分类-J2EE</title><link>http://www.blogjava.net/Jblue/category/5161.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:07:43 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:07:43 GMT</pubDate><ttl>60</ttl><item><title>read AppFuse 1-初始化</title><link>http://www.blogjava.net/Jblue/articles/21370.html</link><dc:creator>Jblue</dc:creator><author>Jblue</author><pubDate>Fri, 25 Nov 2005 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/Jblue/articles/21370.html</guid><wfw:comment>http://www.blogjava.net/Jblue/comments/21370.html</wfw:comment><comments>http://www.blogjava.net/Jblue/articles/21370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Jblue/comments/commentRss/21370.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Jblue/services/trackbacks/21370.html</trackback:ping><description><![CDATA[<P align=left><SPAN lang=EN-US><SPAN>1．<SPAN>&nbsp; </SPAN></SPAN><SPAN>初始化配置信息：<SPAN lang=EN-US>Appfuse</SPAN>利用监听器，在应用程序启动时，初始化配置信息<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN></SPAN>
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN>★ 监听器<SPAN lang=EN-US>StartupListener</SPAN>功能：取得<SPAN lang=EN-US>DAO.TYPE</SPAN>信息和角色信息，存入全局应用环境上下文，<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN>初始化<SPAN lang=EN-US>Spring</SPAN>，使之可用。</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN>★ 应用：<SPAN lang=EN-US>web.xml 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp; </SPAN>&lt;listener&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;</SPAN><SPAN> </SPAN>&lt;listener-class&gt;org.dudu.webapp.listener.StartupListener&lt;/listener-class&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;/listener&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN>★ </SPAN><SPAN lang=EN-US>StartupListener</SPAN><SPAN lang=EN-US> </SPAN><SPAN>监听器：继承于<SPAN lang=EN-US>Spring</SPAN>的</SPAN><SPAN lang=EN-US> ContextLoaderListener</SPAN><SPAN>和<SPAN lang=EN-US>Sevelet</SPAN>的<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US>ServletContextListener</SPAN><SPAN>，配置于<SPAN lang=EN-US>Web.xml</SPAN>中。<SPAN lang=EN-US> </SPAN>
<P></P>
<P align=left><SPAN>★ </SPAN><SPAN>说明：</SPAN><SPAN>凡是继承<SPAN lang=EN-US>ServletContextListener</SPAN>接口的类，在<SPAN lang=EN-US>web</SPAN>容器启动时调用其<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>contextInitialized</SPAN><SPAN>方法进行初始化，当容器关闭时调用其<SPAN lang=EN-US>contextDestroyed</SPAN>的方<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN>法进行销毁，我们可以利用这个特性初始化一些信息。<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>★ 程序说明：（主要代码）<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B><SPAN lang=EN-US>public</SPAN></B><SPAN lang=EN-US> <B>class</B> StartupListener <B>extends</B> ContextLoaderListener</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><B>implements</B> ServletContextListener {</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B><SPAN>public</SPAN></B><SPAN> <B>void</B> contextInitialized(ServletContextEvent event) {</SPAN> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN>容器启动时，自动调用<SPAN lang=EN-US>contextInitialized</SPAN>函数。<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN>取得全局<SPAN lang=EN-US>Application Scope </SPAN>环境上下文<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>ServletContext context = event.getServletContext();</SPAN> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>Map config = (HashMap) context.getAttribute(Constants.CONFIG);</SPAN> </SPAN>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN>将<SPAN lang=EN-US>DAO_<SPAN>TYPE_HIBERNATE = "hibernate"</SPAN>写入<SPAN lang=EN-US>ServletContext</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config.put(Constants.DAO_TYPE, daoType);</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>context.setAttribute(Constants.CONFIG, config);</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN></SPAN>
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN>调用<SPAN lang=EN-US>setupContext(context)</SPAN>函数初始化<SPAN lang=EN-US>Spring 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B><SPAN>public</SPAN></B><SPAN> <B>static</B> <B>void</B> setupContext(ServletContext context) {</SPAN> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN>初始化<SPAN lang=EN-US>Spring</SPAN>环境上下文，为<SPAN lang=EN-US>getBean</SPAN>作准备，并且将<SPAN lang=EN-US>ServletContext 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;</SPAN>//</SPAN><SPAN>交给<SPAN lang=EN-US>Spring</SPAN>管理<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>ApplicationContext ctx = </SPAN>
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>WebApplicationContextUtils.getRequiredWebApplicationContext(context);</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//<SPAN> LookupManager</SPAN><SPAN>为接口类，提供统一的调用接口<SPAN lang=EN-US><SPAN>&nbsp; </SPAN>
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN>通过<SPAN lang=EN-US>Ico</SPAN>反射注入，查找<SPAN lang=EN-US>lookupManager</SPAN>和<SPAN lang=EN-US>Dao</SPAN>属性。<B><SPAN lang=EN-US>(1)</SPAN></B><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><B><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></B><SPAN lang=EN-US>LookupManager mgr = (LookupManager) ctx.getBean("lookupManager");</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN>取得角色信息，存入<SPAN lang=EN-US>ServletContext scope</SPAN>中。<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>context.setAttribute(Constants.AVAILABLE_ROLES, mgr.getAllRoles());</SPAN> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>} 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><B><SPAN lang=EN-US><SPAN>(1)</SPAN></B><SPAN>的说明：在配置文件中取值，动态加载<SPAN lang=EN-US>LookupManagerImpl</SPAN>类<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>客户面对接口<SPAN lang=EN-US>LookupManager</SPAN><SPAN lang=EN-US>,</SPAN>底层实现为<SPAN lang=EN-US>LookupManagerImpl</SPAN>，<SPAN lang=EN-US>Spring</SPAN>的一大<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>特点：自然的面向接口编程。<SPAN lang=EN-US>LookupManagerImpl</SPAN>是<SPAN lang=EN-US>POJO</SPAN>的管理类，真正的<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>数据操作委派给它的引用<SPAN lang=EN-US>LookupDAO</SPAN>的具体实现类<SPAN lang=EN-US>LookupDAOHibernate</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US>Spring</SPAN><SPAN>配置文件</SPAN><FONT face="Times New Roman" size=3> </FONT><SPAN lang=EN-US>applicationContext-service.xml 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US>&lt;bean id="lookupManager" class="org.dudu.service.impl.LookupManagerImpl"&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;property name="lookupDAO"&gt;&lt;ref bean="lookupDAO"/&gt;&lt;/property&gt;</SPAN><B><SPAN lang=EN-US>(2)</SPAN></B><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;</SPAN>&lt;/bean&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><B><SPAN lang=EN-US>(2)</SPAN></B><SPAN>的说明：通过<SPAN lang=EN-US>Ico</SPAN>动态加载对象属性<SPAN lang=EN-US>LookupDAOHibernate</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN>Spring</SPAN><SPAN>配置文件：<SPAN lang=EN-US>applicationContext-hibernate.xml 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;!-- LookupDAO: Hibernate implementation --&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;bean id="lookupDAO" class="org.dudu.dao.hibernate.LookupDAOHibernate"&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>&lt;property name="sessionFactory"&gt;&lt;ref local="sessionFactory"/&gt;&lt;/property&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;</SPAN>&lt;/bean&gt;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><B><SPAN>public</SPAN></B><SPAN> <B>class</B> LookupManagerImpl <B>extends</B> BaseManager <B>implements</B> LookupManager {</SPAN> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><B>private</B> LookupDAO dao;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><B>public</B> <B>void</B> setLookupDAO(LookupDAO dao) {</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US>//Spring</SPAN><SPAN>动态注入<SPAN lang=EN-US>dao</SPAN>引用，从配置文件中取得具体的<SPAN lang=EN-US>lookupDAO</SPAN>，又一次的面向<SPAN lang=EN-US>//</SPAN>接口编程<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><B>this</B>.dao = dao;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><B>public</B> List getAllRoles() {</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>//<SPAN> LookupManagerImpl</SPAN><SPAN>将真正的数据操作委派个<SPAN lang=EN-US>LookupDAOHibernate</SPAN><B>（<SPAN lang=EN-US>3</SPAN>）</B><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>List roles = dao.getRoles();</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>List list = <B>new</B> ArrayList();</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Role role = <B>null</B>;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B>for</B> (<B>int</B> i = 0; i &lt; roles.size(); i++) {</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>role = (Role) roles.get(i);</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>list.add(<B>new</B> LabelValue(role.getName(), role.getName()));</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B>return</B> list;</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US>}</SPAN></P>
<P align=left><SPAN lang=EN-US>
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P><IMG alt="" src="http://blog.csdn.net/images/blog_csdn_net/dudutu/blog-manager.gif"></P>
<P></P>
<P align=left><SHAPETYPE id=_x0000_t62 adj="1350,25920" path="m3600,qx,3600l0@8@12@24,0@9,,18000qy3600,21600l@6,21600@15@27@7,21600,18000,21600qx21600,18000l21600@9@18@30,21600@8,21600,3600qy18000,l@7,0@21@33@6,xe" o:spt="62" coordsize="21600,21600"></SHAPETYPE><STROKE joinstyle="miter"></STROKE><FORMULAS></FORMULAS><F eqn="sum 10800 0 #0"></F><F eqn="sum 10800 0 #1"></F><F eqn="sum #0 0 #1"></F><F eqn="sum @0 @1 0"></F><F eqn="sum 21600 0 #0"></F><F eqn="sum 21600 0 #1"></F><F eqn="if @0 3600 12600"></F><F eqn="if @0 9000 18000"></F><F eqn="if @1 3600 12600"></F><F eqn="if @1 9000 18000"></F><F eqn="if @2 0 #0"></F><F eqn="if @3 @10 0"></F><F eqn="if #0 0 @11"></F><F eqn="if @2 @6 #0"></F><F eqn="if @3 @6 @13"></F><F eqn="if @5 @6 @14"></F><F eqn="if @2 #0 21600"></F><F eqn="if @3 21600 @16"></F><F eqn="if @4 21600 @17"></F><F eqn="if @2 #0 @6"></F><F eqn="if @3 @19 @6"></F><F eqn="if #1 @6 @20"></F><F eqn="if @2 @8 #1"></F><F eqn="if @3 @22 @8"></F><F eqn="if #0 @8 @23"></F><F eqn="if @2 21600 #1"></F><F eqn="if @3 21600 @25"></F><F eqn="if @5 21600 @26"></F><F eqn="if @2 #1 @8"></F><F eqn="if @3 @8 @28"></F><F eqn="if @4 @8 @29"></F><F eqn="if @2 #1 0"></F><F eqn="if @3 @31 0"></F><F eqn="if #1 0 @32"></F><F eqn="val #0"></F><F eqn="val #1"></F><PATH o:connectlocs="10800,0;0,10800;10800,21600;21600,10800;@34,@35" textboxrect="791,791,20809,20809" o:connecttype="custom"></PATH><HANDLES></HANDLES><H position="#0,#1"></H><SHAPE id=_x0000_s1026 adj="29104,18158" type="#_x0000_t62"></SHAPE><TEXTBOX></TEXTBOX>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD>
<DIV>
<P></P></DIV></TD></TR></TBODY></TABLE></P><SPAN lang=EN-US><SHAPETYPE id=_x0000_t75 path="m@4@5l@4@11@9@11@9@5xe" o:spt="75" coordsize="21600,21600" stroked="f" o:preferrelative="t" filled="f"></SHAPETYPE><STROKE joinstyle="miter"></STROKE><FORMULAS></FORMULAS><F eqn="if lineDrawn pixelLineWidth 0"></F><F eqn="sum @0 1 0"></F><F eqn="sum 0 0 @1"></F><F eqn="prod @2 1 2"></F><F eqn="prod @3 21600 pixelWidth"></F><F eqn="prod @3 21600 pixelHeight"></F><F eqn="sum @0 0 1"></F><F eqn="prod @6 1 2"></F><F eqn="prod @7 21600 pixelWidth"></F><F eqn="sum @8 21600 0"></F><F eqn="prod @7 21600 pixelHeight"></F><F eqn="sum @10 21600 0"></F><PATH o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></PATH><LOCK aspectratio="t" v:ext="edit"></LOCK></SPAN>
<P align=center><FONT size=2><B><SPAN>图表</SPAN> </B><B><SPAN lang=EN-US><SPAN>1</SPAN></B><B><SPAN lang=EN-US> </SPAN></B><B><SPAN>管理器类图</SPAN><SPAN lang=EN-US> 
<P></P></SPAN></B></FONT>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><B><SPAN lang=EN-US><SPAN><FONT face="Times New Roman"><FONT size=3>（3）</FONT><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></FONT></SPAN></B><SPAN><FONT size=3>的说明：</FONT></SPAN><SPAN lang=EN-US>LookupDAOHibernate</SPAN><SPAN>类</SPAN></P>
<P align=left><SPAN><SPAN lang=EN-US>
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN><SPAN lang=EN-US>
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P><IMG height=347 alt="" src="http://blog.csdn.net/images/blog_csdn_net/dudutu/blog-entity.gif" width=550></P>
<P></P>
<P align=left></P>
<P align=center><FONT size=2><B><SPAN>图表</SPAN> </B><B><SPAN lang=EN-US><SPAN>2</SPAN></B><B><SPAN lang=EN-US> </SPAN></B><B><SPAN>实体类图</SPAN></B></FONT></P>
<P align=left><SPAN lang=EN-US>
<P>&nbsp;</P></SPAN>
<P></P>
<P>&nbsp;</P>
<P></P>
<P>&nbsp;</P>
<P></P>
<P>&nbsp;</P>
<P></P>
<P>&nbsp;<IMG height=447 alt="" src="http://blog.csdn.net/images/blog_csdn_net/dudutu/blog-enitty-manager.gif" width=651></P>
<P></P>
<P align=left><SPAN lang=EN-US>
<P>&nbsp;</P></SPAN>
<P></P>
<P>&nbsp;</P>
<P></P>
<P>&nbsp;</P>
<P></P>
<P>&nbsp;</P>
<P></P>
<P>&nbsp;</P>
<P></P>
<P align=left><B><SPAN lang=EN-US>public</SPAN></B><SPAN lang=EN-US> <B>class</B> LookupDAOHibernate <B>extends</B> BaseDAOHibernate <B>implements</B> LookupDAO {</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><B>public</B> List getRoles() {</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B>if</B> (log.isDebugEnabled()) {</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>log.debug("retrieving all role names...");</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><B>return</B> getHibernateTemplate().find("from Role order by name");</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>}</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US>}</SPAN><SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN>集成<SPAN lang=EN-US>Spring</SPAN>，<SPAN lang=EN-US>StartupListener</SPAN>通过管理类<SPAN lang=EN-US>LookupManagerImpl</SPAN>，委派<SPAN lang=EN-US>LookupDAOHibernate</SPAN>类取得所有角色信息。然后将角色信息列表存入<SPAN lang=EN-US>ServletContext</SPAN>环境上下文中。<SPAN lang=EN-US> 
<P></P></SPAN>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P align=left><SPAN lang=EN-US>StartupListener</SPAN><SPAN>结束<SPAN lang=EN-US>. 
<P>本文引用通告地址： http://blog.csdn.net/dudutu/services/trackbacks/398348.aspx</P></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN><img src ="http://www.blogjava.net/Jblue/aggbug/21370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Jblue/" target="_blank">Jblue</a> 2005-11-25 09:19 <a href="http://www.blogjava.net/Jblue/articles/21370.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>