1 课程描述
IoC基础容器,主要涉及Bean对象的管理。
AOP面向切面编程,主要涉及切面配置,声明式事务控制
Spring整合Web环境。
Web层解决方案-SpringMVC.
1.1 IoC、DI和AOP思想的提出
由于传统的JavaWeb出现的问题:
问题1:层与层之间紧密耦合在一起,接口与具体实现紧密耦合在一起。
问题2:通用的事务功能和日志功能耦合在代码中。
基于上述问题提出IoC、DI和AOP思想
IoC:Inversion of Control,程序创建Bean的权利反转给第三方。
DI:Dependency Injection 依赖注入,强调Bean之间的关系,Bean2是Bean1的属性
AoP:面向切面编程,主要实现方式是代理。
2 Spring 框架的诞生
spring是一个开源的轻量级Java开发应用框架,可以简化企业级应用开发。Spring解决了开发者在JavaEE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。是当前企业中Java开发几乎不能缺少的框架之一。Spring的生态及其完善,不管是Spring哪个领域的解决方案都是依附于在SpringFramework基础框架的。
2.1 Spring 快速入门
导入坐标
编写UserService接口与其实现,只建立java文件,不用写代码。
配置到XML文件
写测试代码。
Bean文件
<?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">
<!--id表示唯一标识,class表示bean的名字-->
<bean id="userSerice" class="cn.msf.service.UserSerice">
</bean>
</beans>
测试代码1:基于BeanFactory的bean管理
package cn.msf.test;
import cn.msf.service.UserSerice;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
/**
* @author : msf
* @date : 2023/1/6
*/
public class BeanFactoryTest {
public static void main(String[] args) {
// 1. 创建工厂对象
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
// 2. 创建读取器,读取xml文件
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
// 3. 读取器配置文件给工厂.
reader.loadBeanDefinitions("beans.xml");
// 4. 测试
UserSerice userSerice = (UserSerice) beanFactory.getBean("userSerice");
System.out.println("userSerice = " + userSerice);
}
}
总结:这个也是很鸡肋啊,每次创建service文件都要使用getBean有没有简单的方式呢?可以使用注解形式进行简化。
我们都知道三层架构,dao层要注入到service中,service要注入到controller层中。spring如何进行依赖注入呢?
测试代码2:基于ApplicationContext的bean管理;
ApplicationContext 称为Spring容器,内部封装了BeanFactory,比BeanFactory功能更丰富更强大,使用ApplicationContext 进行开发时,xml配置文件的名称习惯写成applicationContext.xml。
package cn.msf.test;
import cn.msf.service.UserSerice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author : msf
* @date : 2023/1/6
*/
public class AppContextTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserSerice userSerice = (UserSerice) context.getBean("userSerice");
}
}
因为内部集成了beanFactory,因此可以不用再创建beanFactory,而可以直接加载xml文件。然后对bean进行管理。
这里还有一个小点,ApplicationContext是接口,要通过子类创建,因此可以使用ctrl + H查看。
3 总结:
如何简单的理解IoC呢?我们可以把他简单抽象成Map+反射。map主键存入userService,值存入它的全限定名。然后知道全限定名以后利用反射思想进行创建。当然这一切都想要读取xml,然后通过反射生成对象存入到spring容器中。