spring学习路线 Spring Framework系统架构
相关概念
- 低耦合:是指系统中各个模块或组件之间的依赖性较低,即它们之间的联系较少、交互简单。这种设计原则的目的是为了提高系统的灵活性和可维护性,便于模块的独立开发、测试和替换。
- 解耦:是指在系统设计中通过降低各个组件或模块之间的直接依赖关系,从而提高系统的灵活性和可维护性。解耦的目标是使得系统中的各个部分能够独立工作,减少它们之间的交互复杂性,便于单独修改、替换或扩展。
- Bean:是一个由Spring IoC(控制反转)容器管理的对象。具体来说,Bean是一个由Spring容器实例化、组装和管理的类的实例。
- 依赖注入:在传统的编程模式中,一个对象通常负责创建其依赖的对象,这会导致紧耦合,降低了代码的灵活性和可维护性。而依赖注入改变了这一模式,通过将对象的创建和使用分离,让容器负责对象的生命周期管理和依赖关系的注入。主要目的是为了提高软件系统的灵活性、可维护性和可测试性。依赖注入的目的如下:
- 松耦合
- 提高可测试性
- 易于维护和扩展
- 实现控制反转(IoC)
- 增强代码的可重用性
- 集中化配置管理
ioc入门案例
添加maven配置
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
在resources下新建applicationContext.xml(spring)
之后导入spring坐标
创建这四个文件
// UserServiceImpl中
package com.itheima.service.impl;
import com.itheima.service.UserService;
public class UserServiceImpl implements UserService {
}
// UserService中
package com.itheima.service;
public interface UserService {
}
// BeanFactoryTest中
package com.itheima.test;
import com.itheima.service.UserService;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import javax.swing.*;
public class BeanFactoryTest {
public static void main(String[] args) {
// 创建工厂对象
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
// 创建一个xml读取器
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
// 读取配置文件给工厂
reader.loadBeanDefinitions("applicationContext.xml");
// 根据id获取Bean实例对象
UserService useService = (UserService) beanFactory.getBean("userService");
System.out.println(useService); // 获取到了bean对象
}
}
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"></bean>
</beans>
以上就基本在ioc容器里面加入了一个bean
如果还要加入一个bean,而且之前的那个userService要依赖于这个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">
<!--配置UserServiceImpl-->
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<!-- name里的要对应UserServiceImpl.java文件,ref对应要依赖的bean对象 -->
<property name="UserDao" ref="userDao"></property>
</bean>
<!--配置UserDaoImpl-->
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
</beans>
UserServiceImpl.java文件中 (setxxxx,xxxx要对应xml文件里的name)
package com.itheima.service.impl;
import com.itheima.dao.UserDao;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.service.UserService;
public class UserServiceImpl implements UserService {
// bean工厂去调用该方法,从容器里面获得userDao设置
public void setUserDao(UserDaoImpl UserDao) {
System.out.println("beanfactory去调用该方法获得userDao设置到此处:" + UserDao);;
}
}