搭建第一个web项目:实现用户的增删改查(三)

每个程序员都有自己写代码的习惯吧,用公司编代码的方式习惯了之后,就按照公司的方法在后台建立了一些工具类。

util类——JPAUtil.java(与数据库打交道)备注:只是一部分,只做了增删改查。

package cn.itcast.oa.util;

import java.io.Serializable;
import java.util.List;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.itcast.oa.base.IDAO;
import cn.itcast.oa.domain.Role;
import cn.itcast.oa.model.PageInfo;
import cn.itcast.oa.model.SortParamList;

public class JPAUtil {
    //这是第一种拿到applicationContext的方法。(通过applicationContextAware)
    //静态属性,spring初始化MyApplicationContextUtil的时候,将applicationContext属性set到这里面了。
    /*private static ApplicationContext applicationContext;
    
    public static Object getBean(String beanName) {
        return getCtx().getBean(beanName);
    }

    public static void setApplicationContext(ApplicationContext ctx) {
        applicationContext = ctx;
    }

    private static ApplicationContext getCtx() {
        return applicationContext;
    }*/

    private static IDAO dao = (IDAO) ApplicationUtil.getBean("baseDao");
    //这是第二种拿到applicationContext的方法
    private static ApplicationContext ac = new ClassPathXmlApplicationContext(
            "applicationContext.xml");

    /**
     * find条件查询数据带分页排序
     * @param jpql
     * @param params
     * @param sortParams
     * @param pageInfo
     * @return
     */
    public static <T> List<T> find(String jpql, QueryParamList params,
            SortParamList sortParams, PageInfo pageInfo) {
//        IDAO dao = null;
//        try {
//            dao = (IDAO) getCtx().getBean("baseDao");
//        } catch (BeansException e) {
//            e.printStackTrace();
//        }
        return dao.find(jpql, params, sortParams, pageInfo);
    }
    /**
     * 创建一条数据
     * @param t
     */
    public static <T>void create(T t) {
        dao.create(t);
    }
    /**
     * 根据id查询数据
     * @param clazz
     * @param id
     * @return
     */
    public static <T> T loadById(Class<T> clazz, Serializable id) {
        return dao.loadById(clazz,id);
    }
    /**
     * 更新数据
     * @param t
     */
    public static <T> void update(T t) {
        dao.update(t);
    }
    /**
     * 
     * @param t
     */
    public static <T>void refresh(T t) {
        dao.refresh(t);
    }
    /**
     * 删除数据
     * @param clazz
     * @param id
     */
    public static <T>void remove(Class<T> clazz, Serializable id) {
        dao.remove(clazz,id);
    }

}

这里面要重点说一下ApplicationUtil这个获取容器Bean的类。再说这个类之前,先说一下MyApplicationContextUtil这个类:

util类——MyApplicationContextUtil.java

package cn.itcast.oa.util;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class MyApplicationContextUtil implements ApplicationContextAware{

    private  ApplicationContext context;
    private Log log = LogFactory.getLog(this.getClass());
    
    @Override
    public void setApplicationContext(ApplicationContext contex)
            throws BeansException {
        this.context = contex;
        
    }
    
    public void handle() {
//        JPAUtil.setApplicationContext(context);
        ApplicationUtil.setApplicationContext(context); 
        log.debug("applicationContext进行设置完成。。。");
        
    }

    
}

这个类实现了ApplicationContextAware接口,因此可以直接获取到ApplicationContext。这种方法和使用private static ApplicationContext ac = new  ClassPathXmlApplicationContext("applicationContext.xml"); 获取有异曲同工之处,不过还是采用了上面这种方法,因为在此方法中的handle()中可以进行后续的扩展。

这个接口在Spring的官方文档中也有阐述:

大体意思:当容器创建了一个对象实例,这个实例实现了ApplicationContextAware接口,那么这个实例可以当做这个容器的引用。

在MyApplicationContextUtil类中,当它创建一个实例后就可当做ApplicationContext容器的引用,而这个类是在spring容器初始化时给实例化了,在配置文件中给出了。然后这个实例类又将ApplicationContext对象set到了ApplicationUtil类中。

<!--获取Spring容器管理对象的环境类 -->
    <bean id="myApplicationContext" class="cn.itcast.oa.util.MyApplicationContextUtil"
        init-method="handle"></bean>

 

util类——ApplicationUtil.java

package cn.itcast.oa.util;

import org.springframework.context.ApplicationContext;

public class ApplicationUtil {
private static ApplicationContext applicationContext;
    
    public static Object getBean(String beanName) {
        return getCtx().getBean(beanName);
    }

    public static void setApplicationContext(ApplicationContext ctx) {
        applicationContext = ctx;
    }
    
    private static ApplicationContext getCtx() {
        return applicationContext;
    }
}

这样,在JPAUtil类中,就可以拿到容器对象,然后拿到对应的实现Bean了,然后实现其中的方法。

 

posted @ 2015-07-01 23:17 Jokerone 阅读(...) 评论(...) 编辑 收藏