书读过一遍,不记录点什么感觉就像没读过一样。
认识SSM
spring是Java应用最广泛的框架。之所以成功,是因为spring的两大核心理念
inversionOfControl(IOC)
aspectOrientedProgramming(AOP)
什么是IOC?
简单的说 IOC 就是一个容器。 spring认为Java所有的resource都是JavaBean。
IOC就是为了管理JavaBean和他们之间的关系所诞生。
Spring是通过描述来完成对象的创建并维护对象之间的关系。
IOC根据描述找到需要的资源。这就是控制反转。
这样做的好处就是各个对象都可以相互独立的存在,不再对其他对象有过度的依赖性(解耦)
Spring AOC(面向切面编程思想)
IOC 管理JavaBean ,而Javabean是Java OOP(面向对象)的思想产物。
如果一个需求需要2个或者更多的Javabean协作。OOP就无法满足设计需求了。
Spring AOC 常用于数据库的事务编程。
MyBatis简介
前身是iBatis,Apache的开源项目。基于Java的持久层框架。
几乎可以代替JDBC,同时提供接口编程。
MyBatis的Dao(数据访问层)是不需要实现类的。
提供一个接口和xml配置即可
Hibernate简介
ORM(对象关系映射)框架。可以完全脱离sql语句。
Mybatis 和Hibernate
互联网Java持久层框架首选。Mybatis可以定制SQL,从而优化性能。
更符合移动互联网高并发,大数据,高性能,高响应的要求。
Dao层大同小异。
SpringMVC简介
Struts2与spring的整合存在许多问题。于是诞生了SpringMVC(Model View Control)
结构层次清晰,类简单,与Spring核心无缝对接。
Redis
互联网最流行的NoSQL。具备一定的持久层功能。数据半结构化存储。
每秒可执行 大约110 000个写操作,或 80 000个读操作。速度远超数据库。
支持6种数据类型。字符串、哈希结构、列表、集合、可排序集合、基数。
所有Redis的操作都是原子的。
Java 设计模式
Java反射技术
能配置:类的全限定类名、方法、参数,完成类初始化。
动态代理模式 & 责任链模式
在Spring和Mybatis中都有重要应用。
动态代理:生成一个代理对象,来代理真实对象,从而控制真实对象的访问。
代理分为两个步骤:
建立代理对象和真实对象的代理关系。
实现代理对象的代理逻辑方法。
常用的代理技术有两种:JDK动态代理、CGLIB。Mybatis还有使用Javassist技术。他们的理念都是相似的。
JDK动态代理
1.定义接口
public interface HelloWorld{
public void sayHelloWorld();
}
2.提供实现类
public class HelloWorldImpl implements HelloWorld {
@Override
public void sayHelloWorld() {
System.out.println("Hello World!");
}
}
3.创建代理对象必须实现java.lang.reflect.InvocationHandler接口
public class JdkProxyExample implements InvocationHandler {
//真实对象
private Object target = null;
/**
* 此方法建立代理对象和真实对象的代理关系,并返回代理对象
* @param target真实对象
* @return 代理对象
*/
public Object bind(Object target) {
this.target = target;
/*newProxyInstance包含了三个参数
第一个是类加载器
第二个是真实对象所实现的接口数组
第三个是定义实现方法逻辑的代理类*/
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
};
/**
* 代理方法逻辑
* @param proxy 代理对象
* @param method 当前调度方法
* @param args 当前方法参数
* @return 代理结果返回
* @throws Throwable 异常
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("进入代理逻辑方法");
System.out.println("调度真实对象之前的服务");
Object obj = method.invoke(target, args);//相当于调用了sayHelloWorld方法
System.out.println("调度真实对象之后的服务");
return obj;
}
}
4.测试代理
public class Test {
public static void main(String[] args) {
JdkProxyExample jdk = new JdkProxyExample();
//绑定关系,生成HelloWorldImpl的代理类对象proxy
HelloWorld proxy = (HelloWorld) jdk.bind(new HelloWorldImpl());
proxy.sayHelloWorld();
}
}
cglib动态代理
在不能提供接口的环境中,cglib就派上用场了。
责任链模式
一个对象在一条链上被多个拦截器拦截处理,这就是责任链模式。用于一个对象在多个角色中传递的场景。
观察者模式
又称 发布订阅模式,是对象的行为模式。定义了一种一对多的依赖关系,同时多个观察者对象同时监视被观察者对象的状态。
被观察者状态发生变化时,会通知所有观察者。跟数学中的自变量,因变量有点相似。