Spring
框架之
IOC
的基本配置
,
前言,上一章我们学习了
Spring
的
IOC
特性以及
IOC
的实现原理:注解和反射,本章我们将学习如何在
Spring
中使用
IOC
。
Spring
的
IOC
配置
Spring
最重要的特性是
IOC
控制反转,利于
IOC
我们能降低对象之间的耦合性。
IOC
需要通过一定的配置实现,配置方法分为:
1)
使用
xml
文件配置
2)使用注解配置
使用
Spring
的基本功能,必须先导入
Spring
的依赖:
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-context</artifactId>
-
<version>5.1.5.RELEASE</version>
-
</dependency>
Spring Context
:向
Spring
框架提供上下文信息。
Spring
上下文包括企业服务,例如
JNDI
、
EJB
、电子邮件、国际化、校验和调度功能。它包含
Spring Core
组件,能实现
IOC
的核心功能。
使用
xml
文件配置
-
/**
-
* CPU
接口
-
*/
-
public interface Cpu {
-
void run();
-
}
-
/**
-
* AMD
的
CPU
-
*/
-
public class AMDCpu implements Cpu {
-
public void run() {
-
System.out.println("AMD
的
CPU
正在运行
....");
-
}
-
}
-
/**
-
*
内存接口
-
*/
-
public interface Memory {
-
void read();
-
void write();
-
}
-
/**
-
* DDR8G
的内存
-
*/
-
public class DDR8GMemory implements Memory {
-
public void read() {
-
System.out.println("
使用
DDR8G
的内存读取数据
....");
-
}
-
public void write() {
-
System.out.println("
使用
DDR8G
的内存写入数据
....");
-
}
-
}
-
类似的
IntelCpu
和
DDR16Memory
类省略了代码
-
/**
-
*
电脑类
-
*/
-
public class Computer {
-
private Cpu cpu;
-
private Memory memory;
-
private String brand;
-
...
省略
get\set
-
public Computer() {
}
public Computer(String brand, Cpu cpu, Memory memory) {
this.brand = brand;
this.cpu = cpu;
this.memory = memory;
}
public void start(){
System.out.println(brand+"
电脑启动了
");
cpu.run();
memory.read();
memory.write();
}
-
}
在
maven
项目的
resources
目录下,添加配置文件:
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"
-
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
-
http://www.springframework.org/schema/context/spring-context.xsd">
-
<!-- CPU
对象
-->
-
<bean id="cpu" class="com.qianfeng.springioc.demo3.IntelCpu"/>
-
<!--Memory
对象
-->
-
<bean id="memory" class="com.qianfeng.springioc.demo3.DDR16GMemory"/>
-
<!--
电脑对象
-->
-
<bean id="computer" class="com.qianfeng.springioc.demo3.Computer">
-
<!--
属性的注入
-->
-
<property name="cpu" ref="cpu"></property>
-
<property name="memory" ref="memory"></property>
-
<property name="brand" value="
小米电脑
"></property>
-
</bean>
-
</beans>
配置说明:
<beans>
是根标签,代表
Spring
的
Java
对象容器
<bean>
标签代表在容器中创建一个
Java
对象,属性
id
代表对象名,
class
是对象的类型。
在配置文件中首先创建了一个
cpu
对象和一个
memory
对象,然后创建了一个
computer
对象,
computer
中有
Cpu
类型的
cpu
属性和
Memory
类型
memory
属性以及
String
类型的
brand
属性,这里使用依赖注入的方式给属性赋值。
<property name="cpu" ref="cpu"></property>
property
指的是对象的属性,
name
是属性名,
ref
是对象引用,这里引用了前面的
cpu
对象。
<property name="brand" value="
华硕电脑
"></property>
brand
属性注入的是数值而不是对象引用,这里使用
value
注入值。
Spring
上下文对象
Spring
容器可以看做是一个
JavaBean
的工厂
BeanFactory
,
BeanFactory
负责创建并保存各个
JavaBean
,
BeanFactory
的子类有:
1
)
ClassPathXMLApplicationContext
基于
XML
配置文件上下文
2
)
AnnotationConfigApplicationContext
基于注解配置的上下文
3
)
FileSystemApplicationContext
基于文件系统的上下文
使用ClassPathXMLApplicationContext的方法:
-
public class TestComputer {
-
@Test
-
public void testComputer(){
-
//
创建
XML
文件的应用程序上下文对象
-
ClassPathXmlApplicationContext cxt =
-
new ClassPathXmlApplicationContext("applicationContext.xml");
-
//
通过类型从容器获得
Java
对象
-
Computer computer = cxt.getBean(Computer.class);
-
//
还可以通过对象名获得对象
-
// Computer computer = (Computer) cxt.getBean("computer");
-
computer.start();
-
}
-
}
使用注解配置
Spring
的
IOC
也可以不使用配置文件,完全通过
Java
代码和注解实现配置,这种配置方法代码更加简洁。
常用注解:
@Component
配置到类上面,
Spring
容器会自动扫描并添加有该注解类的对象
@Autowired
配置到属性或
set
方法上,容器会将容器中同类型的对象自动注入到属性中
@Qualifier
用于给不同的组件设置标识,用于区分多个相同类型的对象
@Value
注入一般类型的值,如:
@Value(20)
、
@Value("
张三
")
@Configuration
加在配置类上,该类作为
Spring
启动的入口
@ComponentScan
和
@Configuration
配合使用,加在配置类上,用于扫描包中所有
@Component
注解的类
-
在
DDR8Memory
类和
IntelCpu
类上添加
@Component
注解
-
修改
Computer
类:
-
@Component
-
public class Computer {
-
@Value("
苹果电脑
")
-
private String brand;
-
@Autowired
-
private Cpu cpu;
-
@Autowired
-
private Memory memory;
-
....
-
}
-
@Configuration
-
@ComponentScan("com.qianfeng.springioc.demo4")
-
public class MyConfig {
-
public static void main(String[] args) {
-
//
创建基于注解的上下文对象
-
AnnotationConfigApplicationContext cxt = new AnnotationConfigApplicationContext(MyConfig.class);
-
//
获得
Computer
对象
-
Computer computer = cxt.getBean(Computer.class);
-
computer.start();
-
}
-
}
总结
本章我们学习了两种
Spring
的配置方法,
XML
配置的好处是:和代码耦合性低,容易维护,注解配置的好处是:代码简洁。两种配置方法的优势互补,在实际开发过程中一般会使用
XML
和注解混合进行配置。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2650129/
,如需转载,请注明出处,否则将追究法律责任。