发表于: 2018-04-06 23:39:54

2 692


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)                            

明天计划的事情:(一定要写非常细致的内容)                            
遇到的问题:(遇到什么困难,怎么解决的)                            
收获:(通过今天的学习,学到了什么知识

师兄一定要原谅我,因为清明放假昨天的白天都在外面,所以回到家就稍微看了一点关于Spring配置的知识。因为看的比较少所以也没好意思把它编程日报发出来 lol


今天完成的事情:1. 理解了配置文件中ref和value的区别 ,并对applicationContext.xml有了更深的了解

value可以赋一些简单类型的值,ref可以引用其他的bean对象。ref代表的是引用这个对象,相当于传入得是对象的引用。而value是引入的这个对象名字的字符串,我觉得可以理解为赋值,至于使用哪个是依据你所用的属性类型决定的。

关于Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java ApplicationContextSpring的核心,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查询数据接口RowCallbackHandlerRowMapper,粗粗的了解了一下

使用RowCallbackHandler处理结果集

RowCallbackHandler接口简单,仅有一个方法void processRow(ResultSet rs) throws SQLException 。Spring会遍历结果集,对结果集中的每一行调用RowCallbackHandler的回调接口处理数据。所以我们无须调用ResultSet中的next()方法,可以说是它的升级版了吧

// 查询数据,单条数据结果集的处理

// 使用接口RowCallbackHandler匿名实现类对结果集数据进行处理

// 通过回调接口方法processRow遍历结果集数据,将数据映射到Person对象中

相同点:从功能上来说,两者没有太大的区别,都是从结果集中行读取逻辑,将ResultSet的数据映射到对象或List中。

不同点:RowCallbackHandler接口是有状态的,不能在多个地方复用

1RowCountCallbackHandler:计算结果集的函数

RowCountCallbackHandler countCallback = new RowCountCallbackHandler();

jdbcTemplate.query("select from user",countCallback);

int rowCount = countCallback.getRowCount();

可见RowCountCallbackHandler结果集中包含了一个结果集行数的状态,在多线程环境下,如果没有经过特殊处理,就不能再多个地方复用countCallback实例。

2SpringRowCountCallbackHandler 简单的遍历结果集,不做任何处理,在测试时使用

Spring提供RowMapper的实现类,如ColumnMapRowMapperSimpleCoulumnRowMapper。前者将结果集的每一行映射为一个map,后者将结果集中的每一列映射为一个Object。它们只定义映射逻辑,没有保持状态。RowMapper虽然处理大量结果集数据的时候映射为List比较方便,但是却占用了大量的JVM内存,甚至可直接引发OutOfMemoryException异常。导致极地的系统性能和巨大的内存开销,甚至引起系统崩溃。




明天计划的事情:1.结束jdbcTemplate的编写,自己在敲一遍吧,理解里面的一些调用比如StudentDao和方法的使用

                             2.如果时间允许可以了解一下Mybatis



收获:1. 尽自己的资源和理解能力把applicationContext.xml配置看懂和搞懂了

           2.对Spring的工厂模式思想和注入思想又有了一些个人理解

          














返回列表 返回列表
评论

    分享到