什么是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变量名classclass属性的作用用来指向一个要被管理的类的路径和类名
当然还有以下一点:
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变量。