Spring5框架概述
- Spring是轻量级的开源的JavaEE框架。
- Spring可以解决企业应用开发的复杂性。
- Spring有两个核心部分:IOC和AOP
- IOC:控制反转,把创建对象过程交给Spring进行管理
- AOP:面向切面,不修改源代码进行功能增强
- Spring特点
- 方便解耦,简化开发(IOC可以降低耦合性)
- AOP编程支持
- 方便程序测试(Spring对Junit4支持,可以通过注解方便的测试Spring程序)
- 方便和其他框架进行整合
- 方便进行事务操作
- 降低API开发难度
- Spring5系统结构
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>
IOC
概念和原理
什么是IOC
- 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
- 使用IOC目的:为了降低耦合度
IOC底层原理
xml解析、工厂模式、反射
- 原始方式与工厂模式的对比
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>
- 画图讲解IOC底层原理
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>
IOC之BeanFactory接口
- IOC思想基于IOC容器完成,IOC底层就是对象工厂
- Spring提供IOC容器实现两种方式:(两个接口)
- BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用
加载配置文件时不会创建对象,在获取对象(使用)才去创建对象
- ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人人员进行调用
加载配置文件时会把在配置文件对象进行创建
- ApplicationContext接口有实现类
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>
- FileSystemXmlApplicationContext
configLocation:要写上配置文件在系统盘(某个盘)里的路径
- ClassPathXmlApplicationContext
configLocation:要写上类路径
IOC操作Bean管理
概念
- 什么是Bean管理
Bean管理指的是两个操作:Spring创建对象和Spring注入属性
- Bean管理操作的方式:
基于xml方式
- 创建对象
- 在Spring配置文件配置对象创建,配置属性注入
- <bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
复制代码
第二种注入方式:使用有参构造进行注入
- 创建类,定义属性,创建属性对应的有参构造方法
- 在spring配置文件中进行配置
- <bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码
p名称空间注入(了解)
使用p名称空间注入,可以简化基于xml配置方式
- 添加p名称空间在配置文件中
- [/code]
- [*]进行属性注入,在bean标签里面进行操作
- [code]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码
xml注入其他类型属性
- 字面量
- null值
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 属性值包含特殊符号
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>]]>
复制代码
- 注入属性——外部bean
- 创建两个类service类和dao类
- package
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>com.atguigu.spring5.dao;public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>interface
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDao{<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>update();}
复制代码- package
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>com.atguigu.spring5.dao;public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDaoImpl
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>implements
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDao{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Override
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>update(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("dao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>update...........");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码 - 在service调用dao里面的方法
- 在spring配置文件中进行配置
- <bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码
- 注入属性——内部bean
比如:部门和员工,一个部门有多个员工,一个员工属于一个部门。
- 在实体类之间表示一对多关系:员工使用对象类型属性进行表示所属部门
- //部门类public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>static
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Dept{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>dname;
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>setDname(String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>dname){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>this.dname=dnamel
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码 - 在Spring配置文件
- 注入属性——级联赋值
- 第一种写法
- <bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 第二种写法
- //使用对象形式表示员工属于某一个部门private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Dept
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>dept;//生成dept的get方法public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Dept
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>getDept(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>dept;}public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>setDept(Dept
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>dept){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>this.dept
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>dept;}
复制代码- <bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean><bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码
xml注入集合属性
- 注入数组类型属性
- 注入List集合类型属性
- 注入Map集合类型属性
- 注入Set集合类型属性
第一步,创建类,定义数组、List、Map、Set类型属性,生成对应set方法第二步,在Spring配置文件进行配置
- 在集合里面设置对象类型值
- <bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean><bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 把集合注入部分提取出来
- 在Spring配置文件中引入名称空间util
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 使用util标签完成list集合注入提取
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>易筋经
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>九阳神功
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>九阴真经
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码
FactoryBean
- Spring有两种类型bean,一种普通bean,另一种工厂bean(FactoryBean)
- 普通bean:在配置文件中定义bean类型就是返回类型
- 工厂bean:在配置文件中定义bean类型可以和返回类型不一样
第一步,创建类,让这个类作为工厂bean,实现接口FactoryBean
第二步,实现接口里面的方法,在实现的方法中定义返回的bean类型第三步,配置spring配置文件- [/code]测试类:
- [code]public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>test(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ApplicationContext
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>context
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ClassPathXmlApplicationContext("bean.xml");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Course
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>course
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>context.getBean("mybean",
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Course.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(course);}
复制代码 bean作用域
- 在Spring里面,设置创建bean实例可以是单实例,也可以是多实例
- 在Spring里面,默认情况下,bean是单实例对象
- @Testpublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>testCollection2(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ApplicationContext
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>context=new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ClassPathXmlApplicationContext("bean2.xml");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=context.getBean("book",
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book1
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=context.getBean("book",
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(book);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//com.atguigu.sqpring5.collectiontype.Book@5d11346a
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(book1);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//com.atguigu.sqpring5.collectiontype.Book@5d11346a}
复制代码 以上例子的两个输出是相同的,说明bean默认是单实例对象。
- 如何设置单实例or多实例
- 在Spring配置文件bean标签里面有属性scope,用于设置单实例还是多实例
- scope属性值
- singleton:表示单实例对象(默认值)
- prototype:表示多实例对象
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 再次测试:- @Testpublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>testCollection2(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ApplicationContext
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>context=new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ClassPathXmlApplicationContext("bean2.xml");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=context.getBean("book",
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book1
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=context.getBean("book",
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(book);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean> //com.atguigu.sqpring5.collectiontype.Book@5d11346a
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(book1);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean> //com.atguigu.sqpring5.collectiontype.Book@7a36aefa}
复制代码 以上例子的两个输出不同,说明此时bean是多实例对象。
- singleton和prototype区别
- singleton表示单实例,prototype表示多实例
- 设置scope值singleton时候,加载spring配置文件就会创建一个单实例对象
- 设置scope值是prototype时候,不是在加载spring配置文件时候创建对象,在调用getBean方法时候创建多实例对象
bean生命周期
- 生命周期:从对象创建到对象销毁的过程
- bean生命周期
- 通过构造器创建bean实例(无参构造)
- 为bean的属性设置值和对其他bean的引用(调用set方法)
- 调用bean的初始化的方法(需要进行配置初始化的方法)
- bean可以使用了(对象获取到了)
- 当容器关闭的时候,调用销毁bean的方法(需要配置销毁的方法)
- 演示bean生命周期在Spring配置文件中使用init-method指定初始化方法,用destroy-method指定销毁方法
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 测试:输出:
第一步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>执行无参构造创建bean实例
第二步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>调用set方法设置属性的值
第三步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>执行初始化方法
第四步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>获取创建bean实例对象
com.atguigu.spring5.bean.Order@192d3247
第五步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>执行销毁方法
- bean的后置处理器,bean生命周期有七步
- 通过构造器创建bean实例(无参构造)
- 为bean的属性设置值和对其他bean的引用(调用set方法)
- 把bean实例传递到bean后置处理器的方法postProcessBeforeInitialization
- 调用bean的初始化的方法(需要进行配置初始化的方法)
- 把bean实例传递到bean后置处理器的方法postProcessAfterInitialization
- bean可以使用了(对象获取到了)
- 当容器关闭的时候,调用销毁bean的方法(需要配置销毁的方法)
- 演示添加后置处理器效果
- 创建类,实现接口BeanPostProcessor,创建后置处理器
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 测试:输出:
第一步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>执行无参构造创建bean实例
第二步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>调用set方法设置属性的值
在初始化之前执行的方法
第三步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>执行初始化方法
在初始化之后执行的方法
第四步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>获取创建bean实例对象
com.atguigu.spring5.bean.Order@192d3247
第五步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>执行销毁方法
xml自动装配
- 自动装配:根据指定的装配规则(属性名称或者属性类型),Spring自动将匹配的属性值注入
- 实现自动装配:bean标签属性autowire,配置自动装配
autowire属性常用两个值:
byName根据属性名称注入,注入值bean的id值和类属性名称一样
byType根据属性类型注入
- 演示自动装配过程
- 根据属性名称自动注入
- <bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>
复制代码 - 根据属性类型自动注入
- <bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>
复制代码 外部属性文件
- 直接配置数据库信息
- 配置德鲁伊连接池
- 引入德鲁伊连接池依赖jar包(druid)
- <bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码
- 引入外部属性文件配置数据库连接池
- 创建外部属性文件,properties格式文件,写数据库信息

- 把外部properties属性文件引入到spring配置文件中
- 引入context名称空间
- [/code]
- [*]在Spring配置文件使用标签引入外部属性文件
- [code]<bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码
基于注解方式
- 什么是注解
- 注解是代码特殊标记,格式
注解名称(属性名称=属性值,属性名称=属性值)
- 使用注解,注解作用在类上面,方法上面,属性上面
- 使用注解目的:简化xml配置
- Spring针对Bean管理中创建对象提供注解
- @Component
- @Service
- @Controller
- @Repository
以上四个注解功能是一样的,都可以用来创建bean实例
- 基于注解方式实现对象创建
- 引入依赖

- 开启组件扫描
- [/code]
- [*]创建类,在类上面添加创建对象注解
- [code]//在注解里面value属性值可以省略不写//默认值是类名称,首字母小写//UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>-->
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService@Component(value
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>"userService")
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>add(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("service
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>add......");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码 - 开启组件扫描细节配置
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 基于注解方式实现属性注入
- @AutoWired:根据属性类型自动装配
第一步,把service和dao对象创建,在service和dao类添加创建对象注解
第二步,在service注入dao对象,在service类添加dao类型属性,在属性上面使用注解 - @Qualifier:根据属性名称注入
这个@Qualifier注解的使用,和上面@Autowired一起使用- //定义dao类型的属性//不需要添加set方法//添加注入属性注解@Autowired
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//根据类型进行注入@Qualifier(value
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>"userDaoImpl1")
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//根据名称注入private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userDao;
复制代码 - @Resource:可以根据类型注入,可以根据名称注入
- //<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Resource
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//根据类型进行注入<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>@Resource(name="userDaoImpl1")
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//根据名称进行注入
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userDao;
复制代码 - @Value:注入普通类型属性
- @Value(value
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>"abc")private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name;
复制代码
- 完全注释开发
- 创建配置类,代替xml配置文件
- @Configuration
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//作为配置类,替代xml配置文件@ComponentScan(basePackages
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>"com.atguigu")public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>SpringConfig
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码 - 编写测试类
- @Testpublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>testService2(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//加载配置类
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ApplicationContext
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>context
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>AnnotationConfigApplicationContext(SpringConfig.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>context.getBean("userService",
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(userService);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService.add();}
复制代码
AOP
概念
什么是AOP?
- 面向切面编程(方面),利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合性降低,提高程序的可重用性,同时提高了开发的效率。
- 通俗描述:不通过修改源代码方式,在主干功能里面添加新功能
- 使用登录例子说明AOP

底层原理
AOP底层使用动态代理
- 有接口代理,使用JDK动态代理
- 创建接口实现类代理对象,增强类的方法

- 没有接口情况,使用CGLIB动态代理
- 创建子类的代理对象,增强类的方法

JDK动态代理
- 使用JDK动态代理,使用Proxy类里面的方法创建代理对象
Proxy类是属于java.lang包中的
- 调用newProxyInstance方法
static
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Object
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>newProxyInstance(ClassLoader
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>loader,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>类[]
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>interfaces,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>InvocationHandler
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>h)
返回指定接口的代理类的实例,该接口将调用分派给指定的调用处理程序。
参数:
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean><bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>第一个参数:类加载器
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean><bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>第二个参数:增强方法所在类,这个类实现的接口,支持多个接口
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean><bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>第三个参数:实现这个接口InvocationHandler,创建代理对象,写增强的部分
- 编写JDK动态代理代码
- 创建接口,定义方法
- public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>interface
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>add(int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>a,int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>b);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>update(String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id);}
复制代码 - 创建接口实现类,实现方法
- 使用Proxy类创建接口代理对象
- public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>JDKProxy
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>static
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>main(String[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>args)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//创建接口实现类代理对象
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Class[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>interfaces={UserDao.class};//
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Proxy.newProxyInstance(JDKProxy.class.getClassLoader(),
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>interfaces,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>InvocationHandler()
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{//<bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>@Override//<bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Object
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>invoke(Object
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>proxy,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Method
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>method,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>args)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>throws
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Throwable
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{//<bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>null;//<bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>}//
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>});
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDaoImpl
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userDao=new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDaoImpl();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>dao=(UserDao)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(),
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>interfaces,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDaoProxy(userDao));
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>result
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>dao.add(1,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>2);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("result"+result);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}//创建代理对象代码class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDaoProxy
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>implements
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>InvocationHandler{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//1
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>把创建的是谁的代理对象
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>把谁传递过来
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//有参数构造器
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Object
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>obj;
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDaoProxy(Object
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>obj){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>this.obj=obj;
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//增强的逻辑
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Override
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Object
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>invoke(Object
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>proxy,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Method
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>method,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>args)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>throws
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Throwable
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//方法之前
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("方法之前执行......"+method.getName()+"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>:传递的参数..."+
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Arrays.toString(args));
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//被增强的方法执行
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Object
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>res=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>method.invoke(obj,args);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//方法之后
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("方法之后执行......"+obj);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>res;
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码
术语
- 连接点(Jointpoint):类里面哪些方法可以被增强,这些方法被称为连接点。(类中可以被增强的方法)
- 切入点(Pointcut):实际被真正增强的方法
- 增强(Advice):指的是在目标对象的方法调用前、后或抛出异常时,通过动态代理技术在目标对象的方法周围插入拦截器的逻辑代码,从而实现对目标对象方法的增强和定制。
- 通知(增强):实际增强的逻辑部分。通知定义了增强在何时被调用,并指定了增强的类型。
通知有多种类型:
- 前置通知
- 后置通知
- 返回增强
- 环绕通知
- 异常通知
- 最终通知
- 切面/方面(Aspect):把通知应用到切入点的过程(动作)
AOP操作——准备工作
- Spring框架一般基于AspectJ实现AOP操作
- AspectJ不是Spring组成部分,独立AOP框架,一般把AspectJ和Spring框架一起使用,进行AOP操作
- 基于AspectJ实现AOP操作
- 在项目工程里面引入AOP相关依赖

- 切入点表达式
- 作用:知道对哪个类里面的哪个方法进行增强
- 语法结构:execution([权限修饰符]
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>[返回类型]
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>[类全路径]
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>[方法名称]
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>[参数列表])
举例1:
对com.atguigu.dao.BookDao类里面的add进行增强:execution(*
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>com.atguigu.dao.BookDao.add(..))
举例2:
对com.atguigu.dao.BookDao类里面的所有方法进行增强:execution(*
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>com.atguigu.dao.BookDao.*(..))
举例3:
对com.atguigu.dao包里面所有类,类里面的所有方法进行增强:execution(*
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>com.atguigu.dao*.*(..))
AOP操作——AspectJ注解
- 创建类,在类里面定义方法
- public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>User
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>add(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("add..............");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码 - 创建增强类(编写增强逻辑)
在增强类里面,创建方法,让不同方法代表不同通知类型- public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserProxy
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>before(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//前置通知
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("before.......");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码 - 进行通知的配置
- 在Spring配置文件中,开启注解扫描
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 使用注解创建User和UserProxy对象
- //被增强的类@Componentpublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>User
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}//增强的类@Componentpublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserProxy
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码 - 在增强类上面添加注解@Aspect
- //增强的类@Component@Aspect
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//生成代理对象public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserProxy
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码 - 在spring配置文件中开启生成代理对象
- 相同切入点抽取
- //相同切入点抽取@Pointcut(value
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>="execution(*
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>com.atguigu.spring5.aopanno.User.add(..))")public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>pointdemo(){}//前置通知//@Before注解表示作为前置通知@Before(value
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>"pointdemo()")
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//可直接使用pointdemo作为valuepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>before(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("before.......");}
复制代码 - 有多个增强类多同一个方法进行增强,设置增强类优先级
在增强类上面添加注解@Order(数字类型值),数字类型值越小优先级越高- @Component@Aspect@Order(1)public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>PersonProxy
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码 - 完全使用注解开发
创建配置类,不需要创建xml配置文件- @Configuration@ComponentScan(basePackages
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{"com.atguigu"})@EnableAspectJAutoProxy(proxyTargetClass
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>true)public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ConfigAop
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码
AOP操作——AspectJ配置文件
- 创建两个类,增强类和被增强类,创建方法
- 在Spring配置文件中创建两个类对象
JdbcTemplate
概念和准备
- 什么是JdbcTemplate
Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作
- 准备工作
- 创建数据库和表
- CREATE
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>DATABASE
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>user_dbCREATE
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>TABLE
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book(<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>userId
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BIGINT
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>PRIMARY
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>KEY,<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>username
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>VARCHAR(100)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>NOT
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>NULL,<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>ustatus
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>VARCHAR(50)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>NOT
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>NULL)
复制代码 - 引入相关的jar包

- 在Spring配置文件中配置数据库的连接池
- <bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 配置JdbcTemplate对象,注入DataSource
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 创建service类,创建dao类,在dao注入jdbcTemplate对象
配置文件:- [/code]Service类:
- [code]@Servicepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BookService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//注入dao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Autowired
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BookDao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>bookDao;}
复制代码 Dao类:- @Repositorypublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BookDaoImpl
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>implements
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BookDao{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//注入JdbcTemplate
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Autowired
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>JdbcTemplate
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate;}
复制代码
JdbcTemplate操作数据库
添加
- 对应数据库创建实体类
- 编写Service和Dao
- 在dao进行数据库添加操作
- 调用JdbcTemplate对象里面update方法实现添加操作
update(String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Object...
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>args)
参数:
String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql:sql语句
Object...
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>args:可变参数,设置sql语句值
- 测试
- @Testpublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>testJdbcTemplate(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ApplicationContext
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>context
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ClassPathXmlApplicationContext("bean1.xml");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BookService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>bookService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>context.getBean("bookService",
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BookService.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book.setUserId("1");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book.setUsername("java");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book.setUstatus("A");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>bookService.addBook(book);}
复制代码 结果:
修改和删除
- 修改
- @Overridepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>update(Book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>sql="update
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>set
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>username=?,ustate=?
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>where
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userId=?";
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>args={
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book.getUsername(),
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book.getUstatus(),
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book.getUserId()};
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>update
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate.update(sql,args);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(update>0?"修改成功":"修改失败");}
复制代码 - 删除
- @Overridepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>delete(String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>sql="delete
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>from
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>where
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userId=?)";
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>update
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate.update(sql,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(update>0?"删除成功":"删除失败");}
复制代码 查询返回某个值
- 查询表里面有多少条记录,返回是某个值
- 使用JdbcTemplate对象里面的queryForOcject方法实现查询操作
queryForObject(String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Class
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>requiredType)
参数:
String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql:sql语句
Class
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>requiredType:返回类型Class
- //查询表记录数@Overridepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>selectCount(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>sql="select
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>count(*)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>from
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book";
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Integer
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>count
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate.queryForObject(sql,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Integer.class);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>count;}
复制代码 查询返回对象
- 场景:查询图书详情
- JdbcTemplate实现查询返回对象的方法:queryForObject
queryForObject(String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>RowMapper
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>rowMapper,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Object...
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>args)
参数:
String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql:sql语句
RowMapper
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>rowMapper:RowMapper是接口,返回不同类型的数据,使用这个接口里面实现类完成数据封装
Object...
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>args:sql语句值
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//查询返回对象@Overridepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>findBookInfo(String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>sql="select
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>*
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>from
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>where
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userId=?";
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//调用方法
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate.queryForObject(sql,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BeanPropertyRowMapper(Book.class),id);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>book;}
复制代码 查询返回集合
- 场景:查询图书列表分页
- 调用JdbcTemplate的query方法实现查询返回集合
query(String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>RowMapper
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>rowMapper,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Object...
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>args)
参数:
String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql:sql语句
RowMapper
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>rowMapper:RowMapper是接口,返回不同类型的数据,使用这个接口里面实现类完成数据封装
Object...
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>args:sql语句值
- //查询返回集合@Overridepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>List
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>findAllBook()
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>sql="select
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>*
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>from
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book";
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//调用方法
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>List
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>bookList
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate.query(sql,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BeanPropertyRowMapper(Book.class));
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>bookList;}
复制代码 批量操作
- 批量操作:操作表里面的多条记录
- JdbcTemplate实现批量添加操作
batchUpdate(String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql,
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>List
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>batchArgs)
参数:
String
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>sql:sql语句
List
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>batchArgs:List集合,添加多条记录数据
- //批量添加@Overridepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchAddBook(List
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchArgs)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>sql="insert
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>into
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>values(?,?,?)";
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ints=jdbcTemplate.batchUpdate(sql,batchArgs);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(Arrays.toString(ints));}
复制代码 测试:- //批量添加_测试List
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchArgs=new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ArrayList();Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>o1={"3","java","a"};Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>o2={"4","c++","b"};Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>o3={"5","MySQL","e"};batchArgs.add(o1);batchArgs.add(o2);batchArgs.add(o3);//调用批量添加bookService.batchAdd(batchArgs);
复制代码 - JdbcTemplate实现批量修改操作
- //批量修改@Overridepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchUpdateBook(List
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchArgs)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>sql="update
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>set
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>username=?,ustatus=?
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>where
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userId=?";
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ints
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate.batchUpdate(sql,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchArgs);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(Arrays.toString(ints));}
复制代码 测试:- //批量修改_测试List
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchArgs=new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ArrayList();Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>obj1={"java111","a3","3"};Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>obj2={"c++1010","b4","4"};Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>obj3={"MySQL11","c5","5"};batchArgs.add(obj1);batchArgs.add(obj2);batchArgs.add(obj3);//调用方法bookService.batchUpdate(batchArgs);
复制代码 - JdbcTemplate实现批量删除操作
- //批量删除@Overridepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchDeleteBook(List
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchArgs)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>sql="delete
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>from
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_book
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>where
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userId=?";
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ints
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate.batchUpdate(sql,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchArgs);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println(Arrays.toString(ints));}
复制代码 测试:- //批量修改List
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>batchArgs=new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ArrayList();Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>obj1={"3"};Object[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>obj2={"4"};batchArgs.add(obj1);batchArgs.add(obj2);//调用方法实现批量删除bookService.batchDelete(batchArgs);
复制代码
事务管理
概念
- 什么是事务?
事务是数据库操作最基本的单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败
- lucy转账100元给mary
- lucy少100,mary多100
- 事务的四个特性(ACID)
搭建事务操作环境

- 创建数据库表,添加数据
- CREATE
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>TABLE
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_account(<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>id
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>VARCHAR(20),<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>username
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>VARCHAR(50),<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>money
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>VARCHAR(50))INSERT
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>INTO
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_account
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>VALUES('1','lucy',1000)INSERT
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>INTO
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>t_account
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>VALUES('2','mary',1000)
复制代码 - 创建service,搭建dao,完成对象创建和注入关系
service注入dao,在dao注入JdbcTemplate,在JdbcTemplate注入DataSource- @Servicepublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//注入dao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Autowired
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDao
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userDao;}
复制代码- @Repositorypublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDaoImpl
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>implements
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserDao{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Autowired
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>JdbcTemplate
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>jdbcTemplate;}
复制代码 - 在dao创建两个方法,多钱和少钱的方法,在service创建方法(转账的方法)
- 上面代码,如果正常执行没有问题的,但是如果代码执行过程中出现异常,有问题
- //转账的方法public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>accountMoney(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//lucy少100
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userDao.reduceMoney();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//模拟异常
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>i
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=10/0;
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//mary多100
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userDao.addMoney();}//结果lucy少了100,而mary并没有增加100
复制代码
Spring事务管理介绍
- 事务添加到JavaEE三层结构里面Service层(业务逻辑层)
- 在Spring进行事务管理操作有两种方式:编程式事务管理和声明式事务管理(使用)
- 声明式事务管理
- 在Spring进行声明式事务管理,底层使用AOP原理
- Spring事务管理API:PlatformTransactionManager
PlatformTransactionManager接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类
注解声明式事务管理
- 在Spring配置文件配置事务管理器
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码 - 在Spring配置文件,开启事务注解
- 在Spring配置文件引入名称空间tx
- [/code]
- [*][b]开启事务注解[/b]
- [code]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
复制代码
- 在service类上面(获取service类里面方法上面)添加事务注解
- @Transactional,这个注解添加到类上面,也可以添加到方法上面
- 如果把这个注解添加到类上面,这个类里面的所有的方法都添加事务
- 如果把这个注解添加到方法上面,为这个方法添加事务
- @Service@Transactionalpublic
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码
声明式事务管理参数配置
在service类上面添加注解@Transactional,在这个注解里面可以配置事务相关参数。

- propagation:事务传播行为
多事务方法直接进行调用,这个过程中事务是如何进行管理的
事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。
传播属性描述REQUIRED如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事物,并在自己的事务内运行REQUIRED_NEW当前的方法必须启动新事物,并在它自己的事务内运行,如果有事务正在运行,应该将它挂起SUPPORTS如果有事务在运行,当前的方法就在这个事务内运行,否则它可以不运行在事务中NOT_SUPPROTS当前的方法不应该运行在事务中,如果有运行的事务,将它挂起MANDATORY当前的方法必须运行在事物内部,如果没有正在运行的事务,就抛出异常NEVER当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常NESTED如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行。否则,就启动一个新的事务,并在它自己的事务内运行- @Service@Transactional(propagation
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Propagation.REQUIRED)public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码 - isolation:事务隔离级别
- 事务有特性称为隔离性,多事务操作之间不会产生影响。不考虑隔离性产生很多问题
- 有三个读的问题:脏读、不可重复读、虚读/幻读
- 脏读:一个未提交事务读取到另一个未提交事务的数据

- 不可重复读:一个未提交事务读取到另一提交事务修改的数据

- 虚读:一个未提交事务读取到另一个提交事务添加数据
- 解决:通过设置事务隔离性,解决读问题
脏读不可重复度幻读READ
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>UNCOMMITTED(读未提交)有有有READ
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>COMMITTED(读已提交)无有有REPEATABLE
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>READ(可重复读)无无有SERIALIZABLE(串行化)无无无
- @Service@Transactional(propagation
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Propagation.REQUIRED,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>isolation
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Isolation.REPEATABLE_READ)public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码 - timeout:超时时间
- 事务需要在一定时间内提交,如果不提交进行回滚
- 默认值是-1,设置时间以秒为单位进行计算
- @Service@Transactional(timeout
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>-1,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>propagation
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Propagation.REQUIRED,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>isolation
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Isolation.REPEATABLE_READ)public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码 - readOnly:是否只读
- 读:查询操作,写:添加修改删除操作
- readOnly默认值false,表示可以查询,可以添加修改删除操作
- 设置readOnly值成true之后,只能查询
- @Service@Transactional(readOnly
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>true,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>timeout
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>-1,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>propagation
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Propagation.REQUIRED,isolation
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Isolation.REPEATABLE_READ)public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{}
复制代码 - rollbackFor:回滚
设置出现哪些异常进行事务回滚
- noRollbackFor:不回滚
设置出现哪些异常不进行事务回滚
XML声明式事务管理(了解)
- 在Spring配置文件中进行配置
第一步,配置事务管理器
第二步,配置通知
第三步,配置切入点和切面
完全注解声明式事务管理
创建配置类,使用配置类代替xml配置文件
Spring5框架新功能
整个Spring5框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除。
Spring5.0框架自带了通用的日志封装
- Spring5已经移除Log4jConfigListener,官方建议使用Log4j2
- Spring5框架整合Log4j2
第一步,引入jar包
第二步,创建log4j2.xml配置文件Spring5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>框架核心容器支持@Nullable
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>注解
@Nullable注解可以使用在方法上面,属性上面,参数上面,表示方法返回可以为空,属性值可以为空,参数值可以为空
- 注解用在方法上面,方法返回值可以为空
- @NullableString
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>getId();
复制代码 - 注解使用在方法参数里面,方法参数可以为空
- public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>registerBean(@Nullable
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>beanName,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>beanClass,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Nullable
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Supplier
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>supplier,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>BeanDefinitionCustomizer...
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>customizers)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>this.reader.registerBean(beanClass,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>beanName,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>supplier,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>customizers);}
复制代码 - 注解使用在属性上面,属性可以为空
- @Nullableprivate
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>String
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>bookName;
复制代码
Spring5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>核心容器函数式风格GenericApplicationContext
Spring5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>支持整合JUnit5
- 整合JUnit4
第一步,引入Spring相关针对测试依赖
 
第二步,创建测试类,使用注解方式完成- @RunWith(SpringJUnit4ClassRunner.class)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//指定单元测试框架@ContextConfiguration("classpath:bean1.xml")
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//加载配置文件public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>JTest4
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Autowired
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService;
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Test
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>test1(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService.accountMoney();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码 - Spring5整合JUnit5
Junit5的用途:
- 单元测试:JUnit
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>可以用于编写和运行单元测试,而
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Spring
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>框架提供了对依赖注入、AOP、事务管理等特性的支持,可以帮助开发人员编写更加全面和真实的单元测试。
- 集成测试:在使用
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Spring
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>框架开发应用程序时,通常需要进行集成测试以确保不同组件之间的协作正常运行。JUnit
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>可以与
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Spring
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>的测试支持模块结合,提供对
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Spring
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>上下文加载、自动装配、事务管理等功能的支持,从而实现更加全面的集成测试。
- 测试驱动开发(TDD):通过使用
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>JUnit
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>和
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Spring
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>框架,开发人员可以实践测试驱动开发方法,即先编写测试用例,然后根据测试用例编写实际的业务逻辑代码。这有助于提高代码的质量和稳定性。
- 参数化测试:JUnit
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>提供了对参数化测试的支持,而
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Spring
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>框架中的一些组件和特性可能需要进行各种参数化测试以验证其行为。结合
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>JUnit
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>的参数化测试功能,可以更方便地进行这些测试。
第一步,引入JUnit5的jar包
第二步,创建测试类,使用注解完成- @ExtendWith(SpringExtension.class)@ContextConfiguration("classpath:bean1.xml")public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>JTest5
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Autowired
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService;
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Test
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>test1(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService.accountMoney();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码
- 使用一个复合注解替代上面两个注解完成整合
- @SpringJUnitConfig(locations
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>"classpath:bean1.xml")public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>JTest5
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Autowired
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService;
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Test
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>test1(){
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userService.accountMoney();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码
Spring5框架新功能——Webflux
SpringWebflux介绍
- SpringWebflux是Spring5添加新的模块,用于web开发的,功能和SpringMVC类似的,Webflux是使用了当前一种比较流行的响应式编程而出现的框架。

- 传统
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>web
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>框架,比如
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>SpringMVC,是基于
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Servlet
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>容器的。而Webflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>是一种异步非阻塞的框架,异步非阻塞的框架在
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Servlet3.1
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>以后才支持,核心是基于Reactor的相关
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>API
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>实现的。
- 异步非阻塞:
- 异步和同步针对调用者,调用者发送请求,如果等着对方回应之后才去做其他事情就是同步,如果发送请求之后不等着对方回应就去做其他事情就是异步。
- 阻塞和非阻塞针对被调用者,被调用者收到请求之后,做完了请求任务才给出反馈,收到请求之后马上给出犯规然后再去做事情就是非阻塞。
- Webflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>特点:
- 非阻塞式:在有限资源下,提高系统吞吐量和伸缩性,以
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Reactor
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>为基础实现响应式编程
- 函数式编程:Spring5
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>框架基于
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>java8,Webflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>使用
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Java8
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>函数式编程方式实现路由请求
- 与SpringMVC作比较

- 两个框架都可以使用注解方式,都运行在Tomet等容器中
- SpringMVC
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>采用命令式编程,Webflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>采用异步响应式编程
响应式编程(Java实现)
响应式编程的介绍
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。
Java8及其之前版本
提供的观察者模式两个类
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Observer
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>和
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Observable响应式编程(Reachor实现)
- 响应式编程操作中,Reachor是满足Reactive规范框架的
- Reachor有两个核心类:Mono和Flux,这两个类实现接口Publisher,提供丰富操作符。Flux对象实现发布者,返回N个元素;Mono实现发布者,返回0或者1个元素
- Flux和Mono都是数据流的发布者,使用Flux和Mono都可以发出三种数据信号:元素值、错误信号、完成信号,其中错误信号和完成信号都代表终止信号,终止信号用于告诉订阅者数据流结束了,错误信号终止数据流的同时会把错误信息传递给订阅者

- 代码演示Flux和Mono
第一步,引入依赖-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>io.projectreactor
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>reactor-core
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>3.1.5.RELEASE
复制代码 第二步,编程代码 - 三种信号特点
- 错误信号和完成信号都是终止信号,不能共存
- 如果没有发送任何元素值,而是直接发送错误或者完成信号,表示是空数据流
- 如果没有错误信号,没有完成信号,表示是无限数据流
- 调用just或者其他方法只是声明数据流,数据流并没有发出,只有进行订阅之后才会触发数据流,不订阅什么都不会发生的
- //just方法直接声明Flux.just(1,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>2,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>3,
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>4).subscribe(System.out::print);Mono.just(1).subscribe(System.out::print);
复制代码 - 操作符:对数据流进行一道道操作,称为操作符,比如工厂流水线
- map
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>元素映射为新元素
- flatmap
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>元素映射为流(把每个元素转换成流,把转换之后的多个流合并成大的流)
SpringWebflux执行流程和核心API
SpringWebflux基于Reactor,默认使用容器时Netty,Netty是高性能的NIO框架,异步非阻塞的框架
- Netty
- BIO

- NIO

- SpringWebflux执行过程和SpringMVC相似
- SpringWebflux核心控制器DispatchHandler,实现接口WebHandler
- 接口WebHandler有一个方法:
- public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>interface
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>WebHandler{<bean id="emp" autowire="byName">
- <bean id="emp" autowire="byType">
-
- </bean>
- <bean id="dept" ></bean>
- </bean>
- <bean id="dept" ></bean>Mono
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>handle(ServerWebExchange
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>var1);}
复制代码 - SpringWebflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>里面
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>DispatcherHandler,负责请求的处理
- HandlerMapping:请求查询到处理的方法
- HandlerAdapter:真正负责请求处理
- HandlerResultHandler:响应结果处理
- SpringWebflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>实现函数式编程,两个接口:RouterFunction(路由处理)和
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>HandlerFunction(处理函数)
SpringWebflux(基于注解编程模型)
SpringWebflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>实现方式有两种:注解编程模型和函数式编程模型
使用注解编程模型方式,和之前
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>SpringMVC
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>使用相似的,只需要把相关依赖配置到项目中,SpringBoot
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>自动配置相关运行容器,默认情况下使用
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Netty
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>服务器
第一步,创建
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>SpringBoot
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>工程,引入
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Webflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>依赖-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>org.springframework.boot
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>spring-boot-starter-webflux
复制代码 第二步,配置启动端口号
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>在application.properties中第三步,创建包和相关类
<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>实体类<bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>创建接口定义操作的方法- //用户操作接口public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>interface
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//根据id查询用户
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Mono
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>getUserById(int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//查询所有用户
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Flux
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>getAllUser();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//添加用户
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Mono
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>saveUserInfo(Mono
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>user);}
复制代码 <bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>接口实现类- public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>class
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserServiceImpl
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>implements
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserService
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//创建
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>map
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>集合存储数据
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>private
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>final
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Map
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>users
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>HashMap();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>UserServiceImpl()
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>this.users.put(1,new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>User("lucy","nan",20));
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>this.users.put(2,new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>User("mary","nv",30));
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>this.users.put(3,new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>User("jack","nv",50));
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//根据id查询
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Override
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Mono
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>getUserById(int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Mono.justOrEmpty(this.users.get(id));
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//查询多个用户
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Override
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Flux
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>getAllUser()
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Flux.fromIterable(this.users.values());
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//添加用户
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>@Override
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Mono
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>saveUserInfo(Mono
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userMono)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>return
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>userMono.doOnNext(person
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>->
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{<bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>//向map集合里面放值<bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>int
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>users.size()+1;<bean
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>id="book"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bname"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="易筋经"></property>
-
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean><property
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>name="bauthor"
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>value="达摩老祖"></property>
- </bean>users.put(id,person);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}).thenEmpty(Mono.empty());
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>}}
复制代码 <bean id="emp" autowire="byName">
<bean id="emp" autowire="byType">
</bean>
<bean id="dept" ></bean>
</bean>
<bean id="dept" ></bean>创建controllerSpringMVC
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>方式实现,同步阻塞的方式,基于
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>SpringMVC+Servlet+Tomcat
SpringWebflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>方式实现,异步非阻塞的方式,基于
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>SpringWebflux+Reactor+Netty
SpringWebflux(基于函数式编程模型)
- 在使用函数式编程模型操作时候,需要自己初始化服务器
- 基于函数式编程模型时候,有两个核心接口:RouterFunction(实现路由功能,请求转发给对应的
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>handler)和
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>HandlerFunction(处理请求生成响应的函数)。核心任务定义两个函数式接口的实现并且启动需要的服务器。
- SpringWebflux
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>请求和响应不再是
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>ServletRequest
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>和
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>ServletResponse
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>,而是ServerRequest
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>和
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>ServerResponse
第一步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>把注解编程模型工程复制一份
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>,保留
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>entity
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>和
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>service
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>内容
第二步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>创建
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Handler(具体实现方法)第三步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>初始化服务器,编写
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>Router
- 创建路由的方法
- 创建服务器完成适配
- //2
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>创建服务器完成适配public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>createReactorServer()
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//路由和
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>handler
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>适配
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>RouterFunction
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>route
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>routingFunction();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>HttpHandler
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>httpHandler
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>toHttpHandler(route);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ReactorHttpHandlerAdapter
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>adapter
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>ReactorHttpHandlerAdapter(httpHandler);
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>//创建服务器
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>HttpServer
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>httpServer
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>HttpServer.create();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>httpServer.handle(adapter).bindNow();}
复制代码 - 最终调用
- public
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>static
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>void
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>main(String[]
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>args)
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>throws
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Exception{
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Server
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>server
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>=
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>new
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>Server();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>server.createReactorServer();
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.out.println("enter
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>to
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>exit");
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>
- <bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
- </bean>System.in.read();}
复制代码 第四步
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>使用
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>WebClient
<bean id="book" p:bname="九阳神功" p:bauthor="无名氏">
</bean>调用
参考资料:https://www.bilibili.com/video/BV1Vf4y127N5?p=1&vd_source=cf21268954e139179e71f046bac01e56
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
|