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

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类的话直接改一个配置文件就行了,
    大大提高了程序的可扩展性。

你可能感兴趣的:(spring-ioc)