Spring下载地址:https://repo.spring.io/release/org/springframework/spring/4.3.6.RELEASE/spring-framework-4.3.6.RELEASE-dist.zip
common.logging.jar 下载地址: http://commons.apache.org/proper/commons-logging/download_logging.cgi
tomcat7.0下载地址:https://tomcat.apache.org/download-70.cgi
Spring的两个核心包含AOP和IOC,在表现层整合Spring MVC,在业务逻辑层,整合事务和日志等,在持久层整合Hibernate,Mybatis,JPA等。
spring-core-4.3.6.RELEASE.jar
spring-beans-4.3.6.RELEASE.jar
spring-context-4.3.6.RELEASE.jar
spring-expression-4.3.6.RELEASE.jar
commons-logging-1.2.jar
1. BeanFactory
使用Bean工厂管理初始化等操作,并调用其生命周期。通常使用xml进行相关的配置。
创建一个XmlBeanFactory对象读取xml配置文件初始化BeanFactory
2. ApplicationContext
ApplicationContext是BeanFactory的子接口,称为应用上下文。
一般对于ApplicationContext接口的实例化使用两种方法:
a 读取类路径下的xml文件进行初始化(常用)
ApplicationContext context = new ClassPathXmlApplicationContext(string xmlConfigLocation);b 读取指定目录下的xml文件进行初始化
ApplicationContext context = new FileSystemXmlApplicationContext(string xmlConfigLocation);通常,第一种实例化方式更加常用。
在Java项目中,常常使用ClassPathXmlApplicationContext进行实例化容器,在Web项目中,常常交给web服务器进行,基于ContextLoaderListener进行实现,我们只需要在web.xml文件中配置以下语句即可。
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext.xml<param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
1. 导入开发所需要的包并右键添加到buildPath
2. 在src目录下创建com.learn.ioc包
3. 在包下创建一个UserDao测试接口
4. 创建一个UserDao的实现类UserDaoImpl
5. 在src目录下创建一个配置文件applicationContext.xml,并将实现类配置到bean中
<?xml version="1.0" encoding="UTF-8"?> <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-4.3.xsd"> <bean name="userDao" class="com/learn/ioc/UserDaoImpl.java"></bean> </beans>6.创建测试代码,测试bean的管理效果
7. 查看控制台输出
依赖注入DI与IOC控制反转其实是一个意思,只不过是一件事从两个方向说罢了。
传统的应用开发,我们经常new一个对象出来,然后再去使用,这样会造成侵入性很强,类与类之间过度依赖,也不利于测试。
使用DI就是,你什么时候用的时候跟Spring容器说一声,他帮你注入进去,你就得到了。
使用IOC是从容器的角度去说的,原来调用的控制是代码进行的,现在变成了使用容器进行控制,这就达到了控制反转的目的。
常见的是两种注入方法:
1. setter方法
在类内定义一个变量,使用set方法将Bean注入到类中,赋值给这个预先定义的变量,就得到了注入的实例。
需要在applicationContext中注册一下这个UserDao:
<bean id="userService" class="com.itheima.ioc.UserServiceImpl"> <property name="userDao" ref="userDao"/> </bean>使用property属性注入的bean是通过setter方法进行注入的方式。
2. 构造方法
用过构造函数进行注入。
1. 创建Service接口
2. 创建实现类
3. 修改配置文件
4. 测试
5. 测试结果
1. 创建接口方法
2.创建实现类
3. 修改配置
4. 测试
5. 结果