)
Posted yuanGrowing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了)相关的知识,希望对你有一定的参考价值。
1.1 介绍
ioc,即Inversion of Control控制反转,也可以称之为依赖注(DI)。org.springframework.beans和org.springframework.context这两个包是使用ioc容器的基础,所以要在工程中使用依赖注入,必须引入这两个包。
(关于依赖注入在网上有很多的介绍,这里就不多讲了)
在这里有一个非常重要的类ApplicationContext,它是Beanfactory的一个子接口,用来实现spring中bean的创建和管理。在官方的API中可以看到ApplicationContext的描述:
![这里写图片描述](https://img-blog.csdn.net/20160309225740779)
它继承了ListableBeanFactory(这个接口是BeanFactory的直接子接口)。它为应用程序提供初始的配置,在运行的时候它处于不可更改的状态,但是支持重新加载。ApplicationContext通过读取一个xml文件来完成程序的初始化配置。
1.2 helloworld程序
我的工程中引入的jar包如下:前面两个是spring中jar包的依赖
![这里写图片描述](https://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类的话直接改一个配置文件就行了,
大大提高了程序的可扩展性。
以上是关于)的主要内容,如果未能解决你的问题,请参考以下文章