发表于: 2018-04-06 23:39:54
2 691
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
明天计划的事情:(一定要写非常细致的内容)
遇到的问题:(遇到什么困难,怎么解决的)
收获:(通过今天的学习,学到了什么知识)
师兄一定要原谅我,因为清明放假昨天的白天都在外面,所以回到家就稍微看了一点关于Spring配置的知识。因为看的比较少所以也没好意思把它编程日报发出来 lol
今天完成的事情:1. 理解了配置文件中ref和value的区别 ,并对applicationContext.xml有了更深的了解
value可以赋一些简单类型的值,ref可以引用其他的bean对象。ref代表的是引用这个对象,相当于传入得是对象的引用。而value是引入的这个对象名字的字符串,我觉得可以理解为赋值,至于使用哪个是依据你所用的属性类型决定的。
关于Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<!-- 引入jdbc配置文件 -->
<bean id="jdbcTemplate666" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<!-- dataSource 配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/enrolment" />
<property name="username" value="root" />
<property name="password" value="19971015" />
</bean>
<!-- ref:jdbcTemplate对象的引用 (第5行)-->
<bean name="studentDAO" class="DAOIMPL.StudentDaoimpl">
<property name="jdbcTemplate"
ref ="jdbcTemplate666">
</property>
</bean>
<!-- ref:dao对象的引用 (第17行)-->
<bean name="student" class="POJO.Student">
<property name="dao1"
ref ="studentDAO">
</property>
</bean>
</beans>
2.写了一个测试类Text,验证查询方法
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext. xml");
StudentDAO studentDao = (StudentDAO) context.getBean("studentDAO");
studentDao.findAllStudent();
}
可是一按运行,却出现出现了两个问题
第一张图是一闪而过的,我也没有太在意。真正让我疑惑的是第二张图:显示说关于关于bean或parent的的一个什么问题(一开始我没看懂这个报错,就瞎猜着实浪费了好多时间啊,结果啥也没调试出来)后来我截取了一些关键字去百度查,发现了一篇不错的博客 嗯 spring错误汇总 就是这个。所以我就定位到了关于jbdcTemplate666 bean和datasource特征这里,然后带着这方面的问题我又去查发现Spring中提示元素 'ref' 中不允许出现属性 'local'。 直接ref的值是你引用的对象就可以了不用local 这错误对我来说确实难找,因为它并不会编译报错,而且也不是什么标点符号的问题,emmm反正记住就行了,这种坑就不会再进了。
关于一些资料里面提到了好多次的bean我之前一直都没查,所以去了解了一下它是什么:
Bean的中文含义是“豆子”,Bean的含义是可重复使用的Java组件。所谓组件就是一个由可以自行进行内部管理的一个或几个类所组成、外界不了解其内部信息和运行方式的群体。使用它的对象只能通过接口来操作。
Bean并不需要继承特别的基类(BaseClass)或实现特定的接口(Interface)。Bean的编写规范使Bean的容器(Container)能够分析一个Java类文件,并将其方法(Methods)翻译成属性(Properties),即把Java类作为一个Bean类使用。Bean的编写规范包括Bean类的构造方法、定义属性和访问方法编写规则。 所以这个bean是不是指applicationContext里面使用bean标签编写的语句?起到连接和配置作用?
2.看了一下Spring JDBC查询数据接口RowCallbackHandler、RowMapper,粗粗的了解了一下
使用RowCallbackHandler处理结果集
RowCallbackHandler接口简单,仅有一个方法void processRow(ResultSet rs) throws SQLException 。Spring会遍历结果集,对结果集中的每一行调用RowCallbackHandler的回调接口处理数据。所以我们无须调用ResultSet中的next()方法,可以说是它的升级版了吧
// 查询数据,单条数据结果集的处理
// 使用接口RowCallbackHandler匿名实现类对结果集数据进行处理
// 通过回调接口方法processRow遍历结果集数据,将数据映射到Person对象中
相同点:从功能上来说,两者没有太大的区别,都是从结果集中行读取逻辑,将ResultSet的数据映射到对象或List中。
不同点:RowCallbackHandler接口是有状态的,不能在多个地方复用
1)RowCountCallbackHandler:计算结果集的函数
RowCountCallbackHandler countCallback = new RowCountCallbackHandler();
jdbcTemplate.query("select from user",countCallback);
int rowCount = countCallback.getRowCount();
可见RowCountCallbackHandler结果集中包含了一个结果集行数的状态,在多线程环境下,如果没有经过特殊处理,就不能再多个地方复用countCallback实例。
2)SpringRowCountCallbackHa
Spring提供RowMapper的实现类,如ColumnMapRowMapper和SimpleCoulumnRowMapper。前者将结果集的每一行映射为一个map,后者将结果集中的每一列映射为一个Object。它们只定义映射逻辑,没有保持状态。RowMapper虽然处理大量结果集数据的时候映射为List比较方便,但是却占用了大量的JVM内存,甚至可直接引发OutOfMemoryException异常。导致极地的系统性能和巨大的内存开销,甚至引起系统崩溃。
明天计划的事情:1.结束jdbcTemplate的编写,自己在敲一遍吧,理解里面的一些调用比如StudentDao和方法的使用
2.如果时间允许可以了解一下Mybatis
收获:1. 尽自己的资源和理解能力把applicationContext.xml配置看懂和搞懂了
2.对Spring的工厂模式思想和注入思想又有了一些个人理解
评论