目录
一、Spring介绍
简介:Spring是一个轻量级的开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他层之间的耦合问题。为开发Java程序提供了全面的基础框架支持,Spring负责基础架构,程序员负责专门的应用开发,不需要关注框架的底层具体实现。
注:Spring最重要的两个核心特性,一个是依赖注入(DI,也叫IOC(控制反转)),一个是面向切面编程(AOP)。
1.1、Spring框架的优势
- spring ioc降低了业务对象替换的复杂性,提高解耦。
- spring aop可以将一些通用的如安全、事务、日志等可以分离的东西做了一个切面切入,提供了更好的复用性。
- spring的orm和dao提供了第三方持久层框架的良好整合,并简化了数据库访问。
- spring的高度可开放性,可以只使用一部分,用到哪部分的框架就使用哪一部分。
二、Spring 框架的核心
Spring 框架中的核心主要有两个,一个是IOC(控制反转),一个是AOP(面向切面编程)。
2.1 IOC(控制反转)
IOC(Inversion of Control) 控制反转是一种面对对象编程的设计原则,用于降低代码之间的耦合度。在Java开发中,将你设计好的对象交给容器控制,而不是显示的用代码进行容器的创建。
把创建和查找对象的控制权交给IOC,由IOC容器进行注入、对象组合之间的关系。这样对象与对象之间是松耦合,对象可复用(减少对象的创建和内存消耗),使得程序的整个体系结构可维护性、灵活性、扩展性高。
所谓IOC,就是由Spring来进行对象的创建、管理和装配。
2.2 AOP(面向切面编程)
AOP也是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
AOP所要实现的目的是将复杂的需求分解为不同的切面,将散布在系统中的公共功能集中解决。
它的实际含义是在运行时将代码切入到类的指定方法、指定位置上,将不同方法的同一个位置抽象为一个切面对象,并对该对象进行编程。
AOP中出现的一些概念
- 通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
- 连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
- 切点(PointCut): 可以插入增强处理的连接点。
- 切面(Aspect): 切面是通知和切点的结合。
- 引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。
- 织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。
2.3 Spring 中 bean 的作用域
- singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
- prototype : 每次请求都会创建一个新的 bean 实例。
- request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
- session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。
三、 使用IDEA创建Spring
3.1 首先创建一个maven模块
3.2 然后在pom.xml文件中添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
3.3 配置spring.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 class="com.xinxi2.bean.TsySUser" id="tsySUser"></bean>
</beans>
3.4 测试类
package test;
import com.xinxi2.bean.TsySUser;
import com.xinxi2.service.TsySUserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class Test {
@org.junit.jupiter.api.Test
public void test01(){
ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml","ApplicationContext-aop.xml");
TsySUserService tsysUserService = (TsySUserService) ac.getBean("tsySUserServiceImpl");
List<TsySUser> list = tsysUserService.getList();
for (TsySUser tsySUser:list){
System.out.println(tsySUser.getRealname());
}
}
}