Spring是一个轻量级的控制反转(IOC)和面向切面(IOP)的容器框架
1.控制反转IOC(inversion of controller) IOC是一种概念,是把我们程序中类与类之间的依赖关系交给容器去处理,一般有两种方式: * 依赖查找DL(dependency lookup):程序根据查找方式,交给容器去查找 * 依赖注入DI(dependency injection):程序不提供查找方式,提供合适的构造方法或者setter方法,让容器进行注入来解决依赖关系,spring的控制反转就是通过依赖注入来实现的 2.什么叫依赖? 简单的说,一个类实现某个功能需要另外一个类的帮助来实现(模拟一个web登陆验证的功能),详见UserService.java 3.基于接口编程的开发方式 当一个方法有多个实现的情况下,我们一般是基于接口的方式进行编程,详见UserServiceForInterface.java 4.依赖注入 依赖注入DI是指一个对象需要另外一个对象的时候,无需在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序 依赖注入是目前位置最好的解耦方式,因为依赖关系是依靠配置文件的方式组织在一起,而不是在程序中的硬编码 5:Spring的IOC容器通过依赖注入来实现程序之间的依赖关系,达到解耦的作用 a : spring项目环境搭建需要的jar包 * spring-beans-4.2.1.RELEASE.jar * spring-context-4.2.1.RELEASE.jar * spring-core-4.2.1.RELEASE.jar * spring-expression-4.2.1.RELEASE.jar * commons-logging.jar * hamcrest-core-1.3.jar * junit-4.11.jar * log4j-1.2.17.jar b:配置文件 applicationContext.xml,加上bean约束 bean的约束在spring-framework-4.2.1.RELEASE\ docs\spring-framework-reference\html\xsd-configuration.html文件查看 6:在spring文件上面实现依赖注入的两种方式 1: 在配置文件定义我们的类 <!--相当于我们java代码的 UserService userService = new UserService() --> <bean id= "userService" class = "com.tz.spring.sysmanage.service.UserServiceForSpring"></bean> <!--相当于我们java代码的 UserDao userDao = new UserDao() --> <bean id = "userDao" class = "com.tz.spring.sysmanage.dao.impl.UserDao"></bean> <!--相当于我们java代码的 UserDaoOther userDaoOther = new UserDaoOther() --> <bean id= "userDaoOther" class= "com.tz.spring.sysmanage.dao.other.UserDaoOther"></bean> 2:描述依赖关系有两种方式 * 通过构造方法的方式注入: a:被依赖的类必须有构造方法 b:在配置文件里面来描述依赖关系 <bean id= "userService" class = "com.tz.spring.sysmanage.service.UserServiceForSpring"> <constructor-arg ref="userDao"></constructor-arg> <constructor-arg ref="userDaoOther"></constructor-arg> </bean> * 通过setter方法注入 a:被依赖的类里面生成依赖类的setter方法 b:在配置文件来描述依赖关系 <bean id= "userService" class = "com.tz.spring.sysmanage.service.UserServiceForSpring"> <property name="userDao" ref="userDaoOther"></property> </bean>