Spring速通
spring速通
Core Container:核心容器, IOC 容器。
IoC详解:控制反转详解
-
对象的创建和控制权限由程序员移交给了spring
-
具体是spring利用反射机制自动完成了对象的实例化
DI详解:依赖注入详解
- 原本过程:对象1 = 对象2
- 具体是spring利用反射机制自动完成上述过程
依赖导入
- spring-context
注意【接下实现方式】
程序员在上述两个过程中的主要作用只有写xml文件(或者写注解、或者写配置类)
实现方式
- 写xml文件【编写配置信息】
- 实例化IoC容器;整合配置等【指定配置信息】测试类里面的代码,详情见之前博客搜Spring
- 在java中使用上述组件
注意
- xml中获取对象(IoC)的时候,对象必须要拥有无参构造函数
- 参数注入(DI)有多种方式:顺序注入、参数名注入、索引名注入、setter方法注入
- 后面如果有需要可以自定义配置组件的声明周期: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整合测试环境
- 依赖导入:junit5测试依赖
- 相关注解
@SpringJUnitConfig(value = {配置类.class})
:指定配置类,创建IoC容器
@Autowired
:将自动导入的属性自动导出
AOP:面向切面编程
引入
代理模式详解:业务作业 -【请求】-> 代理 -【继承】-> 核心业务
分类:静态代理、动态代理
- 区别:静态代理需要自己创建代理类,动态代理自动创建代理类
- 实现
- 静态代理通过实例化代理类构造方法的方式实现
- 动态代理【了解】
- JDK动态代理:实现最初接口
- Cglib动态代理(Spring整合):重写接口的实现
AOP与OOP
- OOP:面向对象编程,纵向的、容易冗余的编程思想
- AOP:面向切面编程,横向的、解决冗余的编程思想
总的来说:就是把原来完整的一个类揉碎了放在板块中使用
依赖导入
-
spring-aop
-
spirng-aspects
使用步骤
- 编写业务逻辑【IoC】
- 加入IoC容器【IoC】
- 编写测试环境【IoC】
- 增强类【AOP】
- 增强类的配置/切点表达式【AOP】
- 开启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
:为方法或者类添加事务
属性介绍:只读模式、超时时间、异常指定、隔离级别、传播行为
原文地址:https://blog.csdn.net/qq_62678419/article/details/140645485
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!