前几天看了一篇文章,名为模块化Java简介
。模块化的思想就是去耦合,这样在升级或者维护的时候都会方便一些,这样的道理大家都知道,但是怎样在实现中完成这一点呢。
作者在“类库也是模块”这一节中介绍了“类库毫无疑问也是模块。对于类库来讲,可能没有一个单一接口与之通信,但往往却有‘public
’ API(可能被用到)和‘private
’ package(文档中说明了其用途)。此外,它们也有自己依赖的类库(比如JMX
或JMS
)。这将引起自动依赖管理器引入许多并非必须的类库:以Log4J-1.2.15
为例,引入了超过10个依赖类库(包括javax.mail和javax.jms),尽管这些类库中有不少对于使用Log4J的程序来说根本不需要。 即要做到,某些情况下,一个模块的依赖可以是可选的。”
虽然文章的其他部分看不太懂,但是这个内容倒是可以考察的。Hibernate和iBATIS[注:这里使用的是iBATIS2作为示例]中的日志模块都是与他们的类库模块分开的,那么他们是怎么做到的呢?
Hibernate用的是Apache Commons Logging
开源工具做到的,而iBATIS用的其实就是自己实现的一个简化的Apache Commons Logging:
首先使用定义一个通用的接口,自己在程序中使用的就是这样一个接口:
package com.ibatis.common.logging;
public interface Log {
boolean isDebugEnabled();
void error(String s, Throwable e);
void error(String s);
public void debug(String s);
public void warn(String s);
}
LogFactory 是用来生成这个Log接口实现的工厂类
package com.ibatis.common.logging;
import java.lang.reflect.Constructor;
import com.ibatis.common.resources.Resources;
public class LogFactory {
private static Constructor logConstructor;
static {
tryImplementation("org.apache.commons.logging.LogFactory", "com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl");
tryImplementation("org.apache.log4j.Logger", "com.ibatis.common.logging.log4j.Log4jImpl");
tryImplementation("java.util.logging.Logger", "com.ibatis.common.logging.jdk14.Jdk14LoggingImpl");
tryImplementation("java.lang.Object", "com.ibatis.common.logging.nologging.NoLoggingImpl");
}
private static void tryImplementation(String testClassName, String implClassName) {
if (logConstructor == null) {
try {
Resources.classForName(testClassName);
Class implClass = Resources.classForName(implClassName);
logConstructor = implClass.getConstructor(new Class[]{Class.class});
} catch (Throwable t) {
}
}
}
public static Log getLog(Class aClass) {
try {
return (Log)logConstructor.newInstance(new Object[]{aClass});
} catch (Throwable t) {
throw new RuntimeException("Error creating logger for class " + aClass + ". Cause: " + t, t);
}
}
}
Log4jImpl 是Log 接口的一个实例类,用来实现与log4j的交互
package com.ibatis.common.logging.log4j;
import org.apache.log4j.Logger;
public class Log4jImpl implements com.ibatis.common.logging.Log {
private Logger log;
public Log4jImpl(Class clazz) {
log = Logger.getLogger(clazz);
}
public boolean isDebugEnabled() {
return log.isDebugEnabled();
}
public void error(String s, Throwable e) {
log.error(s, e);
}
......
}
注意到这里最终还是使用了log4j的接口 import org.apache.log4j.Logger;所以说明该jar包在编译的时候还是需要log4j的,但是在实际使用的时候log4j不是必须的,这样就成功去掉了依赖。
分享到:
相关推荐
这种架构使得开发更加模块化,易于维护,同时也提高了开发效率。 在实际项目中,jar包的使用是关键。"java ibatis struts2 spring jar包"通常是指项目中需要包含这三个框架的相应库文件。这些jar包包含了框架的所有...
【Java Web核心框架:Struts 1+Struts 2+Spring+Hibernate+iBATIS】是Java领域中常见的Web应用程序开发框架的组合,用于构建高效、可维护的J2EE应用。这些框架各自承担着不同的职责,共同协作以实现业务逻辑、数据...
**Spring**是一个全面的、模块化的应用框架,主要特点: 1. **IOC(Inversion of Control,控制反转)/DI(Dependency Injection,依赖注入)**:由Spring容器管理对象的创建和依赖关系,降低了组件间的耦合度。 2. ...
在Java开发领域,这些技术是构建企业级应用的基石,它们分别是Hibernate、Spring、Struts、MySQL、Oracle、JBoss、Log4j和iBatis。让我们逐一深入了解这些技术及其jar文件的重要性。 1. Hibernate:这是一个强大的...
这个后台管理系统很可能包含了用户管理、权限控制、日志记录、数据统计等多个模块,通过整合上述技术,实现了高效的数据处理和友好的用户界面。对于学习和理解Java Web开发的开发者来说,这是一个很好的实践案例,...
这个“struts2 spring ibatis jar”压缩包很可能包含这三个框架的JAR文件,用于构建一个整合了MVC(Model-View-Controller)、依赖注入和数据持久化的应用程序。 Struts2是一个基于MVC设计模式的Web应用框架,它...
而AOP则提供了一种模块化的方式处理横切关注点,如事务管理、日志记录等。此外,Spring2还包含了对其他框架的集成支持,如JDBC、Hibernate、MyBatis等,这为框架整合提供了便利。 iBatis,即SQL Map,是一个持久层...
通过这样的整合,我们可以构建出一个模块化、松耦合的Web应用,便于开发、测试和维护。同时,这种架构也具有很好的扩展性和灵活性,可以适应不同规模和复杂度的项目需求。在实际开发中,开发者可以根据项目特点调整...
它需要程序员自己写 SQL 语句,不像 Hibernate 那样是完全面向对象的、自动化的,iBATIS 是半自动化的,通过表和对象的映射以及手工书写的 SQL 语句,能够实现比 Hibernate 等更高的查询效率。 iBATIS 的优点包括:...
4. AOP(面向切面编程)和POJO(普通Java对象):AOP是面向切面编程的概念,它允许开发者将横切关注点(比如日志和事务管理)从业务逻辑中分离出来,从而实现业务逻辑的纯净和重用性。POJO是不依赖于任何Java EE框架...
使用SSH可以快速构建复杂的Web应用,同时保持代码的清晰和模块化。 这些技术的学习将帮助开发者掌握Web应用的全栈开发能力。Struts处理请求和响应,Spring提供业务逻辑支持和组件管理,Hibernate和iBATIS则作为数据...
Struts2、Spring和iBatis是Java Web开发中三个重要的框架,它们分别负责MVC模式中的动作控制、依赖注入和持久层操作。这个压缩包包含的jar文件是为了实现这三个框架的整合,以及一些额外的功能扩展。 首先,`struts...
精通Java数据库连接(JDBC)API,了解不同的持久化/ORM(对象关系映射)框架如Hibernate、JDO、CocaBase、TopLink、iBatis等。掌握主流数据库产品如Oracle、MySQL、MS SQL Server的使用和操作。 ### 6. 安全性与...
- **模块化**:将复杂的应用程序划分为更小的模块,便于维护和扩展。 - **降低耦合度**:通过明确的接口定义,使得各个组件之间的耦合度降低,提高了系统的灵活性。 **7. Struts是如何实现MVC的?** Struts框架...
总结来说,这个压缩包提供了开发基于Spring和iBATIS应用所需的基础库,涵盖了从对象管理、事务控制到数据库操作的各个方面,对于Java开发人员来说是必不可少的。在实际项目中,还需要根据具体需求选择和配置其他相关...
Struts、Spring和iBatis是Java开发领域中三大主流的开源框架,它们共同构建了SSH(Struts、Spring、Hibernate)体系,虽然这里的"H"被替换为"Ibatis",但核心理念是一样的,即通过组件化的方式实现企业级应用程序的...
Spring通过依赖注入来实例化和配置这些服务,同时利用AOP进行事务管理和日志记录。当涉及到用户认证和授权时,Spring Security3介入,验证用户的登录凭证,控制对资源的访问。最后,iBatis 处理数据库交互,执行SQL...
Spring还包含了数据访问、缓存、任务调度等多种模块,可无缝集成其他框架,如Hibernate和MyBatis。 iBATIS是Java中的一款持久层框架,它将SQL语句与Java代码分离,提供了一种动态SQL的解决方案。在iBATIS中,SQL...
此外,Spring还提供了事务管理、数据访问抽象、以及与各种持久化技术(如Hibernate、JPA)的集成。 **Struts2框架(2.0版本)** Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它继承了...