1、基本介绍
- Spring是一个轻量级的控制反转和面向切面的容器框架。2002年首次推出雏形,2004年正式诞生。
- 决企业开发的复杂性,使现有的技术更加容易使用。本身是一个大杂烩,整合了现有的技术框架。
SSH:Spring +Struct2 +Hibernate
SSM:Spring+Spring MVC+MyBatis
2、优点
- 免费的开源容器框架;
- 非入侵式的、轻量级框架,导入之后不会影响代码原有逻辑配置;
- 控制反转(IOC)、面向切面编程(AOP);
- 支持事物的处理、对框架的整合。
总结:Spring是一个轻量级的控制反转和面向切面编程的实现框架。
3、Spring组成(7大模块)
4、核心思想
4.1 控制反转(IOC)
(1)现状
- 在面向对象设计的软件系统中,它的底层都是由N个对象构成的,各个对象之间通过相互合作,最终实现系统地业务逻辑。
- IOC借助于“第三方”实现具有依赖关系的对象之间的解耦。从本质上解决了程序员管理对象创建的问题,降低了对象之间的耦合性,提高代码重复使用率,可以更加专注于业务实现。
(2)IOC本质
- 控制反转是一种程序设计思想,DI(依赖注入)是实现控制反转的方式之一,借助于“第三方”实现对象之间的松散耦合,就是获得对象的方式反转了(由程序创建移交给客户选择)。
(3)IOC实现(xml配置与注解)
- Spring初始化之时先会读取配置文件,根据配置文件或者元数据创建与组织对象存入容器,程序使用时再从容器中取出对应对象。
采用XML方式配置Bean时候,Bean的定义和实现是分离的。采用注解可以把二者结合起来,Bean定义的信息可以直接通过注解定义在实现类里面,从而达到零配置。
4.2 面向切面编程(AOP)
- 在运行时,动态地将代码切入到类的指定方法、指定位置上。
- AOP 是一种编程思想。效果是,保证开发者不修改源代码的前提下,去为系统中的业务组件添加某种通用功能。
5、使用
(1)导入Jar包
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
spring 需要导入commons-logging进行日志记录 . 利用maven会自动下载对应的依赖项。
(2)编写程序
- 编写一个Hello实体类
public class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("Hello,"+ name );
}
}
- 编写spring文件 命名为beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--bean就是java对象 , 由Spring创建和管理-->
<!--id为对象名,class为类地址,name为属性,value为属性值-->
<bean id="hello" class="com.kuang.pojo.Hello">
<property name="name" value="Spring"/>
</bean>
</beans>
(3)测试
@Test
public void test(){
//解析beans.xml文件 , 生成管理相应的Bean对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//getBean : 参数即为spring配置文件中bean的id .
Hello hello = (Hello) context.getBean("hello");
hello.show();
}
(4)beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="MysqlImpl" class="com.kuang.dao.impl.UserDaoMySqlImpl"/>
<bean id="OracleImpl" class="com.kuang.dao.impl.UserDaoOracleImpl"/>
<bean id="ServiceImpl" class="com.kuang.service.impl.UserServiceImpl">
<!--注意: 这里的name并不是属性 , 而是set方法后面的那部分 , 首字母小写-->
<!--引用另外一个bean , 不是用value 而是用 ref-->
<property name="userDao" ref="OracleImpl"/>
</bean>
</beans>
6、总结
-
控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的;
-
反转 : 程序本身不创建对象 , 而变成被动的接收对象 ;
-
依赖注入 : 就是利用set方法来进行注入的。