1.ioc容器(spring3.2文档第五章)

来源:互联网 发布:mac装win10 wifi不稳定 编辑:程序博客网 时间:2024/06/05 08:03

1.1 介绍

ioc,即Inversion of Control控制反转,也可以称之为依赖注(DI)。org.springframework.beans和org.springframework.context这两个包是使用ioc容器的基础,所以要在工程中使用依赖注入,必须引入这两个包。(关于依赖注入在网上有很多的介绍,这里就不多讲了)在这里有一个非常重要的类ApplicationContext,它是Beanfactory的一个子接口,用来实现spring中bean的创建和管理。在官方的API中可以看到ApplicationContext的描述:![这里写图片描述](http://img.blog.csdn.net/20160309225740779)它继承了ListableBeanFactory(这个接口是BeanFactory的直接子接口)。它为应用程序提供初始的配置,在运行的时候它处于不可更改的状态,但是支持重新加载。ApplicationContext通过读取一个xml文件来完成程序的初始化配置。

1.2 helloworld程序

我的工程中引入的jar包如下:前面两个是spring中jar包的依赖![这里写图片描述](http://img.blog.csdn.net/20160309230021079)假设有两个类UserBean和UserDao,其具体代码如下。UserBean就是UserDao的一个依赖,我们就可以采用spring进行DI。
public class UserBean {    private String name ;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}
public class UserDao {    private UserBean user ;public UserBean getUser() {    return user;}public void setUser(UserBean user) {    this.user = user;}}
我们写一个spring的配置文件spring-main.xml(对于xml文件的详细解释在接下来会介绍):
<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">    <bean id="userbean" class="com.example.maven.UserBean"></bean><bean id="userdao" class="com.example.maven.UserDao">     <property name="user" ref="userbean"></property></bean></beans>
然后在main函数中使用ApplicationContext(一般我们在普通java程序中使用ClassPathXmlApplicationContext)。
public class App {   public static void main(String[] args) {      ApplicationContext app = new ClassPathXmlApplicationContext("spring-main.xml");      UserDao userDao = (UserDao) app.getBean("userdao");      userDao.getUser().setName("test");      System.out.println(userDao.getUser().getName());    }}

1.3 个人理解

首先,对于spring中bean和spring管理bean的理解:简单的讲,bean就是一个普通的java类,bean与bean之间可能会有依赖关系,比如beanb是beana的成员变量。我们以前在程序中想要创建一个类的时候都是使用new关键字的,而在spring中,我们使用ioc容器来创建类或者时候bean。正如上文中spring-main.xml中定义的bean

这里写图片描述

这句话的意思就是,创建一个类型为UserBean的类,名为userbean,当ApplicationContext读取这个xml文件的时候,spring ioc容器中就会创建这个bean。然后在程序中就可以调用。 这样有什么好处呢?在工程中,我们都使用接口编程,假设有一个接口A,然后有一个类B实现了这个接口,我们在不使用spring的工程中,每一次使用接口A的时候都是 A a = new B()这么调用的,如果B类突然满足不了项目的要求了,必须要使用一个D类来完成接口A的功能,那么我们就必须将工程中所有的A接口的定义换成A a = new D()。这样大大降低了工程的可维护性和可扩展性。    如果使用spring的话,我们用<bean id="b" class="B">来定义一个B,在程序中用ApplicationContext进行调用ApplicationContext.getBean("b"),如果要使用D类的话直接改一个配置文件就行了,    大大提高了程序的可扩展性。
0 0
原创粉丝点击