配置Spring
引入依赖
spring基础包:
maven仓库查询:仓库查询
- spring-core
- spring-beans
- spring-context
- spring-expression
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.3.5</version>
</dependency>
</dependencies>
核心配置文件
创建一个配置文件和Spring框架通信,文件路径resources,文件名为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:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
https://www.springframework.org/schema/util/spring-util.xsd
">
<!-- bean definitions here -->
//补充配置文件
<!-- 此标签的作用是利用反射机制将UserServiceImpl类的实例交给Spring容器 -->
<bean id="userService" class="UserServiceImpl"/>
</beans>
复制到我们的配置文件后左上角会提示“Application context not configured for this file”,点击“Configure application context”,点击OK
代码测试
编写接口类:java文件夹下新建接口类
public interface UserService {
public void saveUser();
}
新建实现类:输入接口方法实现
public class UserServiceImpl implements UserService {
public void saveUser() {
System.out.println("service的save方法执行了");
}
}
新建测试类:编写测试类main方法
public class DemoTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
UserService service = (UserService) context.getBean("userService");
service.saveUser();
}
}
过程分析
BeanFactory
BeanFactory是基础类型的IOC容器,是管理bean容器的根接口,并提供了完整的IOC服务支持
简单来说BeanFactory就是一个管理Bean的工厂,它主要负责初始化各种Bean、调用生命周期等方法
ApplicationContext
ApplicationContext被称为应用上下文,是BeanFactory接口的子接口,在其基础上提供了其他的附加功能,扩展了BeanFactory接口
ClassPathXmlApplicationContext
ClassPathXmlApplicationContext是ApplicationContext的实现类,也在其基础上加了许多附加功能
后端常用代码结构
接下来主要讲这三层的功能划分
Controller层(流程控制层):主要负责具体的业务模块流程的控制
Service层(业务逻辑层):主要负责业务模块的逻辑应用设计
DAO层(数据操作层):主要负责与数据库进行联络的一些任务
例如
Controller像是服务员,顾客点什么菜,菜上给几号桌,都是他的职责
Service是厨师,菜单上的菜全是他做的
Dao是厨房的小工,和原材料打交道的事情全是他管
为了方便后端与前端、后端与数据库的数据传输引入了一些定义类,如entity、vo、dto、po、jo等,常用的就是entity和vo
vo为视图类,传递和接收前端的数据,与前端所需字段一一对应
entity为实体类,与数据库表一一对应
代理模式
代理模式可以分为静态代理和动态代理:
静态代理
静态代理是由程序员创建或特定工具自动生成源代码,在程序运行之前,代理类就已经编译生成了.class文件。
静态代理的优点是可以在符合开闭原则的情况下对目标对象进行功能扩展,缺点则是开发人员需要为每一个服务都得创建代理类,工作量太大,不易管理。同时接口一旦发生改变,代理类也得相应修改
动态代理
动态代理是在程序运行时通过反射机制动态创建的,随用随加载。动态代理常用的有基于接口和基于子类两种方式
基于接口的动态代理指的是由JDK官方提供的Proxy类,要求被代理类最少实现一个接口,这种方式大大减少了开发人员的开发任务,减少了对业务接口的依赖,降低了耦合度,缺点就是注定有一个共同的父类叫Proxy,Java的继承机制注定了这些动态代理类们无法实现对class的动态代理,原因是多继承在Java中本质上就行不通