Spring的环境搭建的IOC

发布时间 2023-06-12 21:51:35作者: 卡卡罗特kk

1、Spring的简单组成

  • bean的生命周期的管理: java对象的创建,使用,销毁等
  • 轻量级: 使用简单
  • 容器: spring可以管理对象,创建好对象,放入spring容器,容器就是存放对象的
  • 组成部分: Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring
  • Web和 Spring Web MVC。
    image

2、Spring的环境搭建

2.1导入依赖

<!-- 只需导入spring-context依赖,其他依赖maven会自动关联导入 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>

2.2导入核心配置文件

名字: 无限制,但是一般有spring.xml,spring-context.xml,beans.xml, applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 后续再填充 -->
</beans>

使用spring管理bean
<bean id="xxx" class="xxx"/>
创建工厂Bean
工厂bean,即创建工厂对象,由工厂加载配置文件,通过配置文件创建容器,从容器中获得对象

String path = "applicationContext.xml";
// 通过配置文件,创建容器
ApplicationContext context = new ClassPathXmlApplicationContext(path);
// 从容器中获得对象(通过标签的id)
MyClass myClass = context.getBean("myClass", MyClass.class);
myClass.test();

IOC+DC

IOC是Spring框架的核心功能之一,IOC(inversion of control)控制反转
控制: 控制创建对象的能力
反转: 原来创建对象是自己做,反转就是将创建对象的能力交给Spring
IOC(控制反转): 将创建对象的能力反转给Spring,由Spring创建对象
DI(dependency injection) 依赖注入: 属性赋值

IOC

现在创建对象交给Spring来做,代码如下
applicationContext.xml
<bean id="xxx" class="xxx"/>

DI

DI : 依赖注入,即属性赋值

  • set方法注入【重点】
  • 构造方法注入【了解】
  • 自动注入【理解-后续注解就是这个思路】

set方法注入

  • 属性要有set方法
  • 注入时bean标签内写property标签
  • property标签name写属性名
  • property标签中,给基本类型赋值用value,给引用类型赋值用ref

注解开发(重点)

首先需要在配置文件中开启扫描

<context:component-scan base-package="com.qf"/>

image
image

注解使用细节

  1. IOC创建对象的注解,四个功能一样,都可以创建对象,只不过建议不同的位置使用不同的注解,见名知意
  2. 加上创建对象的注解后,默认对象名是 类名首字母小写 ,即需要通过类名首字母小写从容器中获得对
  3. 其实可以在注解中设置参数,给对象取名.例如@Service("aaa"),以后就用aaa从容器中取值
  4. 自动注入时@Autowired ,默认 按照类型 注入
  5. 但是如果容器中有两个该类型的bean,自动注入就会失败,此时可以 按名字注入
  6. 如果不使用@Resource按名字注入,也可以使用 @Qualifier("XXXX") 配合
    @Autowired一起实现,按照名字注入
  7. 可以给类加@Scope("prototype|singleton") 来控制单例多例