加载配置文件时不会创建对象,在获取对象(使用)才去创建对象
加载配置文件时会把在配置文件对象进行创建
比如:部门和员工,一个部门有多个员工,一个员工属于一个部门。
第一步
<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 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实例
Proxy类是属于java.lang包中的
通知有多种类型:
- 前置通知
- 后置通知
- 返回增强
- 环绕通知
- 异常通知
- 最终通知
举例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*.*(..))
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语句值
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
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语句值
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语句值
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集合,添加多条记录数据
- 典型场景:银行转账
- lucy转账100元给mary
- lucy少100,mary多100
Junit5的用途:第一步,引入JUnit5的jar包
- 单元测试: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>的参数化测试功能,可以更方便地进行这些测试。
SpringMVC
<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
参考资料:https://www.bilibili.com/video/BV1Vf4y127N5?p=1&vd_source=cf21268954e139179e71f046bac01e56
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |