1. Spring概述
-
Spring是什么?
众所周知的是Spring是框架,所以可以将Spring理解为是高度抽取可重用代码的一种设计;具有高度的通用性的半成品软件。 -
Spring的核心关注点:容器的思想(可以管理所有的组件(类));IOC和AOP。
-
Spring的模块划分
Test Spring的单元测试模块
Core Container 核心容器(IOC);黑色代表这部分的功能由哪些jar包组成
AOP+Aspects 面向切面编程模)
Data(数据访问) Spring数据库访问模块
Web Spring开发web应用的模块;
2.IOC
-
IOC是什么?
IOC:(Inversion(反转) Of Control):控制反转。控制:指资源的获取方式;
个人理解为IOC是一种思想,其具体的实现则是容器的依赖注入。以往主动式:要什么资源都自己创建即可 如:new Object(), 但复杂对象的创建是比较庞大的工程;所以会比较繁琐,因为涉及到属性的赋值等等 被动式:资源的获取不是我们自己创建,而是交给一个容器来创建和设置; Object ob; public void test01(){ ob.wait(); }
容器:管理所有的组件(有功能的类);假设,xxxServlet受容器管理,xxxService也受容器管 理;容器可以自动的探查出那些组件(类)需要用到另一写组件(类);容器帮我们创建xxxService对象,并把xxxService对象赋值过去;
总结:容器的作用就是将主动的new资源变为被动的接受资源;
可以将容器理解为是一个婚介所:
以前找符合自己条件的老婆还得自己去搭讪—>沟通—>约会……等等操作;
有了婚介所之后呢,你可以直接在婚介所注册会员,然后将你想要找的对象的要求
给婚介所就行,婚介所自动帮你找到你要求的条件的对象。其中的过程你完全不用关心。
3. DI
Dependency Injection 依赖注入;
容器能知道哪个组件(类)运行的时候,需要另外一个类(组件);
容器通过反射的形式,将容器中准备好的xxxService对象注入(利用反射给属性赋值)
到xxxServlet中;只要IOC容器管理的组件,都能使用容器提供的强大功能;
4.HelloWorld
HelloWorld;(通过各种方式给容器中注册对象(注册会员))
以前是自己new 对象,现在所有的对象交给容器创建;给容器中注册组件
框架的开发步骤:
1.导包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.3.22</version>
</dependency>
2.写配置
new ----> XML Configuration Config -----> Spring Config
<!--bean标签可以注册一个组件(类,对象)
class是这个组件的全类名
id作为这个组价的唯一标识
-->
<bean id="person01" class="com.lly.beans.Person">
<!-- property标签可以为person对象属性赋值
name指定属性名
value指定属性值
-->
<property name="lastName" value="张三"></property>
<property name="age" value="20"></property>
<property name="email" value="person01@gmail.com"></property>
<property name="gender" value="male"></property>
</bean>
3.测试
5.结尾
* 存在的几个问题;
* 1)、src,源码包开始的路径,称为类路径的开始;
* 所有源码包里面的东西都会被合并放在类路径里面;
* java:/bin/
* web:/WEB-INF/classes/
* 几个细节:
* 1)、ApplicationContext(IOC容器的接口)
* 2)、给容器中注册一个组件;我们也从容器中按照id拿到了这个组件的对象?
* 组件的创建工作,是容器完成;
* Person对象是什么时候创建好了呢?
* 容器中对象的创建在容器创建完成的时候就已经创建好了;
* 3)、同一个组件在ioc容器中是单实例的;容器启动完成都已经创建准备好的;
* 4)、容器中如果没有这个组件,获取组件?
*报异常 org.springframework.beans.factory.NoSuchBeanDefinitionException:
* No bean named 'person03' is defined
* 5)、ioc容器在创建这个组件对象的时候,(property)会利用setter方法为javaBean的属性
进行赋值;
* 6)、javaBean的属性名是由什么决定的?getter/setter方法是属性名决定;set去掉后面
那一串首字母小写就是属性名;
* private String lastName;?
* 所以所有getter/setter都自动生成,不要改动!