Guice + JSF 的实现

上一篇 / 下一篇  2008-03-19 15:26:10 / 个人分类:Guice

今天终于把JSF和Guice整合到一起了,现在仅仅是实现了JSF和Guice的整合,可能我的实现还有一些问题,也或许还有更好的实现方法,希望能和大家一起切磋,对我有什么好的建议欢迎直接和我联系。我的Email:duqingming@126.com

Member.java      实体

MemberEntity.java      业务逻辑接口

MemberEntityImpl.java       业务逻辑实现

MemberRegister.java       页面的bean

以上都是我们做一个JSF应用最基本的都几个类和接口,这里代码没有给出,我想大家一看都明白。

下面几个类是为了把Guice整合到一起:

1.HawkUnionModule.java        Guice 的模块类,Guice不像Spring 通过XML来配置

package com.hawkunion.config;
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.hawkunion.persistence.*;
/**
* @author 杜庆明
*/
public class HawkUnionModule extends AbstractModule {    
       public void configure() {
           bind(MemberEntity.class).to(MemberEntityImpl.class).in(Scopes.SINGLETON);
     }
}

2.GuiceListener.java 一个监听器,非常重要的,在ServletContext中一个属性

import com.hawkunion.member.MemberRegister;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @author 杜庆明
*/
public class GuiceListener     implements ServletContextListener {
       private static Logger logger     = Logger.getLogger(MemberRegister.class.getName());
       public void contextInitialized(ServletContextEvent servletContextEvent) {
           Module[] modules = {new HawkUnionModule()};
           Injector injector = Guice.createInjector(modules);
           ServletContext servletContext = servletContextEvent.getServletContext();
           servletContext.setAttribute(Injector.class.getName(), injector);
           logger.info("** 执行 GuiceListener.contextInitialized");
       }
    
       public void contextDestroyed(ServletContextEvent servletContextEvent) {
           ServletContext servletContext = servletContextEvent.getServletContext();
           servletContext.removeAttribute(Injector.class.getName());
           logger.info("** 执行 GuiceListener.contextDestroyed");
       }    
}

当然不要忘了在web.xml中配置

<listener>
           <description>Guice</description>
           <listener-class>com.hawkunion.config.GuiceListener</listener-class>
</listener>

3.BasePageBean.java MemberRegister.java的父类,所有的页面bean都要继承自它

package com.hawkunion.config;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
package com.hawkunion.config;

import com.google.inject.Injector;
import com.hawkunion.member.MemberRegister;
import java.io.Serializable;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
/**
* @author 杜庆明
*/
public class BasePageBean implements Serializable{
       private static Logger logger     = Logger.getLogger(MemberRegister.class.getName());
       private Injector injector;    
       public BasePageBean()
       {     }    
       public Injector getInjector() {
           if(injector == null) {
               ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().
                       getExternalContext().getContext();
               injector = (Injector)servletContext.getAttribute(Injector.class.getName());
           }
           return injector;
       }
       public void setInjector(Injector injector) {
           this.injector = injector;
       }    
       @PostConstruct
       public void init() {
           getInjector().injectMembers(this);
           logger.info("执行Guice初始化 为"+this.getClass().getName()+"注入对象");
       }
}

最后使用:

如我MemberRegister.java:

package com.hawkunion.member;
import com.google.inject.Inject;
import com.hawkunion.config.BasePageBean;
import com.hawkunion.persistence.Member;
import com.hawkunion.persistence.MemberEntity;
import com.hawkunion.persistence.MemberEntityImpl;
import java.util.Date;
import org.apache.log4j.Logger;
/**
* 实体类 MemberRegister
* @author 杜庆明
*/
public class MemberRegister extends BasePageBean{
       private static Logger logger     = Logger.getLogger(MemberRegister.class.getName());    
       private Member member = new Member();    
       private MemberEntity memberEntity = null;
    
       public MemberRegister(){
       }
       public void setMember(Member member){
           this.member = member;
       }
       public Member getMember(){
           return member;
       }    
       @Inject
       public void memberEntity(MemberEntity memberEntity) {
           this.memberEntity = memberEntity;
       }    
       // 添加一个用户
       public String create(){
           super.init();      // 比较关键的一句
           if(memberEntity!=null){
               memberEntity.deleteMember("duqingming1");
           } else{
               logger.info("Guice 没有启动");
           }
           return "";
       }
}

以后代码已经在netbeans5.5上验证通过,但可应用还有很多不足的地方,其中一个是在RemberRegister仍然需要调用super.init(),来显示的让Guice来为我们注入对象,因为时间问题,我还没有更好的实现。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2010-03-22  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 60451
  • 日志数: 171
  • 影音数: 3
  • 建立时间: 2008-02-28
  • 更新时间: 2008-05-19

RSS订阅

Open Toolbar