• Java Spring


    IOC(控制反转)

    正控:自己使用,自己创建对象

    反控:将对象的管理,生成,销毁交给Spring来管理,在配置好文件后我们只管在哪里使用在哪里注入,不用去关心对象的创建过程。

    spring bean管理

     

    在不同的层上加上与之相应注解标签

     

     Spring JDBC

    spring-jdbc
           spring数据访问层功能,
           提供Jdbctemplate封装的方法操作数据库
           主要使用的是其中的事务管理功能


                org.springframework
                spring-jdbc
                5.2.2.RELEASE
           

    阿里数据源
           阿里巴巴开源的数据源管理组件  音译的 德鲁伊
           提供与数据库连接实现,还提供数据库连接池功能
           
           数据库连接池 因为频繁创建销毁数据库连接对象(Connection)
                        开销较大,提出池的概念
                        事先缓存一部分连接对象,使用时直接从池中获取
                        用完后不销毁,还回到池中,减少创建销毁的时间开销
                        10 20  
                        常见的连接组件  c3p0,dbcp, JNDI, 阿里数据源

      
                com.alibaba
                druid
                1.1.10
      

    不使用Bean进行数据库连接设置

    使用Bean进行管理,在哪里使用在哪里注入

    在哪里使用便将数据源注入

    使用spring JdbcTempllate往数据库中管理数据(例如写入一个数据)

     查询

     

    AOP

        在业务开发中,总有一些功能与业务代码耦合度不强
           (例如保存日志,提交事务,权限验证,异常处理......)   
        可以将其提取到一个工具类中,使用时调用即可.
         
         弊端:  代码已经开发完成,后期需要添加公共功能,就需要改动原来的代码.
        
         需求: 能不能在不修改原来代码的情况下,额外的添加其他公共功能.
                
                
         解决办法: AOP 面向切面编程    底层使用代理对象(动态代理模式)  前提配置
                   AOP不是spring框架特有的设计思想.
             

    springAOP 实现
    不使用注解,用bean管理,添加功能

     只能给spring Bean管理的对象来增强功能·

    1. <bean id="aopdemo" class="com.ff.spring.aop.AopDemo">bean>
    2. <aop:config>
    3. <aop:pointcut expression="execution(* com.ff.spring.service.UserService.adduser(..))" id="adduser"/>
    4. <aop:pointcut expression="execution(* com.ff.spring.service.UserService.*(..))" id="allmethod"/>
    5. <aop:aspect ref="aopdemo">
    6. <aop:before method="savelog" pointcut-ref="adduser"/>
    7. <aop:after method="savelog" pointcut-ref="adduser"/>
    8. <aop:around method="aroundAdvice" pointcut-ref="adduser"/>
    9. <aop:after-throwing method="exceptionAdvice" pointcut-ref="allmethod" throwing="e" /> aop:aspect>
    10. aop:config>

    环绕通知
    1. public void around(ProceedingJoinPoint joinPoint){
    2. System.out.println("之前开启事务");
    3. try {
    4. joinPoint.proceed();//调用切点的方法
    5. } catch (Throwable throwable) {
    6. System.out.println("系统忙"+throwable.getMessage());
    7. }
    8. System.out.println("之后提交事务");
    9. }

    先将xml中的aop移走在使用注解标签

    基于注解方式的实现Aop
    启动 AspectJ 支持:
    在xml配置文件中添加 

    用标签来配置增强类

    1. @Component //发现该类
    2. @Aspect //Aop配置标签
    3. public class CommonUtil {
    4. /*
    5. 目标 : 连接点,切入点所在的类,实际执行者
    6. 切面: 整个过程
    7. 代理: 为目标类创建的代理对象
    8. 通知 实际要增强的功能
    9. */
    10. @Before("execution(* com.ffyc.spring.dao.AdminDao.*(..))")
    11. public void saveLog(){
    12. System.out.println("保存日志");
    13. }
    14. @After("execution(* com.ffyc.spring.dao.AdminDao.*(..))")
    15. public void commit(){
    16. System.out.println("提交事务");
    17. }
    18. @AfterThrowing(value = "execution(* com.ffyc.spring.dao.AdminDao.*(..))",throwing = "e")
    19. public void exception(Throwable e){
    20. System.out.println("系统忙"+e.getMessage());
    21. }
    22. @Around("execution(* com.ffyc.spring.dao.AdminDao.*(..))")
    23. public void around(ProceedingJoinPoint joinPoint){
    24. System.out.println("之前开启事务");
    25. try {
    26. joinPoint.proceed();//调用切点的方法
    27. } catch (Throwable throwable) {
    28. System.out.println("系统忙"+throwable.getMessage());
    29. }
    30. System.out.println("之后提交事务");
    31. }
    32. }
    Spring 事物管理
    在数据库xml中配置

     

    1. //@Transactional可以作用在类和方法上,添加在类上,此类中所有的方法,都在事务中管理中进行,
    2. //添加在某个方法上,只对方法有效.
    3. /*
    4. @Transactional自动事务管理会在以下情况中失效
    5. 1.修饰一个非public方法,会导致事务失效
    6. 2.方法中出现异常,被try catch捕获了 认为方法没有出现异常,事务正常提交
    7. 3.默认情况下出现编译期异常,会导致事务失效, rollbackFor = Exception.class 任何异常都不提交事务
    8. 4.@Transactional 事务传播行为设置错误
    9. 5.数据库引擎不支持事务 mysql中只有InnoDB引擎支持事务
    10. 6.在同一个类中的一个非事务方法中,通过this调用事务方法,此时是通过非代理对象调用的,导致事务失效
    11. */

  • 相关阅读:
    HSCCTF 3th 2024 Web方向 题解wp
    rust的排序
    问题解决系列:从源码讲解为什么是 ‘JZ0SL_ Unsupported SQL type 1111‘
    Redis数据库的安装及简单使用(含安装包)
    Apollo Planning规划算法仿真调试(14):Apollo中添加离线LGSVL仿真环境的HdMap实现联合仿真
    js基础笔记学习279初步完成贪吃蛇运动2
    Oracle-PL/SQL编程
    部署vSAN相关的名词解释 几句话概括
    LeetCode 695. 岛屿的最大面积
    【BOOST C++ 5 】通信(02 可扩展性和多线程 )
  • 原文地址:https://blog.csdn.net/weixin_57197500/article/details/125809265