文章目录
Spring定义(什么是Spring)
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
官网 Spring是一个企业级应用框架,它提供了JAVA企业级应用开发所需要的一切功能。并且可以根据应用程序的需求灵活地创建多种体系结构。
Spring是一站式的轻量级开源框架。以Ioc(Inverse of control)控制反转和Aop(Aspect Oriented Programming)面向切面编程为核心 。
Spring表示的是一个统称,它包含了Spring所有的"家族"成员,如Spring Framework,SpringBoot、SpringCloud、SpringBatch、SpringData、SpringIntegration等,但是本文的Spring指的就是Spring Framework。而其它的Spring框架都是以Spring Framework为基础建立的。
简单举例
做饭和吃饭
自己做饭的时候, 需要亲自动手, 买菜,洗菜,切菜,炒菜 ...步骤很是繁琐
而我们也可以将做菜的权利委托给别人, 我们点外卖, 去餐馆吃饭都是如此
它的好处就是 缩短了我们辛苦做饭的时间
Spring起源:
Spring框架在2003年正式发布,作者是Rod Johnson ,Spring 响应了J2EE规范的复杂性,在早期的时候,Spring应用程序需要部署到应用程序服务器(如Tomcat)上才能运行。
但是Spring发展到现在,借助SpringBoot, 开发人员可以快速的创建一个应用程序 ,进行敏捷开发,并且借助SpringBoot内嵌的Servlet容器可以直接运行应用程序。
并且从Spring5开始,WebFlux应用程序甚至不使用Servlet API,也能在非Servlet容器的服务器(例如Netty)上运行。
Spring发展到现在,已经有许多的"家庭"成员了,如:Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch。有兴趣的童鞋可以在官网下载它们的Demo学习。
早期使用java开发企业应用(企业应用系统,比如:人力资源管理系统、OA办公自动化系统、财务系统 ,所有企业应用的系统总称为ERP)使用EJB(Enterprise java Bean)开发,是sun提供的规范,比如:把javabean分为:Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。 EJB特点依赖于应用服务器(比如:weblogic、websphere,类似 于tomcat),在开发EJb程序时过程比较繁琐。 Spring的出现是为了取代EJB的臃肿、低效、脱离现实缺点。Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。
Spring 原理
在以往的学习中, 在测试类Test中 调用 A类的(成员)方法 ,
必须在Test 中 先创建 A类的对象, 使用对象调用方法
Test 是依赖于 A
解除这种依赖关系 , 采用第三方中间人 Spring
Spring 管理所有的 A
Test 去找 Spring 获取 A的对象
什么是耦合?什么是内聚?(简单阐述)
耦合:就是程序之间的依赖关系; 耦合度越高 , 程序的独立性就会越差;
内聚:程序之间的功能实现关系;
程序的开发要做到:高内聚,低耦合;
实现:编译器不依赖,运行时才依赖;
- 降低耦合的思路:
通过反射创建对象,避免使用new;
通过配置文件配置创建对象的全限定类名;
Spring好处
1.方便解耦,简化开发:
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
2.AOP编程的支持:
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
3.声明式事务的支持:
只需要通过配置就可以完成对事务的管理,而无需手动编程
4.方便程序的测试:
Spring对Junit4支持,可以通过注解方便的测试Spring程序
5.方便集成各种优秀框架:
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
6.降低JavaEE API的使用难度:
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
Spring所包含的内容
Spring可以分为如下5个模块,分别如下:
核心模块(Core Container)
AOP模块(AOP、Aspect、Messaging)
数据访问和集成模块(jdbc、orm、transaction等)
WEB模块(Web MVC、 websocket、Servlet)
测试模块(Test)
使用IDEA 搭建Spring环境
Spring 环境包的下载
https://repo.spring.io/simple/libs-release-local/org/springframework/spring/4.3.6.RELEASE/
其他依赖包
IDEA 导入依赖
新建Spring核心配置文件
或者手动新建 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
</beans>
Maven 方式创建项目
新建maven 项目
导入maven 依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
测试案例
新建 对象 Demo
public class Demo {
public void m1(){
System.out.println("测试方法!!!!");
}
}
让中间人 管理Demo
在 Spring 核心配置文件中 注册 Demo
类似于 创建 Demo 对象 起个名字为 demoid
<bean id="demoid" class="cn.gh.Demo"></bean>
在 测试类中 获取 Demo 对象
// 创建 Spring 第三方 核心对象
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
Demo demo= (Demo) context.getBean("demoid");
demo.m1();