- 浏览: 233294 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (102)
- 开源软件 (1)
- 并发 (14)
- WEB (1)
- NIO (4)
- Socket (5)
- 应用服务器 (4)
- 集群 (0)
- 数据库 (1)
- JAVA基础 (17)
- 开源框架 (2)
- 业务知识 (1)
- JVM (9)
- Windows (1)
- LINUX (0)
- Jquery (0)
- JMS (0)
- Cache (0)
- Oracle (5)
- XML (0)
- EJB (0)
- WebService (0)
- Struts2 (1)
- Hibernate (1)
- Spring (0)
- 设计模式 (4)
- UML (0)
- JS (12)
- 网络爬虫 (0)
- 数据结构与算法 (1)
- EXT (1)
- DIV+CSS (2)
- 安全 (3)
- Android (9)
- LDAP (1)
- Mybatis (1)
最新评论
-
Dom_4j:
...
理解注解中的@Inherited -
s469799470:
demo少个ID
iframe父子页面交互问题 -
errorerror0:
...
iframe父子页面交互问题 -
errorerror0:
iframe父子页面交互问题 -
johnawm:
2012-12-18 wangshibei 写道CountD ...
CountDownLatch的使用
Class.getResources(String path) path如果是以 / 开头,就从classpath中去找(classpath可以认为是eclipse的bin目录或者是target的classes目录),
如果不以/开头,就以当前类的位置开始找,也就是它有两种搜索方式。
.classloader不能以/为开头,classloader.getResource只能从classpath中去找。
例如在src/com/test/example2目录下存在aa.xml文件则。
@Test public void test1() { System.out.println(TestResource.class.getResource("aa.xml")); --没有以/开头,从当前类位置去找。 System.out.println(TestResource.class.getClassLoader().getResource("aa.xml")); System.out.println("TestResource.test1()"); } 执行结果为: file:/C:/Users/ltchyj/workspace/testapp2/bin/com/test/example2/aa.xml null TestResource.test1()
可以看出,classloader.getResource在当前路径下找不到相关资源,但是class.getResource方法可以找到相关资源
@Test public void test2() { System.out.println(TestResource.class.getResource("/com/test/example2/aa.xml")); //以/为开头。从classpath下面去找。 System.out.println(TestResource.class.getClassLoader().getResource("com/test/example2/aa.xml"));//classloader不能以/为开头, System.out.println("TestResource.test2()"); } 执行结果为: file:/C:/Users/ltchyj/workspace/testapp2/bin/com/test/example2/aa.xml file:/C:/Users/ltchyj/workspace/testapp2/bin/com/test/example2/aa.xml TestResource.test2()
以上执行结果可以看出,class.getResource和classloader.getResource方法在当前classpath下都看可以找到指定的资源,唯一的区别是class.getResouece以/开头,classloader.getResource不以/开头。
@Test public void test3() { System.out.println(TestResource.class.getResource("")); //获取的 System.out.println(TestResource.class.getClassLoader().getResource("")); System.out.println("TestResource.test3()"); } file:/C:/Users/ltchyj/workspace/testapp2/bin/com/test/example2/ file:/C:/Users/ltchyj/workspace/testapp2/bin/ TestResource.test3()
class.getResourceAsStream 和getClassLoader().getResourceAsStream
class.getResourceAsStream,如之前的class.getResource一样,只不过包装了一个流,返回给你一个输入流。
现在来看一段mybstis的源码。
public void registerAliases(String packageName, Class<?> superType){ //这里传入的是Object.class ResolverUtil<Class<?>> resolverUtil = new ResolverUtil<Class<?>>(); resolverUtil.find(new ResolverUtil.IsA(superType), packageName); Set<Class<? extends Class<?>>> typeSet = resolverUtil.getClasses(); for(Class<?> type : typeSet){ // Ignore inner classes and interfaces (including package-info.java) // Skip also inner classes. See issue #6 if (!type.isAnonymousClass() && !type.isInterface() && !type.isMemberClass()) { registerAlias(type); } } public ResolverUtil<T> find(Test test, String packageName) { String path = getPackagePath(packageName); //获取package对应的path,将.替换为/ try { List<String> children = VFS.getInstance().list(path); for (String child : children) { if (child.endsWith(".class")) { addIfMatching(test, child); } } } catch (IOException ioe) { log.error("Could not read package: " + packageName, ioe); } return this; } protected String getPackagePath(String packageName) { return packageName == null ? null : packageName.replace('.', '/'); } public List<String> list(String path) throws IOException { List<String> names = new ArrayList<String>(); for (URL url : getResources(path)) { names.addAll(list(url, path)); } return names; } protected static List<URL> getResources(String path) throws IOException { return Collections.list(Thread.currentThread().getContextClassLoader().getResources(path));//
根据上述代码可以看出,外部传入一个包名,
1.首先将包名中的.替换为/
2.使用classloader.getResource获取当前包路径下的所有class资源。
3. 使用classloader加载
发表评论
-
深入学习EnumSet
2018-03-25 00:18 528Set接口的实现类HashSet/TreeSet,它们内部都是 ... -
枚举中valueOf用法
2018-01-14 11:21 4535Enum的特征如下: 1.它不能有public的构造函数,这样 ... -
使用自定义注解搭建简单框架
2017-05-01 00:54 544本文主要介绍如何使用Java运行时级别的注解配合反射来搭建框架 ... -
java注解处理器
2017-04-30 17:43 675注解处理器: Java SE5扩 ... -
理解注解中的@Inherited
2017-04-30 16:06 32416@Inherited: @Inherited 元注解是一 ... -
JAVA注解总结
2017-04-30 12:59 585元注解: 元注解 ... -
apache-fileupload文件上传
2017-02-25 01:26 475临时文件的清理: FileCleaningTracker ... -
java泛型理解2
2017-01-07 22:54 487泛型类型注意细节: 1.泛型类型变量不能是基本数据类型 比如, ... -
JAVA泛型理解
2017-01-07 22:33 496泛型类型的擦除: ArrayList< ... -
逻辑运算与移位运算
2012-11-27 14:56 1288源码:正数的补码与原码相同例+7 源码:00000111 补码 ... -
关于数字签名基础知识
2012-10-08 17:40 13391.消息摘要 public class MessageDige ... -
JJd
2012-05-10 20:02 0//Access-Request报文 创建message ... -
HashMap原理
2012-04-29 17:27 1817概述: HashMap是基于哈希表的Map接口的非同步实现。此 ... -
使用内部类有什么好处
2012-03-17 12:41 1335使用内部类在java编程高级设计中是必须的,它能使你的代码更加 ... -
关于a& 0xff的运算
2011-11-21 11:23 1446byte是一个有符号数可以表示-128~+127,但是作为一个 ... -
java调用Windows命令行
2011-11-20 21:32 1740java来调用windows的命令,一般情况下下面两行代码即可 ... -
parseInt(String s, int radix)用法介绍
2011-11-19 22:13 6326parseInt(String s, int radix) , ... -
深入理解String.getBytes()中编码问题
2011-11-04 15:25 2562查看jdk的源码得知,String.getBytes()的源码 ...
相关推荐
《MyBatis 框架实战教程:基于 mybatis-demo.zip 示例项目》 在现代 Java Web 开发中,MyBatis 作为一个轻量级的持久层框架,因其灵活性和高效性而深受开发者喜爱。本教程将通过分析 `mybatis-demo.zip` 文件中的...
《SpringBoot整合Mybatis实战详解》 在现代Java开发中,SpringBoot以其便捷的配置、自动化的特性,已经成为主流的微服务框架。而Mybatis作为轻量级的持久层框架,以其灵活的SQL操作和良好的性能深受开发者喜爱。将...
SpringBoot旨在简化Spring应用的初始搭建以及开发过程,而Mybatis则是一个轻量级的持久层框架,通过SQL映射文件将Java对象与数据库表进行绑定。接下来,我们将深入探讨如何在SpringBoot项目中实现这一整合,并利用...
Neo4j是一个强大的图形数据库,而MyBatis则是一个流行的Java持久层框架,主要用于操作关系型数据库。将这两者结合可以实现对图形数据的高效管理。在这个例子中,我们将探讨如何在Java应用中使用MyBatis与Neo4j进行...
总结起来,通过SpringBoot、Mybatis-Plus和Druid,我们可以方便地实现双数据源配置,使得应用能同时处理MySQL和Oracle数据库的数据。在实际开发中,要根据业务场景灵活切换数据源,确保数据操作的正确性和效率。同时...
### MyBatis 开发教程知识点总结 #### 一、MyBatis 概念与特性 1. **定义**: - MyBatis 是一款优秀的支持定制化 SQL、存储过程及高级映射的持久层框架。 - 它通过简单的 XML 或注解方式,将参数类型与 Java ...
MyBatis是一个流行的Java持久层框架,它简化了在实体对象和SQL语句之间的数据映射过程,提供了半自动的ORM(对象关系映射)实现。这个框架允许开发者编写动态的SQL,使得数据库操作更加灵活。以下是MyBatis配置的...
### MyBatis总结 #### JDBC回顾与MyBatis简介 **JDBC(Java Database Connectivity)** 是Java中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。它由一组用Java语言...
Mapper接口提供了与数据库交互的方法,这些方法将在运行时由MyBatis动态生成SQL。例如: ```java public interface UserMapper { User getUserById(Integer id); List<User> getAllUsers(); void insertUser...
在本文中,我们将深入探讨如何将Mybatis与SpringBoot整合,以便在开发Java Web应用程序时实现高效的数据访问层。我们将遵循以下步骤: 1. **环境准备** 首先,确保你拥有以下软件的正确版本: - IDEA 2020.1.3:...
SpringBoot 集成 Mybatis-Plus 代码生成工具 SpringBoot 是一个基于 Java 的框架,它提供了快速构建生产级别的应用程序的能力。Mybatis-Plus 是一个基于 Mybatis 框架的增强工具,它提供了代码生成、分页、查询等...
mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in ...
这样,我们就完成了Spring Boot与MyBatis的集成。通过调用`UserService`的`getAllUsers`方法,即可获取到数据库中的所有用户信息。 总的来说,Spring Boot集成MyBatis的过程主要包括添加依赖、配置数据库、创建...
<mapper class="org.mybatis.example.mapper.UserMapper"/> ``` #### SQL映射XML文件 - **Select元素**:定义查询操作。 ```xml <select id="selectAllUsers" resultType="com.example.model.User"> ...
MyBatis Generator是一款强大的自动化代码生成工具,它能够帮助开发者自动生成Java实体类、Mapper接口与XML配置文件,以及Service层的基本 CRUD 操作,极大地提高了开发效率。在本压缩包中,包含的是"MyBatis ...
mybatisPlus.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation())); } return mybatisPlus; } } ``` 问题三:MyBatis-Plus 与 Spring Boot 整合问题 在 Spring Boot ...
在Java开发领域,MyBatis是一个非常流行的持久层框架,它简化了数据库操作与Java对象之间的映射。本文将深入探讨如何在IntelliJ IDEA(IDEA)的Maven项目中配置MyBatis,这对于初学者来说是一个重要的起点。通过遵循...
### 整合flex-spring-mybatis #### 一、项目背景及目标 本文档旨在详细介绍如何将Flex技术与Spring框架及MyBatis框架进行有效整合,以实现一个高性能且易于维护的企业级应用。通过整合这三种技术,可以充分利用Flex...
### Spring MVC 和 MyBatis 整合详解 #### 一、整合概述 Spring MVC 和 MyBatis 是目前非常流行的两种技术栈。Spring MVC 作为一款优秀的 MVC 框架,可以很好地实现业务逻辑与表现层的分离;而 MyBatis 作为一款...
在IT行业中,Spring Boot和MyBatis是两个非常流行的开源框架,它们分别简化了Java Web应用的开发和数据库操作。Spring Boot提供了快速构建应用程序的能力,而MyBatis则是一个轻量级的持久层框架,专注于SQL映射和...