Spring5 Framework(IOC+AOP+整合Mybatis事务)

Spring Framework官网文档:

   https://spring.io/projects/spring-framework

下载地址:https://repo.spring.io/release/org/springframework/spring/


优点:

  


 IOC/AOP的学习重在学习注解开发,xml配置的方法 简单看下即可。


 IoC控制反转(实现方法是依赖注入


 Inversion of Control

IOC容器:用于解耦,方便代码的修改,而不会由于改一个地方导致很多相关的地方都要改。

参考博客,便于理解IOC思想:https://segmentfault.com/a/1190000019280079


例子:

serviceImpl:

   使用IOC前:

   使用IOC之后:

依靠set动态注入的对象,来进行userDao的初始化;

有IOC后,不用再new对象,交给Spring来创建对象;

Test.java里:

 增加多个impl之后,后面调取处选择即可


 Hello Spring

 class(entity):

 

 beans.xml(类在里面注册):

 

 main函数测试:


Spring配置(beans.xml)

  • beans (上方)
  • alias  别名,类似数据库的as
  • import (多人开发时产生多个beans.xml,运行时用总的就可以了)

依赖注入 DI

  构造器注入(见上方代码)  c命名空间注入

  Set方式注入(重点)    p命名空间注入

     bean对象的创建+属性的注入==》依赖容器

bean.xml手动装配:(老方法)

 

 


@Scope作用域(bean)

  singleton单例【Spring默认】(对象全局唯一,所有创建的bean共享)

  prototype原型(每一个bean都会产生自己的对象)(多线程可用

  对象的hashcode不一样

  request 在请求中创建&生效;session在会话中活着;application在全局中活着;


 Bean 隐式装配

  Spring会在上下文中自动寻找,并自动给bean装配属性

  


Spring注解开发 

 做法:

1.预先配置(xml中配置是旧方法,新方法完全用config.java+@Configuration(含@Conponent)+@Bean来):

  1)在beans.xml里面导入约束:(springframework)

   

   2)beans.xml配置注解的支持:

  

   指定要扫描的包:

   

  3)要使用注解开发,必须保证aop的maven包导入了:

   ?

2.然后直接在domain属性上使用、或者在set方法上使用:

  1)@Autowired自动装配Bean

@Autowired
private Dog dog;

  

   2)@Component 说明Spring自动扫描整个包的bean

   @Value 用于注入属性的值

   

  3)@Conponent的几个功能一样的注解:

  

  上面三个是和component都是一样的(IOC),表示某个 注册到Spring容器中装备Bean。

  表明有IOC:

  

JavaConfig

xml中配置是旧方法,新方法完全用config.java+@Configuration(含@Conponent)+@Bean来:

实体类包括其中的注解不变,

config.xml替换为config.java:


 AOP


代理模式:

  • 静态代理
  • 动态代理(重点)

动态代理

动态代理(基于反射),代理的类是动态生成的,不是直接写好的

分为:基于接口 /基于类 的动态代理

需要了解2个类:

  Proxy:是一个静态方法,用于创建动态代理类和实例

  InvocationHandler 调用处理程序

 准备面试的时候,再把“动态代理”仔细看下


AOP名词概念

https://blog.csdn.net/sggtgfs/article/details/85338011

横切关注点

  跨越多个模块的方法或功能,与我们的业务逻辑无关。

  如:日志、安全、缓存、事务。。。

切面 Aspect:是一个

Advice 通知 切面中要完成的 方法

切入点 PointCut切面方法执行的地点

代理 proxy:目标对象被通知后创建的对象

 使用Spring AOP需要 织入包 aspectjweaver


 配置方式 实现AOP:

 在?applicationContext.xml里:

说明:这里的aspect ref后面跟的是,横切关注点(例如log/secure/cache/transaction)

<aop:config>
   可以多个切面:
<aop:aspect ref=...> 此处写多个切入点: <aop:pointcut id="point3" expression="execution(* com.kuang.service.Impl.*(..))" 此处写多个Action(方法对应到切入点): <aop:before method="before" pointcut-ref="point3"> <aop:after method="after" pointcut-ref="point3"> <aop:b...> </aop:aspect ref=...>

Aspect切面里分层:

  一层是切入点PointCut(执行点)

  一层是Advice(执行方法)

 

 


 注解实现AOP

注解实现的劣势是:没有像xml注册那样使用 "切入点+Advice"两层结构,导致切入点不能复用,可能会多次书写同样的切入点,导致不易管理;

但是注解真的很方便:在写Advice方法的时候就直接写上对应的切入点了。


Spring整合Mybatis事务


终极简化版:

SqlSessionDaoSupport

 

 调用getSqlSession()得到SqlSessionTemplate


Spring声明式事务(交给容器管理事务,不会改变原有代码)

(事务的作用是保持数据ACID特性;要么都成功,要么都失败;) 


关键是xml配置(之前已经写好了CRUD)

1.transactionManager

  

2.Advice(执行方法):

   

     propagation = REQUIRED:如果当前没有事务,就新建一个事务;如果有事务就用当前事务;

3.PointCut(切入点):

    


原文地址:https://www.cnblogs.com/qyf2199/p/14210802.html