什么是Spring的IOC?
IOC(DI)-控制反转(依赖注入)
Ioc 为一个外部容器 管理对象
与对象
之间的关系。无需手动在代码中创建对象,由外部IOC容器托管自动帮你创建对象。
IoC的好处:
- 解耦合
- 方便拓展
利用Spring的IoC创建对象
创建完工程,导入相关的jar包,创建Spring的配置文件,通常使用 application.xml
来命名,这个文件放置在类加载的目录下(src目录),方便后续使用。
1
2
3
4
5
6
7
8
9
10
11<?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:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<bean id="user" class="com.entity.User"></bean>
</beans>
使用以上方法就创建了一个对象,重点在于:<bean id="类的别名" class="指向被管理类的路径和类名"></bean>
如上面的代码配置文件,<bean></bean>
由bean
标签来创建一个对象,上面的意思就是通过IOC容器帮我们创建了一个user的对象。
bean的组成
一个基本的bean
是由一下组成:
id
对象的引用名 唯一 类似 User user = new User() 里面的 user变量名class
class属性的作用用来指向一个要被管理的类的路径和类名
当然还有以下一点:
property
标签他的作用是用来给类里面的属性注入内容
创建一个User类 为 User类中的age 年龄属性赋值
步骤如下:
1 | <bean id="user" class="com.entity.User"> |
配置文件中property
里面的name
属性是找类里的属性,这里写的是name="age"
这里的age
对应着类里面的public void setAge(int age)
方法这里面的age = setAge
需注意:property
中的name
属性只能为java中的基本类型赋值
将一个类作为其他类中的属性该如何赋值注入?
比如我创建的User用户类里面有个邮箱类作为私有属性private Mail mali;
并且给了setter方法
1 | public void setMail(Mali mail){ |
首先创建Mail对象:
1 | <bean id="mail" class="com.entity.Mail"> |
使用ref进行注入:
1 | <bean id="user" class="com.entity.User"> |
value
与ref
的不同点,value
只能注入基本数据类型而ref
能注入对象,ref
需要是由bean
管理的对象的id
属性
如何使用这个User
呢?创建一个测试java文件
1 | import org.springframework.context.support.ClassPathXmlApplicationContext; |
代码中的ctx.getBean("user");
意思是获取配置文件中的bean
的id
属性值为user
的对象并且赋值给User
变量。