当前位置: 首页 > news >正文

spring容器ioc和di

spring ioc 容器的创建

BeanFactory 接口提供了一种高级配置机制,能够管理任何类型的对象,它是SpringIoC容器标准化超接口!
ApplicationContextBeanFactory 的子接口。它扩展了以下功能:

  • 更容易与 Spring 的 AOP 功能集成
  • 消息资源处理(用于国际化)
  • 特定于应用程序给予此接口实现,例如Web 应用程序的 WebApplicationContext

ApplicationContext容器实现类:

ClassPathXmlApplicationContext通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象
FileSystemXmlApplicationContext通过文件系统路径读取 XML 格式的配置文件创建 IOC 容器对象
AnnotationConfigApplicationContext通过读取Java配置类创建 IOC 容器对象
WebApplicationContext专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对象,并将对象引入存入 ServletContext 域中。

spring框架的配置方式:xml配置,注解,java配置类三种方式。

其中xml配置 无参构造函数,有参构造函数,静态工厂,非静态工厂4种配置方式。

其中有参构造函数
尚硅谷spring笔记
中周期方法(创造和销毁)以及作用域(单例和多例)

周期方法
<beans><bean id="beanOne" class="examples.BeanOne" init-method="init" /><bean id="beanTwo" class="examples.BeanTwo" destroy-method="cleanup" />
</beans><!--bean的作用域 准备两个引用关系的组件类即可!!
-->
<!-- scope属性:取值singleton(默认值),bean在IOC容器中只有一个实例,IOC容器初始化时创建对象 -->
<!-- scope属性:取值prototype,bean在IOC容器中可以有多个实例,getBean()时创建对象 -->
<bean id="happyMachine8" scope="prototype" class="com.atguigu.ioc.HappyMachine"><property name="machineName" value="happyMachine"/>
</bean><bean id="happyComponent8" scope="singleton" class="com.atguigu.ioc.HappyComponent"><property name="componentName" value="happyComponent"/>
</bean>

基于配置类的方式管理bean

注解说明
@Component该注解用于描述 Spring 中的 Bean,它是一个泛化的概念,仅仅表示容器中的一个组件(Bean),并且可以作用在应用的任何层次,例如 Service 层、Dao 层等。 使用时只需将该注解标注在相应类上即可。
@Repository该注解用于将数据访问层(Dao 层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
@Service该注解通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
@Controller该注解通常作用在控制层(如SpringMVC 的 Controller),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。

配置文件来确定扫描范围

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置自动扫描的包 --><!-- 1.包要精准,提高性能!2.会扫描指定的包和子包内容3.多个包可以使用,分割 例如: com.atguigu.controller,com.atguigu.service等--><context:component-scan base-package="com.atguigu.components"/></beans>

组件BeanName问题

默认情况:

类名首字母小写就是 bean 的 id。例如:SoldierController 类对应的 bean 的 id 就是 soldierController。
使用value属性指定:

@Controller(value = "tianDog")
public class SoldierController {
}

当注解中只设置一个属性时,value属性的属性名可以省略
作用域的配置。自动装配@Autowired,不需要有set方法!
给属性复制

<!-- 引入外部配置文件-->
<context:property-placeholder location="application.properties" />
package com.atguigu.components;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** projectName: com.atguigu.components** description: 普通的组件*/
@Component
public class CommonComponent {/*** 情况1: ${key} 取外部配置key对应的值!* 情况2: ${key:defaultValue} 没有key,可以给与默认值*/@Value("${catalog:hahaha}")private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}

配置类

配置类实现上述场景,多个配置类使用import导入,加载时只需要加载一次就行。

AOP切面编程

动态代理技术分类

  • JDK动态代理:JDK原生的实现方式,需要被代理的目标类必须实现接口!他会根据目标类的接口动态生成一个代理对象!代理对象和目标对象有相同的接口!(拜把子)
  • cglib:通过继承被代理的目标类实现代理,所以不需要目标类实现接口!(认干爹)
@Configuration
@ComponentScan(basePackages = "com.atguigu")@EnableAspectJAutoProxy//作用等于在xml中配置 <aop:aspectj-autoproxy /> 配置类上开启 Aspectj注解支持!
public class MyConfig {
}

spring事务处理

在这里插入图片描述
需要做两件事:
1.选择合适的一个事务管理器实现类加入到IOC容器中
2.指定业务类的那些方法需要添加事务。

事务属性的设置

只读,超时间,事务异常(那些异常回滚,那些异常不回滚),事务隔离级别,事务传播行为。

http://www.lryc.cn/news/190006.html

相关文章:

  • Maven 仓库地址
  • 【2023研电赛】安谋科技企业命题特别奖:面向独居老人的智能居家监护系统
  • [Machine learning][Part4] 多维矩阵下的梯度下降线性预测模型的实现
  • LCR 078. 合并 K 个升序链表
  • JVM面试题:(三)GC和垃圾回收算法
  • hive建表指定列分隔符为多字符分隔符实战(默认只支持单字符)
  • android.app.RemoteServiceException: can‘t deliver broadcast
  • 信创办公–基于WPS的EXCEL最佳实践系列 (单元格与行列)
  • VsCode同时编译多个C文件
  • Android绑定式服务
  • 系统韧性研究(1)| 何谓「系统韧性」?
  • 使用Perl脚本编写爬虫程序的一些技术问题解答
  • SAP内部转移价格(利润中心转移价格)的条件
  • WRF如何批量输出文件添加或删除文件名后缀
  • Ubuntu右上角不显示网络的图标解决办法
  • AM@数列极限
  • Vue-2.3v-model原理
  • ​左手 Serverless,右手 AI,7 年躬身的古籍修复之路
  • 计算mask的体素数量
  • VR全景营销颠覆传统营销,让消费者身临其境
  • FreeRTOS学习笔记——四、任务的定义与任务切换的实现
  • js 之让人迷惑的闭包 03
  • 10月10日上课内容 Docker--harbor私有仓库部署与管理
  • Java 序列化和反序列化为什么要实现 Serializable 接口
  • vite+vue3+ts中使用require.context | 报错require is not defined | 获取文件夹中的文件名
  • C#(Csharp)我的基础教程(四)(我的菜鸟教程笔记)-Windows项目结构分析、UI设计和综合事件应用的探究与学习
  • Flink: Only supported for operators
  • NSIDC定义的海冰相关概念
  • 【码银送书第八期】《Python数据挖掘:入门进阶与实用案例分析》
  • 微信小程序底部tabBar不显示图标