发表于: 2017-12-13 21:06:24

1 783


今天完成的事情:

今天和看了看书,看了看资料,再结合师兄昨天的一些话语,算是对Spring有了一个更深入的理解。

然后在理解了Spring的前提下,我又回头看了看关于Spring的书,说Spring用了很多Lamada表达式和反射机制。

就又去看了看Lamada表达式和反射机制。

明天计划的事情:深入了解反射机制,控制反转IOC,JdbcTemplate,Mybatis,时间够的话,在深入理解一下JUNIT4单元测试

遇到的问题:

收获:

1.

关于Spring 的理解

首先,先建立一个有属性,方法,函数的程序,并在pom.xml中添加关于Spring的依赖。

然后为程序添加一个beanxml文件作为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");

来对Springbeans.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 

 

// 2. 接收一个参数(数字类型),返回其2倍的值 

x -> 2 * x 

 

// 3. 接受2个参数(数字),并返回他们的差值 

(x, y) -> x – y 

 

// 4. 接收2int型整数,返回他们的和 

(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();




返回列表 返回列表
评论

    分享到