Spring速通

spring速通

Core Container:核心容器, IOC 容器。

IoC详解:控制反转详解

  • 对象的创建和控制权限由程序员移交给了spring

  • 具体是spring利用反射机制自动完成了对象的实例化

DI详解:依赖注入详解

  • 原本过程:对象1 = 对象2
  • 具体是spring利用反射机制自动完成上述过程
依赖导入
  • spring-context
注意【接下实现方式】

程序员在上述两个过程中的主要作用只有写xml文件(或者写注解、或者写配置类)

实现方式
  1. 写xml文件【编写配置信息】
  2. 实例化IoC容器;整合配置等【指定配置信息】测试类里面的代码,详情见之前博客搜Spring
  3. 在java中使用上述组件

注意

  1. xml中获取对象(IoC)的时候,对象必须要拥有无参构造函数
  2. 参数注入(DI)有多种方式:顺序注入、参数名注入、索引名注入、setter方法注入
  3. 后面如果有需要可以自定义配置组件的声明周期:init 、service 、 destroy;组件的作用域

注意【重要】

在真实项目场景中我们如果是在dao层使用了依赖的类,我们就需要在xml中为dao层类中对应的属性或者方法注入相对应的依赖。并在测试环境中创建IoC容器以便测试是否配置成功。

相关常用注解
  • 类的注解【IoC容器注解】
注解说明
@Component该注解用于描述 Spring 中的 Bean(Component层)
@Controller该注解通常作用在控制层(Controller层)
@Service该注解通常作用在业务层(Service 层)
@Repository该注解用于将数据访问层(Dao 层)
  • 属性、方法的注解【DI注解】

@Autowired:对应类型的bean自动装配(常用于成员变量、构造函数、set方法上)

@Autowired
private UserService userService;

// 相当于
private UserService = new UserServiceImpl();

注意:Autowired注解下的接口最好是单一实现,否则会出现无法抉择问题。

@Value("${配置文件.属性名:默认值}"):为类的属性装入 配置文件 中的信息eg: jdbc.property

注意:使用之前一定要先将配置文件装入IoC容器中

配置类 + 注解的开发模式
  • 配置类使用时常用注解【配置类注解】

以上的方式依然无法摆脱xml文件配置(主要指扫描包)故而有了配置类的方式来整合IoC容器

@Configuration:将一个类声明为一个配置类

@ComponentScan(value = "包名"):包扫描注解,获取用@Component或@Autowired标注的类或属性(合称组件)

@PropertySource:引入配置文件/扫描配置文件/将配置文件装入IoC容器。eg: jdbc.property

@Bean:配置类方法上使用,将其作为组件存入IoC容器

@Import:导入其他配置类,方便在IoC容器整合配置类的时候只整合一个配置类

Spring整合测试环境
  1. 依赖导入:junit5测试依赖
  2. 相关注解

@SpringJUnitConfig(value = {配置类.class}) :指定配置类,创建IoC容器

@Autowired:将自动导入的属性自动导出

AOP:面向切面编程

引入

代理模式详解:业务作业 -【请求】-> 代理 -【继承】-> 核心业务

分类:静态代理、动态代理

  • 区别:静态代理需要自己创建代理类,动态代理自动创建代理类
  • 实现
    • 静态代理通过实例化代理类构造方法的方式实现
    • 动态代理【了解】
      • JDK动态代理:实现最初接口
      • Cglib动态代理(Spring整合):重写接口的实现

AOP与OOP

  • OOP:面向对象编程,纵向的、容易冗余的编程思想
  • AOP:面向切面编程,横向的、解决冗余的编程思想

pkHA0kq.md.png

总的来说:就是把原来完整的一个类揉碎了放在板块中使用

依赖导入
  • spring-aop

  • spirng-aspects

使用步骤
  1. 编写业务逻辑【IoC】
  2. 加入IoC容器【IoC】
  3. 编写测试环境【IoC】
  4. 增强类【AOP】
  5. 增强类的配置/切点表达式【AOP】
  6. 开启AOP的配置/在xml文件中开启注解支持/在配置类上添加注解【AOP】
常见注解

@Aspect:声明为增强类的注解(此时也需要添加@Component注解以便扫描)

@Before(value = "execution(public int com.atguigu.proxy.CalculatorPureImpl.add(int,int))"):前置

@After(value = "execution(public int com.atguigu.proxy.CalculatorPureImpl.add(int,int))"):后置

@Around(value = "execution(public int com.atguigu.proxy.CalculatorPureImpl.add(int,int))"):环绕

@EnableAspectJAutoProxy:开启Aspectj【AOP配置】的注解

@Order(优先级的值):设置增强的优先级

TX:声明式事务管理

引入

编程式事务

Connection conn = ...;
  
try {
    // 开启事务:关闭事务的自动提交
    conn.setAutoCommit(false);
    // 核心操作
    // 业务代码
    // 提交事务
    conn.commit();
  
}catch(Exception e){
  
    // 回滚事务
    conn.rollBack();
  
}finally{
  
    // 释放数据库连接
    conn.close();
  
}

声明式事务

  • 声明式事务是指使用注解或 XML 配置的方式来控制事务的提交和回滚。

  • 开发者只需要添加配置即可, 具体事务的实现由第三方框架实现,避免我们直接进行事务操作!

  • 对AOP的再次封装:

    • 不需要写增强代码和xml配置文件即可实现事务的原子性
依赖导入

spring-tx : Spring中的声明式事务模块

使用步骤
  • 选择合适的事务管理器加入到IoC容器【为自定义的事务管理器类添加Bean注解】
  • 指定需要添加事务的方法
常用注解

@EnableTransactionManagement:开启类的事务支持的注解

@Transactional:为方法或者类添加事务

属性介绍:只读模式、超时时间、异常指定、隔离级别、传播行为

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值