1.0 什么是Spring?
Spring 是最受欢迎的企业级 Java 应用程序开发框架,Spring 框架的核心特性可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。为了更好的理解我们需要知道spring中的几个概念
2.0 spring 的几个概念
2.1 控制反转(IoC 英文Inversion of Control的缩写)
控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,
它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
那么什么是IoC呢?如何理解他呢 看下面的例子:
以web工程登录为例
//获取用户的密码
public class CustomerDao{
public boolean getPassword(){/*对应的代码*/}
}
//验证
//判断密码是否输入正确
public class login{
public void execute(){
CustomerDao dao = new CustomerDao();
boolean f = dao.getPassword();
}
}
上述代码中execute函数实例化了CustomerDao的对象,也就是说login依赖CustomerDao
如果取密码程序CustomerDao一个是MySQL中获取,一个在oracle中取 ,那么就要重新写
一个类CustomerDao2,这时候就要修改login中所有出现CustomerDao的地方,非常麻烦这就是耦合性高的代价
改进1:降低耦合性
首先让login访问的不是一个类 而是一个接口,然后通过一个工厂类返回对应的类
//接口
public interface ICustomerDao{
public boolean getPassword();
}
//实现接口
public void CustomerDao() implements ICustomerDao{
public boolean getPassword(){/*代码*/};
}
//返回接口的工厂
public void DaoFactory{
public static ICustomerDao getCustomerDao(){
return new CustomerDao();
}
}
//登录
public class login{
public void execute(){
ICustomerDao idao = DaoFactory.getCustomerDao();
boolean f = idao.getPassword();
}
}
解释:上面的程序中如果该用另一个CustomerDao2 只需要让CustomerDao2 实现ICustomerDao接口
然后修改DaoFactory中的方法就可以了
改进2:如何避免修改Daofactoryz中的代码
//接口
public interface ICustomerDao{
public boolean getPassword();
}
//实现接口
public void CustomerDao() implements ICustomerDao{
public boolean getPassword(){/*代码*/};
}
//返回接口的工厂 用到了反射机制
public void beanFactory(){
public static object getCustomerDao(String classname){
return Class.forname(classname).newInstance();
}
}
//登录
public class login{
public void execute(){
ICustomerDao idao = (ICustomerDao )beanFactory.getCustomerDao("CustomerDao");
boolean f = idao.getPassword();
}
}
解释:这时候只需要改变login中的参数名就可以了 而字符串可以写入配置文件中 这样就降低了耦合
这样写的好处是beanFactory 的通用性很强 只需要修改配置文件就可以了 不需要修改源代码了这就叫
控制反转(IOC intervse of control)
但是这种思想每个人的实现方式不一样所以需要一个标准,Spring就是这样的一个标准 或者说Spring 就是为了规范IOC而发布的框架
2.1.1 依赖注入(DI 英文Dependency Injection的缩写)
Spring 最认同的技术是控制反转的依赖注入(DI)模式。依赖注入仅仅是控制反转的一个具体的例子。
到底什么是依赖注入?让我们将这两个词分开来看一看。这里将依赖关系部分转化为两个类之间的关联。
例如,类 A 依赖于类 B。现在,让我们看一看第二部分,注入。所有这一切都意味着类 B 将通过 IoC 被注入到类 A 中。
2.2 aop
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程
Spring 框架的一个关键组件是面向方面的程序设计(AOP)框架。一个程序中跨越多个点的功能被称为横切关注点
这些横切关注点在概念上独立于应用程序的业务逻辑。
有各种各样常见的很好的关于方面的例子,比如日志记录、声明性事务、安全性,和缓存等等。
在 OOP 中模块化的关键单元是类,而在 AOP 中模块化的关键单元是方面。AOP 帮助你将横切关注点从它们所影响的对象中分离出来,
然而依赖注入帮助你将你的应用程序对象从彼此中分离出来。
上面的aop我是看的一脸懵逼 以后懂了在解释吧
3.0 耦合性
对象之间的耦合性就是对象之间的依赖性 设计软件要让对象之间的耦合性最小
4.0 Spring作用
spring是Java中协调对象间相互调用的解决方案,可以让对象之间的调用解除紧耦合,提高了程序的可伸缩性
5.0 Spring 体系结构
Spring 体系结构 : https://www.w3cschool.cn/wkspring/dcu91icn.html