# Spring **Repository Path**: weiaigewang/spring ## Basic Information - **Project Name**: Spring - **Description**: spring 项目学习 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-03 - **Last Updated**: 2021-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring个人学习 ## 一、 spring概念 spring核心概念文档:[spring核心概念:https://docs.spring.io/spring-framework/docs/5.2.18.RELEASE/spring-framework-referenc](https://docs.spring.io/spring-framework/docs/5.2.18.RELEASE/spring-framework-referenc) - IOC - AOP - 事务管理 - WebFlux ## 二、 spring IOC容器 - 控制反转:把对象创建和对象之间的调用过程,交给spring进行管理。 ### 2.1、IOC概念: IOC的出现是为了人让对象与对象之间的耦合度降低到最低的限度。 - 原始方式对象创建: 在调用对象类中,采用new关键字创建实例调用实例方法这种方式耦合度太高,不利于开发。 - 工厂模式对象创建: 采用工厂类创建对象降低了service和dao之间调用,但是还是需要借助工厂类耦合。 - IOC容器创建对象: ### 2.2、IOC实现原理: spring ico实现:xml解析 + 工厂模式 + 反射 ### 2.3、IOC目的: `降低耦合度` ### 2.4、IOC底层实现过程: ```java public class UserFactory { public static UserDao getUserDao(){ /** * 1、xml解析得到对象名称 * String classValue = Class.属性值; * 2、反射:得到类的字节码文件 * Class class = Class.forName(classValue); * 3、返回对象 * return (UserDao)class.newInstance(); */ return new UserDao(); } } ``` ### 2.5、IOC容器: 底层就是上面一堆工厂类的实现类。 - BeanFactory: * (1)、IOC容器的内部使用接口。 * (2)、加载配置文件的时候不会创建对象,在获取对象的时候才会去创建对象。 - ApplicationContext: * (1)、BeanFactory的子接口,功能更加强大 * (2)、加载配置文件的时候就会把配置文件的对象进行创建。 * (3)、一般会把创建对象这种耗时操作放在加载阶段就进行创建。 - ClassPathXmlApplicationContext: 获取的是项目的src下面的路径。 - FileSystemXmlApplicationContext: 需要spring xml全路径。 ```java public class TestSpring { @Test public void test(){ // 1、加载spring配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); //需要xml全路径 //ApplicationContext context = new FileSystemXmlApplicationContext("bean1.xml"); // 2、获取配置创建对象(userDao:xml中的id属性名) UserDao dao = context.getBean("UserDao", UserDao.class); dao.create(); } } ``` ### 2.6、bean管理: - 创建对象:两种方式 * (1)、基于xml配置: xml配置创建对象的时候默认使用无参构造方法创建对象。 ```xml ``` - 注入属性: * (1)、基于xml配置: - <1>、spring在xml通过bean中的property属性注入属性。 * (1)、DI:依赖注入,就是注入属性。 * (2)、spring 只支持`set方法注入`或者`有参构造方法注入`。 ```xml ``` - <2>、通过有参构造注入属性 ```xml ``` - <3>、p命名空间注入 ```xml ``` - <4>、字面量属性注入空值 ```xml ``` - <5>、字面量属性特殊字符处理,防止转义 ```xml >]]> ``` - <6>、对象类型注入 ```xml ``` 然后再java类中执行main函数 ```java public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); UserService userService = context.getBean("userService", UserService.class); userService.test(); } } ``` - 内部bean和级联属性 : (1)一对多关系:部门和员工 ```xml 或者 ``` - 集合属性注入: 新建java类 ```java public class Student { private List roles; private String[] hobby; private Map map; private Set sets; // ... there is ignore } ``` 然后在spring xml中配置 ```xml 吃饭 睡觉 打豆豆 admin custom 管理员 超级管理员 《java从入门到入院》 《C#从入门到入院》 《PHP从入门到入院》 《web从入门到入院》 ``` ## 三、 spring AOP ## 四、 spring 事务 ## 五、 spring Webflux