发表于: 2017-12-13 21:06:24
1 784
今天完成的事情:
今天和看了看书,看了看资料,再结合师兄昨天的一些话语,算是对Spring有了一个更深入的理解。
然后在理解了Spring的前提下,我又回头看了看关于Spring的书,说Spring用了很多Lamada表达式和反射机制。
就又去看了看Lamada表达式和反射机制。
明天计划的事情:深入了解反射机制,控制反转IOC,JdbcTemplate,Mybatis,时间够的话,在深入理解一下JUNIT4单元测试
遇到的问题:
收获:
1.
关于Spring 的理解
首先,先建立一个有属性,方法,函数的程序,并在pom.xml中添加关于Spring的依赖。
然后为程序添加一个bean的xml文件作为Spring的配置文件。
然后在bean.xml中 将函数、方法、属性以
<bean id="随意起名" class="类路径 "></bean>
<bean id="strutsHelloWorld" class="impl.StrutsHelloWorld"></bean>
的方式,添加到Spring的容器中作为预加载的资源放在Spring的这个容器中。
<bean id="HelloWorldService" class="helloworld.HelloWorldService">
<property name="helloWorld" ref="strutsHelloWorld"/></bean>
最后在 property标签中,以ref属性像name选定的函数中注入对应的参数,来调整需要被使用函数的路径以及被调用函数,运行时,这个函数就会被使用,从而呈现想要的效果。
<property name="helloWorld" ref="strutsHelloWorld"/>
而当对这些函数,方法、属性有特殊的要求的时候,在属性、方法、函数名前增加相应的注解来实行特殊要求。
而Spring的调用,是在Main函数中,我们通常以
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
来对Spring的beans.xml进行加载。而ApplicationContext的使用,需要预先在程序中添加以下两项:
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.ApplicationContext;
当需求发生变更的时候,只需要在bean.xml文件中,调整被调用函数,并调整相应的路径,就可以达到满足需求的效果,从而降低了对程序本身进行修改的需要,使得程序开发和维护更为方便快捷,同时大大增强了程序的可扩展性!也为程序员节省了大量的时间和精力。
2.
Lamada表达式和反射机制
而Lamada表达式是关于抽象类、匿名类、接口的知识。
首先,抽象类,也就是不能够被实例化的类,关键词abstract就是用来修饰抽象类的。同理,abstract修饰的方法通常称之为抽象方法。Abstract类必须被继承,Abstract方法必须被重写。
接口是由常量和抽象方法组成的一个特殊的类。
匿名类是一个没有名字的类,顾名思义,也就是一个没有定义名字的类。其代码为
new A ( ) { 匿名类的类体 };
匿名类一般定义在类的内部,所以也叫匿名内部类。
值得提醒的是,在使用匿名类时,一定是在某个类中直接用匿名类创建对象,因此匿名类必定是内部类,所以和其他匿名类一样可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以什么。
那么Lamada表达式是什么呢?
lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。
Lambda表达式的语法
基本语法:
(parameters) -> expression
或
(parameters) ->{ statements; }
示例
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
首先做的就是使用lambda表达式替换匿名类。Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们做了什么?那就是用() -> {}代码块替代了整个匿名类。
那么Lamada是如替换掉匿名类的?
// Java 8之前:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8, too much code for too little to do");
}
}).start();
//Java 8方式:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
java8之前
new Thread(匿名类体).start();
java8
new Thread( () -> 匿名类内部程序).start();
评论