zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【原创】Spring框架

Spring框架 原创
2023-06-13 09:15:29 时间

Spring基础

1.Spring概述:

Spring核心是控制反转(IOC)和面向切面编程(AOP)。主要作用是实现代码的解耦,如Spring的IOC完成对对象的创建和管理,完成了对对象的创建和调用的解耦。 Spring本质上是一个容器,是内存中的一块空间。容器中存储Bean对象。

2.Spring的Ioc

(1)SpringIoc概念: SpringIoc是一个理论,一个指导思想。分为控制和反转两部分。 控制:对象的创建,属性的赋值,对象生命周期管理等。 反转:将管理对象的权限转移给代码之外的容器实现。 (2)Ioc的技术实现DI(依赖注入): Spring框架,使用DI完成对象的创建和属性的注入。 Spirng底层通过使用反射机制,通过反射完成对象的创建和属性的赋值(Xml文件中的Bean标签中的Class属性指定了反射需要创建对象的完全限定名。) Spring容器实际将对象保存在ConcurrentHashMap(并发编程的Map集合)中。Map的Key为bean标签的id,Value为bean标签的对象,加载Spring容器,Spring容器就会自动为Bean标签创建对象。 (3)Spring中的自动注入 Spring可以根据某些规则(byName,byType)给类中的属性完成赋值,只对引用类型有效。 byName(按名称注入):java类中引用类型属性名称和Spring容器中的Bean对象的id一致。且数据类型也是一致的,使用bean标签中autowire属性完成注入。 byType(根据类型注入):java类中引用类型的数据类型和Spring容器中bean的class值是同源关系(需要赋值的属性类型和bean中的class的关系必须为父子关系或者接口和实现类的关系),使用bean标签中autowire属性完成注入。 (4)Spring中的常用注解: @Component注解:使用在类上,创建对象并将对象放入Spring容器中。 @Repository注解:使用在dao层实现类,表示dao对象,可以访问数据库 @Service注解:放在业务层实现类上,表示业务层对象,业务层有事务的功能。 @Controller注解:放在控制器类上,表示创建控制器对象,控制器对象可以接受和处理请求。 @Value注解:使用在属性上或者在set方法上,用于给简单数据类型的属性赋值。 @Autowire注解:通过byType或byName的方式完成对引用数据类型的属性的自动注入,默认是byType自动注入。可以添加到属性上,也可以添加到set方法上。 @Resource注解:JDK提供的给属性赋值,默认是按照byName的方式进行对引用数据类型的属性赋值,可以加在属性上也可以加在set方法上。 (5)Context的常用标签 开启组件扫描,开启了该功能才能让注解生效。 用于将外部的属性文件(Properties)文件保存到Spring中,在注解上通过${key}获取properties文件中的内容。

3.Spring的Aop(面向切面编程)

(1)Aop概念: Aop(Aspect Orient Programming):面向切面编程。 Aspect:切面,给业务方法增加功能,一般是为非业务方法,切面功能一般可以复用。例如:日志记录,事务控制,权限检查,统计信息等。 (2)Aop作用: Aop是一个动态思想,在程序运行期间,创建代理对象,使用代理对象执行方法时,增加切面的功能,代理对象是存在在内存中的。 可以使切面功能复用,实现业务功能和非业务功能进行解耦合。 (3)Aop中的术语: Aspect:切面,给业务方法增加功能。 JoinPoint:连接点,连接切面的业务方法。 Pointcut:切入点,是一个或多个连接点的集合。表示这些方法执行时,都能增加切面的功能。表示切面的执行位置。 target:目标对象,指定增强功能的对象。 Advice:通知,指定切面的执行时间。 Aop中的三要素:Aspect,Pointcyt,Advice

4.Spring实现事务控制

(1)事务的概念: 事务是多条Sql语句的集合,作为一个整体执行,要么都成功,要么都失败。 (2)JDBC和Mybatis完成事务管理: ①JDBC完成事务管理:

   public void updateUser(){
       Connection conn = new Connection();
       conn.setAutoCommit(false);
       insert();
       conn.commit();
    }

②Maybatis完成事务管理:

   public void updateUser(){
        SqlSession session = SqlSession.openSession(false);
        try{
            session.insert();
            session.update();
            session.commit();
        }catch(Exception e){
            session.rollback();
        }
    }

(3)通过Spring完成对事务的管理: 事务管理器接口:PlatformTransactionManager,用于针对不同事务管理技术的公共接口,所有事务管理技术(如JDBC或Mybatis)都是通过实现该接口实现事务的管理。JDBC和Mybatis访问数据库的事务管理器实现类为:DataSorceTranactionManager。

  **Spring框架本质是使用Aop的环绕通知完成事务管理。**

5.Spring使用注解@Transaction控制事务

(1)@Transactional注解,使用注解的属性完成事务的控制(隔离级别,传播行为,超时) (2)@Transactional注解的属性(使用在业务方法的上面)

  ①propagation:事务的传播行为,Propagation类提供了枚举值,完成事务传播行为的设置。
  ②isolation:事务的隔离级别,Isolation类提供了枚举值,完成事务隔离级别的设置。
  ③redaOnly:boolean类型,表示数据库操作是否为只读操作。默认为false。
  ④timeout:事务超时,默认是-1,整数值,单位是秒。
  ⑤rollbackFor:表示回滚异常类列表,是个数组,每个值都是异常类型的Class。
  ⑥rollbackForClassName:表示回滚的异常类列表,是String类ing的值。
  ⑤noRollbackFor:表示不需要回滚异常类列表,是个数组,每个值都是异常类型的Class。
  ⑥noRollbackForClassName:表示不需要回滚的异常类列表,是String类型的值。

(2)使用@Transactional注解时配置文件的配置:

  ①声明事务管理器。
  ②开启注解驱动。

6.Spring使用Aspectj框架控制事务

使用aspectj的Aop完成声明式事务控制。 操作步骤: (1).实例化事务管理器对象 (2).配置事务切面 (3).进行aop织入