Spring框架学习笔记(一)

Spring概念

1 spring是开源的轻量级框架

2 spring核心主要两部分:

(1)aop:面向切面编程,扩展功能不是修改源代码实现

(2)ioc:控制反转

- 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象

- 把对象的创建不是通过new方式实现,而是交给spring配置创建类对象

3 spring是一站式框架

(1)spring在javaee三层结构中,每一层都提供不同的解决技术

- web层:springMVC

- service层:spring的ioc

- dao层:spring的jdbcTemplate

4 spring版本

spring4.x

Spring的ioc操作

1 把对象的创建交给spring进行管理

2 ioc操作两部分:

(1)ioc的配置文件方式

(2)ioc的注解方式

IOC底层原理

1 ioc底层原理使用技术

(1)xml配置文件

(2)dom4j解决xml

(3)工厂设计模式

(4)反射

2 画图分析ioc实现原理

IOC入门案例

第一步 导入jar包

(1)解压资料zip文件

Jar特点:都有三个jar包

(2)做spring最基本功能时候,导入四个核心的jar包就可以了

(3)导入支持日志输出的jar包

 

第二步 创建类,在类里面创建方法

 

第三步 创建spring配置文件,配置创建类

(1)spring核心配置文件名称和位置不是固定的

- 建议放到src下面,官方建议applicationContext.xml

(2)引入schema约束

 

(3)配置对象创建

 

第四步 写代码测试对象创建

(1)这段代码在测试中使用

测试结果如下:

Spring的bean管理(xml方式)

Bean实例化的方式

1 在spring里面通过配置文件创建对象

2 bean实例化三种方式实现

第一种 使用类的无参数构造创建(重点)

类里面没有无参数的构造,出现如下异常

 第二种 使用静态工厂创建

(1)创建静态的方法,返回类对象

 

 测试结果如下:

 

第三种 使用实例工厂创建

(1)创建不是静态的方法,返回类对象

 

 

结果如下:

 

Bean标签常用属性

(1)id属性:起名称,id属性值名称任意命名

  - id属性值,不能包含特殊符号

  - 根据id值得到配置对象

(2)class属性:创建对象所在类的全路径

(3)name属性:功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号

(4)scope属性

  - singleton:默认值,单例

- prototype:多例

 

- request:创建对象把对象放到request域里面

- session:创建对象把对象放到session域里面

- globalSession:创建对象把对象放到globalSession里面

 属性注入介绍

1 创建对象时候,向类里面属性里面设置值

2 属性注入的方式介绍(三种方式)

(1)使用set方法注入

(2)使用有参数构造注入

(3)使用接口注入

3 在spring框架里面,支持前两种方式

(1)set方法注入(重点)

(2)有参数构造注入

使用有参数构造注入属性

xml配置的写法:

 

结果如下:

使用set方法注入属性(重点)

 

 

注入对象类型属性(重点)

1 创建service类和dao类

(1)在service得到dao对象

2 具体实现过程

(1)在service里面把dao作为类型属性

(2)生成dao类型属性的set方法

(3)配置文件中注入关系

P名称空间注入

 

 

注入复杂类型属性

1 数组

2 list集合

3 map集合

4 properties类型

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!-- 注入复杂类型属性值 -->
 
  <bean id="person" class="cn.itcast.property.Person">
 
     <!-- 数组 -->
 
     <property name="arrs">
 
         <list>
 
            <value>小王</value>
 
            <value>小马</value>
 
            <value>小宋</value>
 
         </list>
 
     </property>
 
     
 
     <!-- list -->
 
     <property name="list">
 
         <list>
 
            <value>小奥</value>
 
            <value>小金</value>
 
            <value>小普</value>
 
         </list>         
 
     </property>
 
     
 
     <!-- map -->
 
     <property name="map">
 
         <map>
 
            <entry key="aa" value="lucy"></entry>
 
            <entry key="bb" value="mary"></entry>
 
            <entry key="cc" value="tom"></entry>
 
         </map>
 
     </property>
 
     
 
     <!-- properties -->
 
     <property name="properties">
 
         <props>
 
            <prop key="driverclass">com.mysql.jdbc.Driver</prop>
 
            <prop key="username">root</prop>
 
         </props>
 
     </property>
 
  </bean>

  

后续更多请见Spring框架学习笔记(二)

 

posted @   HPeak  阅读(555)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示