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 是什么呢?
注入规则:
- 四种注解都支持 value 的属性作为自定义的 bean id ;
- 如果 value 属性没有指定,那么默认以类的简单名称(类名首字母小写)作为 bean 对象的 id。
自定义 id 获取实例:
改造类上面的注解,设置自定的 id,更改的注解如下:
@Controll("uc")
@Service("us")
@Repository("ud")

浙公网安备 33010602011771号