Spring IoC

什么是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
2
3
4
5
<bean id="user" class="com.entity.User">
<property name="age">
<value>20</value>
</property>
</bean>

配置文件中property里面的name属性是找类里的属性,这里写的是name="age"这里的age对应着类里面的public void setAge(int age)方法这里面的age = setAge
需注意:property中的name属性只能为java中的基本类型赋值

将一个类作为其他类中的属性该如何赋值注入?

比如我创建的User用户类里面有个邮箱类作为私有属性
private Mail mali;
并且给了setter方法

1
2
3
public void setMail(Mali mail){
this.mail = mail;
}

首先创建Mail对象:

1
2
3
<bean id="mail" class="com.entity.Mail">

</bean>

使用ref进行注入:

1
2
3
<bean id="user" class="com.entity.User">
<property name="mail" ref="mail"></property>
</bean>

valueref的不同点,value只能注入基本数据类型而ref能注入对象,ref需要是由bean管理的对象的id属性

如何使用这个User呢?创建一个测试java文件

1
2
3
4
5
6
7
8
9
10
11
import org.springframework.context.support.ClassPathXmlApplicationContext;  
public class Main {

public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) ctx.getBean("user");
//就拿到了这个User对象
ctx.close();
}

}

代码中的ctx.getBean("user");意思是获取配置文件中的beanid属性值为user的对象并且赋值给User变量。

本文标题:Spring IoC

文章作者:Bystart

发布时间:2019年07月30日 - 16:07

最后更新:2019年07月30日 - 19:07

原始链接:http://bystart.github.io/2019/07/30/Spring-IoC/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。