IOC控制反转

概念

是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称 DI),还有一种方式叫 “依赖查找”(Dependency Lookup)。在spring中通过控制反转,我们可以将原本手动new变成了spring框架通过反射机制实例化

执行过程

引入依赖

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.9.RELEASE</version>
	</dependency>
</dependencies>

创建配置文件

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
 </beans>

配置所有需要注册到spring容器的Bean

<bean class="org.javaboy.Book" id="book"/>

加载这个配置类

public class Main {
	public static void main(String[] args) {
	ClassPathXmlApplicationContext ctx = new 
	ClassPathXmlApplicationContext("applicationContext.xml");
	}
}

ApplicationContext 是一个 接口,是 BeanFactory 这个接口的子接口,它扩展了 BeanFactory 这个接口,提供了额外附加的功能,而 BeanFactory 是管理 bean 对象的容器的根接口,我们是针对它的子接口 ClassPathXmlApplicationContext 做的实例化,目的是加载项目中的 Spring 的配置文件,使 Spring 来管理我们定义的 bean 对象。

通过getBean方法,可以从容器中去获取对象:

Book book = (Book) ctx.getBean("book"); 
System.out.println(book);

还可以使用FileSystemXmlApplicationContext

FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext("F:\\workspace5\\workspace\\spring\\spring-ioc\\src\\main\\resources\\applicationContext.xml");

注解配置

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

context-component-scan 标签,这是 Spring 框架自定义的 xml 标签,通过 base-package 的属性,指明需要被自动扫描实例化的类所在位置。

注解分类:

创建对象: 对应的就是在 xml 文件中配置的一个 bean 标签,可以定义 id、name、class 等属性;

注入数据: 对应的就是在 bean 标签下,使用 property 标签给类中的依赖属性赋值;

作用范围: 对应的就是设置 bean 标签的 scope 属性,不设置默认也是单例;

生命周期: 对应的就是设置 bean 标签的 init-method 和 destroy-method 方法。

@Component :一般用于通用组件的类上使用的注解;

@Service : 一般用于业务层类上使用的注解;

@Controller : 一般用于控制层类上使用的注解;

@Repository :一般用于持久层类上使用的注解。

注解注入规则

我们知道,Spring 这个容器本质是个 map 集合来存储实例化后的对象。既然是个 map 集合,就应该对应的有 key 和 value。

我们都知道 value 肯定是实例化后的 bean ,那么 key 是什么呢?

注入规则

  1. 四种注解都支持 value 的属性作为自定义的 bean id ;
  2. 如果 value 属性没有指定,那么默认以类的简单名称(类名首字母小写)作为 bean 对象的 id。

自定义 id 获取实例

改造类上面的注解,设置自定的 id,更改的注解如下:

@Controll("uc")
@Service("us")
@Repository("ud")
posted @ 2020-08-03 18:46  柒丶月  阅读(85)  评论(0)    收藏  举报