Java Spring

IOC(控制反转)

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

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

spring bean管理

 

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

 

 Spring JDBC

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

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>

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

   <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
   </dependency>

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

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

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

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

 查询

 

AOP

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

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

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

<!-- 使用bean管理增强的功能类 --> 
<bean id="aopdemo" class="com.ff.spring.aop.AopDemo"></bean>
 <aop:config> 

<!-- 配置切入点 即指定是类中的部分方法还是全部方法--> 
<aop:pointcut expression="execution(* com.ff.spring.service.UserService.adduser(..))" id="adduser"/> 

<aop:pointcut expression="execution(* com.ff.spring.service.UserService.*(..))" id="allmethod"/>

 <!-- 配置通知和切入点 给切入点的方法调用时添加合适的功能增强类的方法--> 
<aop:aspect ref="aopdemo"> 
<aop:before method="savelog" pointcut-ref="adduser"/> 
<aop:after method="savelog" pointcut-ref="adduser"/> 
<aop:around method="aroundAdvice" pointcut-ref="adduser"/>
<aop:after-throwing method="exceptionAdvice" pointcut-ref="allmethod" throwing="e" /> </aop:aspect>
 </aop:config>

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

    }

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

基于注解方式的实现Aop
启动 AspectJ 支持:<aop:aspectj-autoproxy />
在xml配置文件中添加 

用标签来配置增强类


@Component    //发现该类
@Aspect       //Aop配置标签
public class CommonUtil {

    /*
      目标 : 连接点,切入点所在的类,实际执行者
      切面: 整个过程
      代理: 为目标类创建的代理对象

       通知 实际要增强的功能
     */
    @Before("execution(* com.ffyc.spring.dao.AdminDao.*(..))")
    public  void  saveLog(){
        System.out.println("保存日志");
    }

    @After("execution(* com.ffyc.spring.dao.AdminDao.*(..))")
    public  void  commit(){
        System.out.println("提交事务");
    }

    @AfterThrowing(value = "execution(* com.ffyc.spring.dao.AdminDao.*(..))",throwing = "e")
    public  void  exception(Throwable e){
        System.out.println("系统忙"+e.getMessage());
    }

    @Around("execution(* com.ffyc.spring.dao.AdminDao.*(..))")
    public void around(ProceedingJoinPoint joinPoint){
        System.out.println("之前开启事务");
        try {
            joinPoint.proceed();//调用切点的方法
        } catch (Throwable throwable) {
            System.out.println("系统忙"+throwable.getMessage());
        }
        System.out.println("之后提交事务");

    }
}
Spring 事物管理
在数据库xml中配置

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值