Spring框架

Spring

Spring框架

基于JavaEE的轻量级框架,使用spring可以降低模块的耦合度,提高开发效率。

Spring框架的两大核心技术:

​ IOC

​ IOC:控制反转

​ DI:依赖注入

​ AOP

​ 面向切面编程

Spring的模块划分:

​ Spring IOC

​ Spring AOP

​ SpringJDBC (Spring + MyBatis)

​ Spring事务

Spring作用

Dao层 (数据访问层)

​ 数据库的JDBC操作

​ 对应的框架:MyBatis 或 Hibernate(持久层框架)

Service层 (业务逻辑层)

​ 具体的业务逻辑处理

​ 目前没有合适的框架

​ Spring框架不是用来处理业务逻辑层的

Controller层 (控制层)

​ Servlet:接收请求、响应数据、请求转发等

​ 对应的框架:SpringMVC

Spring框架:

​ Bean对象的实例化

​ 配置管理

​ 面向切面编程

自带服务:

​ 定时调度(定时任务)

​ 邮件发送

集成第三方框架

​ Quartz时钟框架(定时调度)

​ Spring Security 权限框架

Spring环境搭建

  1. 创建普通的Maven项目 (修改pom.xml配置文件)
  2. 在pom.xml中引入spring框架的依赖坐标
  3. 创建Bean对象
  4. 在resources目录下新建spring.xml配置文件,并设置bean标签
  5. 设置bean标签的id与class属性值 (id是bean对象的唯一标签,class是bean对象的类对象)
  6. 得到spring的上下文环境,通过getBean方法得到指定id的bean对象

Spring IOC容器Bean对象实例化模拟实现

  1. 工厂模式
  2. 反射 (得到指定方法 得到指定字段 调用方法 实例化类)
  3. XML解析 (dom4j + xpath)
  4. 单例模式
  5. 策略模式 (加载配置文件)

Spring IOC容器Bean对象实例化

构造器实例化

通过空构造进行Bean对象的实例化,要求Bean对象提供空构造

<bean id="唯一标识" class="类路径">
</bean>

静态工厂实例化 (了解)

  1. 定义静态工厂类 (普通类)

  2. 在类中定义静态方法,静态方法返回Bean对象的实例对象

  3. 在xml配置文件中通过静态工厂类得到实例化对象

    <bean id="唯一标识" class="静态工厂类的类路径" factory-method="静态工厂类中的静态方法">
    </bean>
    

实例工厂实例化(了解)

  1. 定义工厂类 (普通类)

  2. 在类中定义方法,方法返回Bean对象的实例对象

  3. 在xml配置文件中,先实例化工厂类

  4. 通过调用工厂类的方法,得到实例化对象

    <bean id="工厂类的唯一标识" class="工厂类的类路径"></bean>
    <bean id="Bean对象的唯一标识" factory-bean="工厂类的唯一标识" factory-method="工厂类中的方法"></bean>
    

Spring IOC容器配置文件的加载

单配置文件加载

相对路径
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
BeanFactory ac = new ClassPathXmlApplicationContext("spring.xml");
绝对路径(了解)
ApplicationContext ac = new FileSystemXmlApplicationContext("配置文件的绝对路径");

多配置文件加载

可变参数
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml","配置文件名","");
import导入

在一个总的配置文件中导入其他需要加载的配置文件,加载配置文件时只需要加载总的配置文件

spring.xml

<bean id="" class=""></bean>

bean.xml

<bean id="" class=""></bean>

service.xml

<!-- 导入其他配置文件 -->
<import resource="spring.xml"/>
<import resource="bean.xml"/>
BeanFactory ac = new ClassPathXmlApplicationContext("service.xml");

Spring IOC注入

手动注入

set方法注入

需要提供set方法

public class UserService {
    private UserDao userDao;

	public void setUserDao(UserDao userDao) {
    	this.userDao = userDao;
	}
}

设置属性字段的值

<bean id="userService" class="com.shsxt.service.UserService">
    <!-- 
		通过property标签设置字段的值
			name:属性字段的名称 (setXXX)
			ref:指定的bean标签的id
 	-->
    <property name="userDao" ref="userDao" />
</bean>

<bean id="userDao" class="com.shsxt.dao.UserDao">
</bean>
构造器注入

通过构造器的参数注入

public class UserService {
    private UserDao userDao;

    // 带参构造
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }
}

设置属性字段的值

<bean id="userService" class="com.shsxt.service.UserService">
    <!-- 
		通过constructor-arg标签设置字段的值
			name:属性字段的名称
			ref:指定的bean标签的id
 	-->
    <constructor-arg name="" ref=""/>
</bean>

<bean id="userDao" class="com.shsxt.dao.UserDao">
</bean>
循环依赖问题

当两个或多个类需要互相注入时,构造器注入会出现循环依赖问题。可以通过set方法注入解决。

静态工厂注入 (了解)
实例化工厂注入 (了解)

自动注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值