菜鸟也封装之迷你工厂,帮你解耦合(J2EE).

在很多项目中其实并不需要Spring这样强大的框架,更不需要EJB这样的超级框架.

那么我们怎么实现类和类之间的低耦合那?

从为数不多的项目经验中,以及借鉴各方面的资料,我实现了一个以.properties文件描述类关系的工厂.

PS:本工厂在本人一次集体毕业项目中成功使用.

先介绍下本迷你工厂使用了log4j日志记录器,必须下载Apache公司log4j包.

首先,介绍的是Config类,该类用于对指定资源文件的读取操作.因为采用单例模式,因此只在应用程序启动时读取得资源文件,如需要修改资源文件,必须修改后重新启动应用程序.

package  org.bbs.common;

import  java.io.InputStream;
import  java.util.Properties;
import  org.bbs.common.exception.ConfigException;
/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2007</p>
 *
 * <p>Company: </p>
 *
 * 
@author not attributable
 * 
@version 1.0
 *
 * 该类用于读取.properties文件中,指定字段对应字符串。
 
*/

public   class  Config  {
    
//资源文件名.
    private String configName = null;
    
private Config(String configName) {
        
this.configName = "/"+configName+".properties";
    }

    
    
//获得Config对象,这里采用的是单例模式.
    public static synchronized Config getConfig(String configName) {
        Config con 
= new Config(configName);
        
return con;
    }

    
    
//指定资源文件中,通过key获得value值.
    public String getConfigValue(String key) throws ConfigException {
        Properties prop 
= new Properties();
        InputStream is 
= Config.class.getResourceAsStream(this.configName);
        
try {
            prop.load(is);
        }
 catch (Exception ex) {
            
throw new ConfigException(ex.getMessage());
        }

        
return prop.getProperty(key);
    }

}

第二,介绍下ConfigException类,该类是Config的异常类.

 

package  org.bbs.common.exception;

public   class  ConfigException  extends  Exception  {
    
/**
     * CustConfig类的自定义异常类。
     
*/

    
private static final long serialVersionUID = 1483970043804403081L;

    
public ConfigException(String massage) {
        
super(org.bbs.common.Config.class+" found error::"+massage);
    }

}

第三,介绍下Reflect类,该类的作用用于反射指定调用的类.

package  org.bbs.common;

import  org.bbs.common.exception.ReflectException;

/*
 * 反射实现类. 
 
*/


public   class  Reflect  {
    
//反射无参数构造对象.
    public static synchronized Object getObject(String clsName) throws ReflectException {
        
try {
            Class cls 
= Class.forName(clsName);
            
try {
                
return cls.newInstance();
            }
 catch (InstantiationException e) {
                
throw new ReflectException(e.getMessage());
            }
 catch (IllegalAccessException e) {
                
throw new ReflectException(e.getMessage());
            }

        }
 catch (ClassNotFoundException e) {
            
throw new ReflectException(e.getMessage());
        }

    }

}

 

第四: 介绍下ReflectException类,该类是Reflect 的异常类.

package  org.bbs.common.exception;

public   class  ReflectException  extends  Exception  {
    
/**
     * 反射类的自定义异常.
     
*/

    
private static final long serialVersionUID = 6286815905485173564L;

    
public ReflectException(String massage) {
        
// TODO 自动生成构造函数存根
        super(org.bbs.common.Reflect.class+" found error:"+massage);
    }



}

以上四个类组成了本迷你工厂所需要一些工具类.

接下去就是核心--------工厂

 

package  org.bbs.dao.factory;

import  java.io.IOException;
import  java.util.Properties;

import  org.apache.log4j.Logger;
import  org.apache.log4j.PropertyConfigurator;
import  org.bbs.common.Config;
import  org.bbs.common.Reflect;
import  org.bbs.common.exception.ConfigException;
import  org.bbs.common.exception.ReflectException;

/**
 * Dao工厂,使用单例模式,只要通过getObject(String keys)方法,就能获得对应对象.keys是指定资源文件中的key值.
 
*/

public   class  DaoFactory  {
    
    
private DaoFactory(){
        
    }

                     
    
public static synchronized Object getObject(String keys){
        DaoFactory dao 
= new DaoFactory();
        
return dao.getDaoObject(keys);
    }

    
//该方法主要调用Reflect类实现对指定类的实例化.
    private Object getDaoObject(String keys){
        Object obj 
= null;
        
try {
            obj 
= Reflect.getObject(this.getDaoClsName(keys));
        }
 catch (ReflectException e) {
            
// TODO 自动生成 catch 块
            e.printStackTrace();
        }

        
return obj;
    }

    
//该方法主要实现调用上述的Config类,寻找指定对象的类.
    private String getDaoClsName(String keys){
        String value 
= null;
        Logger logger 
= Logger.getLogger(DaoFactory.class);
        Properties  prop 
= new Properties();
        PropertyConfigurator.configure(prop);
        
try {
            prop.load(
this.getClass().getResourceAsStream("/log4j.properties"));
        }
 catch (IOException e) {
            logger.info(e.getMessage());
        }

        
try {
            Config config 
= Config.getConfig("dao");
            value 
= config.getConfigValue(keys);
        }
 catch (ConfigException e) {
            logger.info(e.getMessage());
        }

        
return value;
    }

}

 

这样一个简单的迷你小工厂就建成了,我们只需要使用DaoFactory.getObject("指定资源文件中的Key值,该值会对应一个Value值,而这个Value值会是一个类");

这样就轻松实现松耦合了,呵呵.当然我们可以根据自己的情况对DaoFactory进行修改.该工场实例主要是为了实现,Dao层和Bo层的送耦合.这样就可以在不断增加的业务需求下,后期移值Spring或者EJB.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值