spring框架的搭建和使用

一、Spring是什么?

Spring 是一个轻量级的,IOC 和 AOP 的一站式 Java 开发框架,是为了简化企业级应用开发而生的。

二、IOC
即 Inversion of Control,缩写为 IOC,是由 Spring 管理对象,而非传统实现中由程序代码直接操控
三、AOP
Aspect Oriented Programming 直译过来就是面向切面编程。AOP 是一种编 程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各 个层次的对象,而面向切面编程是将程序抽象成各个切面
四、Spring体系结构

官网地址: https://spring.io/
五、Spring搭建
  
     1.在pom.xml文件中配置spring核心基础jar

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

    2.在spring.xml中配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.ff.spring.model.User"> </bean>
</beans>

    3.编写一个实体类去测试spring


public class Admin {
    private String account;
    private String password;
}



测试类


public class Test1 {
    public static void main(String[] args) {

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        Admin admin = (Admin) applicationContext.getBean("admin");
        Admin admin1 = applicationContext.getBean("admin", Admin.class);
        System.out.println(admin);
        System.out.println(admin1);
    }
}

六、xml配置方式依赖注入

指 Spring 创建对象的过程中, 将对象依赖属性(简单值,集合,对象)通
过配置设置给该对象
实现 IOC 需要 DI 做支持
注入的方式:
set 方法注入
构造方法注入
七、注解方式实现
1.注解方式实现
    注解方式扫描
          在spring.xml中添加
          < context :component-scan base-package ="包名" >
2.创建注解对象
         
         注解创建对象
         @Component(value=“user”)等同于 <bean id=“user” class=“”></bean>
         @Service
         @Repository
         以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的层使用不
         同的注解标记
        @Scope(value=“prototype”) 原型
        @Scope(value=“ singleton ”) 单例

   

 3.注解方式注入

 @Autowired 是 Spring 提供的注解,可以写在字段和 setter 方法上。如果写在字段上,那么就不需要再写 setter 方法。默认情况下它要求依赖对象必须存在,如果允许 null 值,可以设置它required 属性为 false。

 @Autowired
 AdminDao adminDao;

byType 自动注入

该注解默认使用按类型自动装配 Bean 的方式。

byName 自动注入
如果我们想使用按照名称(byName)来装配,可以结合@Qualifier 注解一起
使用。
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的
value 属性用于指定要匹配的 Bean 的 id 值。
JDK 注解@Resource 自动注入
S pring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名
称匹配 Bean,也可以按类型匹配 Bean。默认按照 ByName 自动注入
byName 注入引用类型属性
@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配
的 Bean 的 id。
八、注解与XML的对比
注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。
注解缺点: 以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重
启服务器即可将新的配置加载。
xml 的缺点是: 编写麻烦,效率低,大型项目过于复杂。
九、Spring数据访问管理层
1.在pom.xml文件中配置spring jdbc 数据访问层jar包
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!-- 阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>

2.导入属性文件

<context:property-placeholder location="config.properties"/>

3.管理数据源对象 spring 管理数据库链接对象 本次采用阿里巴巴数据库连接管理对象

<bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/连接数据库的名称?serverTimezone=Asia/Shanghai"></property>
<property name="username" value="数据库账号"></property>
<property name="password" value="数据库密码"></property>
<property name="initialSize" value="10"></property><!--初始化连接数量-->
<property name="maxActive" value="20"></property><!--最大连接数量-->
</bean>

十、spring集成mybatis

Spring 集成 Mybatis 其核心是将 SqlSessionFactory 交由 Spring 管理,并由
Spring 管理对 dao 接口的代理实现
1.在pom.xml文件中导入mybatis jar包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>

