2.1 IoC的概念
Inverseof Control,控制反转是Spring容器的内核,AOP、声明式事务等功能都是在此基础上进行的。
IoC主要功能是依赖关系的转移。应用的本身不负责依赖对象的创建和维护,而是由Spring容器负责。控制权就由应用转移到了外部容器。
IoC的主要功能由控制反转来解释并不是很好理解。所以提出了新的概念DependencyInjection.
DI依赖注入,调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以转移对某一接口实现类的依赖。也就是在运行期,由外部容器(Spring)动态地将所依赖的对象注入到组件中去。
2.2 简单的使用
a、创建工程,导入spring的核心jar包
如果是Web项目。直接把spring3的核心Jar包放到项目的WEB-INF/lib目录下既可。
因为我们教学是使用MyEclipse平台,测试的时候是用Java Project。这里使用MyEclipse导入Jar包。
右击项目名 -> Build Path -> Configure Build Path。出现Properties for 项目名的窗口。
选择Libraries -> Add Library -> User Library
如果是第一次使用User Library(个人库)。那么你必须先新建一个Library。点击User Libraries...出现下面的窗口。
New -> 填写User library name -> OK.。 如果之前已经有了个人的Spring Library。那么这一步可以跳过。
选中你刚才创建的Library。点击Add JARs。然后把你所需要的所有的Jar包加进Library中来。 如果之前已经有了个人的Spring Library。那么这一步也可以跳过。
选中你的个人Library。OK就可以。
b、写一个接口及一个接口实现类,如UserDao及UserDaoImpl
其实这里我们只需要一个类而已。但在实际项目开发的过程中,我们一般会使用面向接口编程。所以这里使用接口与接口实现的形式。
public interface UserDao { public void save(); }
public class UserDaoImpl implements UserDao { public void save() { System.out.println("保存用户..."); } }
然后在下面spring的配置文件中,把接口实现类交由Spring容器管理.
c、spring配置文件(如:applicationContext.xml)
这个配置文件可以上网找,或者在官方提供方的demo中获取。你也可以通过MyEclipse导入Spring的功能来得到一个配置文件。不过这样做的话,MyEclipse会给你的项目导入一些它给提供的Spring Jar包。完成功能导入后,把这些Jar包移除就可以了。
你还可以直接新建一个xml文件,把我下面的配置拷贝过去就可以。
详情可参考MyEclipse 导入Hibernate功能一章:http://blog.csdn.net/p_3er/article/details/8965305
spring配置文件一般放在源码根目录(src)下:
<?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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 把一个刚才的接口实现类交由spring管理 --> <bean id="userDao" class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean> </beans>
d、通过main方法测试
//启动spring容器 ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"}); //通过容器获取到对象,并注入到userDao中去.//getBean("userDao")中的userDao是刚才Spring配置文件中的 bean idUserDao userDao = (UserDao) context.getBean("userDao");