Spring

3.24 spring 学习笔记

学习 spring , 先引入 依赖

spring-core.jar spring核心配置 , ioc , aop 均在这个包里

spring-beans.jar spring 处理 java 类的 工具包

spring-context.jar spring 上下文

spring-expression.jar spring 处理表达式

commons-logging.jar spring 的日志依赖的jar

注意 以上 spring 开头的jar 需要版本号 一致 具体看 pom.xml

mybatis 需要 mybatis-config.xml

spring 需要 applicationContext.xml

IOC 与 AOP

IOC: 控制反转 也 称为 依赖注入

AOP: 面向切面的编程

3.27 Spring ioc

spring ioc 的底层 应用的是 java 的反射机制

要求 每个bean 至少包含 2个 构造器, 其中 必须 得有 无参构造器

spring ioc 基于xml 方式-----重点

a.基于xml方式 get/set 注入属性 --- 属性 必须 得有 get/set

b.基于xml 方式, 构造方法 注入属性 ---- 必须得有 带参数的构造方法

c. 基于p命名空间 p---- property

需要为 spring的配置文件, 引入 p 命名空间

xmlns:p="http://www.springframework.org/schema/p"

然后呢 通过 p:属性名="值" 进行 注入

模拟 java web 中 service 调用 dao

练习:

创建 spring1_2 module

实现 service 调用 dao 实现 员工的增加

显示方式: 控制台 打印输出 service -----add, dao--------add

总结:

基于xml 方式:

在spring的配置文件中 ,要配置 bean 的class 为 实现类 而不是 接口

在 测试类中, 通过 多态的向下转型 来获得 接口实例

接口类型 对象名= context.getBean();

spring 创建bean 的生命周期:

通过 Dept.java 来举例

  1. 调用无参构造

  2. 调用属性的set 方法

  3. 调用 init-method 对应的方法,进行初始化

  4. 做具体的操作

  5. 调用 destroy-method对应的方法,进行销毁

spring 的自动装配, 为 bean 标签 增加 autowire属性 , 该属性 有2个值 byName, byType

自动装配分为 2种, 基于 名字 或者 类型

a.基于名字的自动装配 autowire="byName"

注入时, 属性名 必须为 另一个bean的 id 属性

b.基于类型的自动装配 autowire="byType"

注入时, 属性名 可以与bean的id 属性 不一致, 因为按照类型 匹配

spring 配置 数据源,

引入 druid.jar

编写 db.properties

编写spring 的配置文件

spring ioc 基于 注解方式-----重点

注解: 简化 java 配置

@Override 重写

@NoArgsConstructor

@AllArgsConstructor

@Data

@ToString

进行 包的扫描

<context:component-scan base-package="dao,service"/>

@Autowired 通过 类型注入 byType

@Qualifier("bean的id") // 按照 名字映射 byName

service 调用 dao 来做示例

3.28 AOP

IOC: 控制反转

AOP: 面向切面的编程,

通俗的说,在不改变源代码的情况下 增加新功能.

AOP 实现代理的形式 有 jdk 动态代理与 cglib代理

当项目中有 接口时, 采用 jdk 动态代理

若没有接口 , 采用 cglib 动态代理

以 DeptDao.java 为例

基于xml 的 aop 的步骤:

内容: 调用 User.java 中的print() 方法时, 打印另外的输出内容 ---采用 aop 方式 实现

a. 引入 jar,

spring-aop.jar , aspectjweaver.jar

b. 编写 两个类, User.java 定义 print() 方法 ,

UserProxy.java 定义 beforeInvoke()方法;

c. 在 spring 的配置文件中 增加 aop 配置

引入 aop 的命名空间

增加 <aop:config>

在这个标签里 配置 切入点与切面

切入点 配置 User.java 定义 print()

切面 配置 UserProxy.java 定义 beforeInvoke()方法 并定义 通知类型

相关推荐
她的男孩18 小时前
权限通了、列表有数,一点分页就炸Forge Admin 用 COUNT(1) 扛住复杂待办
java·spring boot·mybatis
paopaokaka_luck1 天前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
大牧师2 天前
Mybatis 框架教程
java·数据库·mybatis·数据持久化·orm
代码什么用2 天前
MyBatis使用PageHelper && MyBatis的注解式开发
mybatis
VX_bysjlw9852 天前
数码设备销售网站设计与实现39138-计算机毕设原创(免费领源码+带部署教程)
java·vue.js·spring boot·mysql·tomcat·mybatis·idea
天空鸟_时光不老3 天前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
禾小西4 天前
Redis AOF 日志:宕机了,如何避免数据丢失?
java·redis·mybatis
天空鸟_时光不老4 天前
09-RAG问答系统落地:从默认分割器的坑到Milvus召回调优
java·人工智能·spring boot·spring·spring cloud·maven·mybatis
西凉的悲伤4 天前
MyBatis 中 association 与 collection 详解
java·mybatis
天空鸟_时光不老4 天前
10-Agent安全隐患与SQL执行层加固
java·数据库·人工智能·sql·spring·maven·mybatis