2.在spring.xml中配置sqlSessionFactory

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mappers/*Mapper.xml">
</property>
</bean>

3.指定生成接口代理

<bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="包名"></property>  
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">
</property>
</bean>

十一、AOP

1.AOP概述

    AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过 预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
    AOP 是 OOP 的延续,是软件开发中的一个热点,是 java 开发中的一个重要内容。利用 AOP 可以对业务逻辑和非业务逻辑进行隔离,从而使得各部分之间的 耦合度降低,提高程序的可重用性,同时提高了开发的效率。
    面向切面编程的好处就是: 减少重复,专注业务;
    核心原理: 使用动态代理的方式在执行方法前后或者出现异常的时候做加入相关的逻辑.
    使用案例: 事务处理:开启事务,关闭事务,出现异常后回滚事务
                     权限判断:在执行方法前,判断是否具有权限
2.AOP基本概念
连接点(Joinpoint): 类中可以被增强的方法,这个方法就被称为连接点
切入点(pointcut): 类中有很多方法可以被增强,但实际中只有 add 和 update 被增了,那么 add 和 update 方法就被称为切入点(实际实现的连接点)
通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。通知分为方法执行前通知,方法执行后通知,环绕通知等.
目标(Target): 代理的目标对象(连接点,切入点所在类)
代理(Proxy): 向目标对象应用通知时创建的代理对象
3.springAOP实现
3.1在pom.xml文件中配置AOP jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>

3.2 AspectJ常用的通知五中类型

在spring.xml中配置<aop:aspectj-autoproxy />


      通知,向连接点添加功能

五种通知类型:
      @Before() 前置通知   在业务方法执行之前执行
      @After() 后置通知   在业务方法执行之后执行,即使业务代码出现了异常,也会执行
      @AfterReturning()   返回通知   在业务方法执行之后执行,当业务代码出现了异常,不会执行
      @AfterThrowing()  异常通知 当业务代码出现异常时执行
      @Around()   环绕通知 可以再业务方法执行之前,之后,出异常时添加功能
      ProceedingJoinPoint joinPoint   表示目标方法
     
    @Before("execution(* com.ffyc.springpro.dao.AdminDao.*(..))")
    @After("execution(* com.ffyc.springpro.dao.*.*(..))")
    @AfterReturning("execution(* com.ffyc.springpro.dao.*.*(..))")
    public  void printlog(){
        System.out.println("打印日志");
    }



@AfterThrowing(value = "execution(* com.ffyc.springpro.dao.*.*(..))",throwing = "throwable")
    public void exception(Throwable throwable){
        System.out.println("系统忙");
        throwable.printStackTrace();
    }



@Around(value = "execution(* com.ffyc.springpro.dao.*.*(..))")
    public void around(ProceedingJoinPoint joinPoint){
    System.out.println("前置通知");
    try {
        Object[] objects = joinPoint.getArgs();   //获取到我们目标方法的参数
        System.out.println(Arrays.toString(objects));
        Object object = joinPoint.proceed();   //调用目标业务方法
        System.out.println("返回通知");
    } catch (Throwable throwable) {
        throwable.printStackTrace();
        System.out.println("异常通知");
    }
    System.out.println("后置通知");
}

十二、Spring事务管理

数据库事务管理?
    数据库事务管理就是对一次数据库操作过程中执行的多条语句进行管理,保证一次对数据库操作过程中多条 sql 要么都执行成功,要么都不执行,从而确保数据一致性. 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步 操作的结合。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成功操作数据的并不可靠,需要在这种情况下进行回退。
    事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态,这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求
spring 事务管理?
    Spring 事务管理就是 spring 框架针对程序中提交事务这部分非业务代码进行分离管理,减轻程序员负担.在程序执行没有问题时,提交事务,出现问题时,回滚事务.
Spring 中的事务管理分为两种形式:
    一种是编程式事务,一种是声明式事务.
编程式事务 在项目中很少使用,这种方式需要在我们代码中需要提交事务或回滚事务时自己写代码实现.
声明式事务 管理建立在 AOP 基础上,本质是对方法前后进行拦截,所以声明式事务是方法级别的。
在spring.xml中配置事务管理器和注解方式
<!-- 配置 spring 事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>



<!-- 开启注解事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
在类或方法上使用@Transactional 标签即可
@Transactional可以添加在方法上,也可以添加在类上
         如果添加在类上,此类所有的方法都在spring事务管理中进行

         声明式事务失效的场景:
            1.@Transactional用在非public上
            2.方法中的异常被catch捕获了,认为方法没有异常,把事务进行提交
            3.方法中出现了编译器异常(提示抛出去),还是提交事务的 可以将rollbackFor = Exception.class,这样所有的异常都会回滚
            4.数据库引擎不支持事务 mysql中只有innodb引擎支持事务



@Transactional(rollbackFor = Exception.class)
public class AdminService{



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值