一、spring介绍
1、spring是什么?
spring是轻量级的JAVAEE应用开源框架
其特点包括模块化、灵活性、高度可测试性和一组丰富的API,适用于多种Java应用场景,包括后端服务、微服务、大数据处理等。
2、spring的核心概念
IoC :控制反转
IoC是Spring最核心的理念之一,它将对象的创建和依赖关系的管理交给Spring容器处理,而不是在代码中手动管理,这使得代码更加模块化和松散耦合。
AOP:切面编程
AOP则允许开发者对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化,将这些服务模块化,并以声明的方式将它们应用到需要的组件上。
二、IOC
1.耦合
耦合:对象之间的依赖关系,耦合度越高维护的成本就越高。
耦合的原因:硬编码
这就好比两块乐高积木,如果两个积木的连接越紧密,则说明其耦合度越高;反之,如果两块积木的连接十分松散,可以随意拆卸,则说明其耦合度低。
2.IoC如何控制反转?
想象一下,你正在玩一个复杂的拼图游戏,每个拼图块(对象)需要与特定的其他块(依赖)配合才能完成整个画面。通常情况下,你可能需要自己找到每个块并将其正确放置,这就像在代码中手动创建对象并管理它们之间的依赖关系。但是,使用IoC(控制反转),就像是有一个聪明的助手(Spring容器),它负责理解整个拼图的结构,然后自动将正确的拼图块放到你的手中。这样,你只需要专注于拼图的某个部分,而不用关心每个块从哪里来,或者它需要和哪些块配合,这使得你的游戏(代码)更加简单和模块化。
原先ObjectB是依靠ObjectA来创建的,一但A有了什么风吹草动,B也需要改变,这就是控制的“正向”。这也是我们常说的耦合度高,不便于我们测试与修改代码。
现在,我们创建一个IoC容器,由它全权负责创建ObjectB,ObjectA不再负责参与ObjectB的创建这就是控制的“反转”。降低耦合度,测试与修改代码就方便了很多
通过这种方式,对象的创建和依赖管理被委托给IoC容器,而对象本身只需要声明它需要哪些依赖,而不需要关心这些依赖是如何被创建和提供的。
3.自定义工厂的IOC解决程序耦合
OK,了解了IoC如何进行控制反转后,我们来试着自定义工厂IoC来解决程序耦合:
-----------BeanFactory:①反射创建对象 ②把对象放map-----------
①把service和dao配置到bean.properties
②读取bean.properties
③通过反射创建对象,并装到IOC容器中
④使用对象时,直接从IOC容器中获得
4.spring的ioc解决程序耦合
(1)pom.xml
spring-context
(2)applicationContext.xml
<bean id="userDao" class="com.jy.dao.UserDaoImpl"></bean>
<bean id="userService" class="com.jy.service.UserServiceImpl"></bean>
(3)测试
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = ac.getBean("userService", UserService.class);
userService.addUser();