Spring系统框架

Spring

Spring系统架构

在这里插入图片描述

1.核心层

Core container核心容器,是Spring最核心的模块
2.AOP层
AOP面向切面的编程思想,Aspects是对AOP思想的具体实现
3.数据层
数据访问:spring中对数据访问的具体实现技术
数据集成:spring支持整合其他的数据层解决方案
transactions:spring中事务管理是AOP的一个具体实现
4.web层:SpringMVC框架
5.Test层,Spring主要整合了Junit进行单元测试

Spring核心概念

IOC、IOC容器,Bean、DI

  • IOC容器负责对象的创建和初始化,被创建和管理的对像称为Bean
  • 依赖注入:建立Bean与bean之间依赖关系的整个过程

AOP思想

AOP

@EnableAspectJAutoProxy

  • 配置类上方,开启注解格式的AOP功能

@Aspect

  • 切面类定义上方,设置当前类为OAP切面类

@Pointcut

  • 设置切入点方法,value()切入点表达式,切入点依托一个不具有实际意义的方法进行
  • 切入点表达式:execution(public User com.project.service.UserService.findById(int))
  • execution(* com.project.*.Service.find(…))
    方法参数里面为"…"匹配任意参数的方法

五种通知类型

  • @Before
    • 通知方法再原始切入点方法前运行
  • @After
    • 通知方法再原始切入点方法后运行
  • @Around
    • 通知方法再原始切入点方法前后运行
    • 方法参数里加入ProceedingJoinPoint pjp,调用pjp.proceed()执行原始操作
  • @AfterRuturning
    • 原始点正常执行完毕后执行
  • @AfterThrowing
    • 抛出异常后执行

AOP事务管理

  • 在数据层或业务层保障一系列数据库操作的同成功同失败
  • 平台事务管理器PlantformTransactionManager
    • commit
    • rollback
  • @EnableTransectionManagement
    • 配置类上方开启注解式事务支持
  • @Transactional
    • 业务层接口 业务类实现类 业务方法上方
    • 为当前业务方法添加事务
    • 事务配置
      • readOnly
        • 设置是否只读事务
      • timeout
        • 设置事务超时时间,-1永不超时
      • rollbackFor
        • 出现指定异常事务回滚(class)
      • rollbackForClassName
        • 出现指定异常事务回滚(String)
      • noRollbackFor
        • 不回滚异常
      • noRollbackForClassName
        • 不回滚异常
      • isolation
        • 设置事务隔离级别:默认隔离级别
        • READ_UNCOMMITTED:读未提交
        • READ_COMMITTED:读已提交
        • REPEATABLE_READ:重复读取
        • SERIALIZABLE: 串行化
      • propagation
        • 设置事务传播行为
        • 设置事务管理员对所携带事务的处理态度

注解开发

注解开发定义Bean

  • Bean注解
    • @Component
    • @Controller
      • 控制层、表现层
    • @Service
      • 用于业务逻辑层
    • @Repository
      • 用于持久层、dao层
    • @Bean
      • 设置方法的返回值作为spring管理的Bean
  • Bean作用范围
    • @Scope
  • Bean生命周期
    • @PostConstruct
      • 设置方法为初始化方法
    • @PreDestroy
      • 设置方法为销毁方法

注解开发依赖注入

  • 引用类型注入
    • @Autowired
      • 写在属性上,按照类型自动进行注入
    • @Qulifier
      • 按名称进行注入,必须跟@Autowried一起使用
  • 简单类型注入
    • @value
      • 注意数据格式要匹配
      • 使用@value(“${value}”)获取配置文件value的值

纯注解开发模式

  • 使用配置类SpringConfig.class代替配置文件SpringConfig.xml
  • 配置类的注解
    • @ComponentScan
      • 记载使用注解定义的Bean
    • @Configuration
      • 设置该类为spring配置类
    • @PropertySource({“xxx.properties”,“xxx.properties”})
      • 加载properties文件
    • @Import
      • 引入需要加载的配置类,有多个配置类使用数组格式一次导入

引入外部配置类

  • 第三方bean写在springconfig配置类中不利于分类管理,因此需要按照类别将这些bean配置到不同的配置类中
  • @Import
    • 引入需要加载的配置类

spring整合

  • spring整合Mybatis
    • mybatis配置文件
      • * 初始化属性数据 * 使用@propertySource,交给spring管理
      • * 初始化类型别名 * 为SqlSessionFactory服务的交给spring管理
      • * 初始化DataSource
      • * 初始化映射配置 * 获取到sqlsession以后执行具体操作时候用的,需要spring单独管理
  • spring整合Junit
    • @Runwith(SpringJunit4ClassRunner.class)
      • 测试类定义上方,设置Junit运行器
    • @ContextConfiguration
      • 配置文件
        • @ContextConfiguration(classes = 配置类.class)
      • 配置类
        • @ContextConfiguration(locations={配置文件名,…})

配置开发

添加SpringConfig文件

Bean相关内容

  • 在配置文件中完成Bean的配置
    • id:属性表示给bean起名字
      id必须唯一
    • class:表示给bean定义类型
      不能写接口类型,因为接口无法创建对象
    • name:定义bean的别名可定义多个,使用逗号、分号、空格分隔
    • scope:作用范围
      singleton:单例(默认)
      prototype:非单例
      • 单例可避免对象的频繁创建与销毁,达到对bean对象的复用,如果bean对象是有状态对象,成员变量可以存储东西,存在线程安全问题
  • bean实例化
    • 构造方法实例化(常用)
      • 底层采用反射,使用类的无参数构造方法
    • 静态工厂实例化
      • bean里面运行类的class改为工厂类类名,”factory-mehod“工厂类中创建对象的方法名
      • 工厂类中静态方法创建运行类
    • 实例工厂与FactoryBean
      • 实例工厂
        • 工厂类中普通方法创建运行类
        • 工厂类bean和运行类bean,运行类bean中添加factory-method和factory-bean
      • FactoryBean
        • 工厂类实现FactoryBean接口,重写getObject()、getObjectType()、isSingleton()方法
          isSingleton()设置是否单例
    • bean生命周期
      • 初始化容器
        • 创建对象
        • 执行构造方法
        • 执行属性注入
        • 执行Bean初始化方法
          • 方法①:Bean中添加ini-method属性指定初始化方法
          • 方法②:实现接口InitializingBean中的afterPropertiesSet方法
      • 使用Bean
      • 关闭销毁容器
        • ClassPathXmlApplicationContext的close()、registerShutdownHook()方法用来关闭容器,close()在调用时关闭,另一个JVM退出前关闭
        • Bean销毁时执行的方法
          • 方法①:Bean中添加destory-method属性指定销毁方法
          • 方法②:实现DisposableBean接口中的destory方法

DI依赖注入

  • setter注入
    • 方法
      • 在需要注入的Bean中添加若干property标签,name表示配置的属性名称,ref表示参照哪个bean
    • 注入引用数据类型:
    • 注入简单数据类型:
  • 构造器注入
    • 在需要注入的类中添加带属性的构造方法,在Bean中添加若干constructor-arg标签,name表示配置的属性名称,ref表示参照哪个bean
    • 注入多个引用类型,构造方法中有几个属性写几个constructor-arg标签
    • 注入简单数据类型,ref改成value
  • 自动配置
    • 删除property标签,在bean标签中添加autowire属性,只能对引用类型进行注入,不能对简单类型注入
    • byType(推荐)
      • 保证容器中相同类型的bean唯一
    • byName(不推荐)
      • 保证容器中有指定名称的bean,耦合度较高
  • 集合注入
 * 数组
<property name="array">
<array>
   <value>100</value>
</array>
</property>
*  list
 <property name="list">
 <list>
    <value>100</value>
</list>
</property>
* map
<property name="map">
<map>
<entry key="country" value="china"/>
</map>
</property>
* properties
<property name="properties">
<props>
<prop key="country">china</prop>
</props>
</property>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值