- Spring是什么?
答:struts是一个web框架(jsp/action/actionForm)
Hibernate是ORM框架,处于持久层
Spring是属于容器框架,用于配置bean,并维护bean之间关系的框架
- Spring中有一个重要概念:bean(是java中任何一种对象 javabean/service/action/数据源/dao,ioc(控制反转inverse of control)),DI(dependency injection 依赖注入)
- 层次图(以登陆验证来讲)
Spring可以管理,web层,业务层,DAO层,持久层。Spring可以配置各个层的组件(bean),并且维护各个bean之间的关系。
- 快速入门案例:
开发一个spring项目
- 引入spring的开发包(最小配置spring.jar 该包把常用的jar都包括,还需要一个写日志的包commons-logging.jar)
- 创建spring的核心文件 applicationContext.xml(这个名字不能瞎取),[hibernate有核心hibernate有核心文件hibernate.cfg.xml struts核心文件struts-config.xml],该文件一般放在src目录下,该文件中引入xsd文件,可以从给出的案例中拷贝一份文件。
Xsd,dtd文件主要作用是:用于约束你的xml文件里面的哪些元素和子元素以及出现的顺序。
- 配置bean
<bean id="userService" class="com.service.UserService">
</bean>
这句话相当于什么意思呢?当我们spring框架加载的时候,我们的spring就会去看这里面呢有没有这个bean,如果有的话就会起实例化这个bean(类),并且把它装载到内存中去。
<!-- 在容器文件中配置bean(service/dao/domin/action/数据源)
id代表取得名字
class中写上bean的全路径
-->
<!-- bean元素的作用是,当我们的spring框架加载的时候,spring就会自动的创建一个bean对象,并放入内存中,
相当于 UserService userService = new UserService();
userService.setName("Hello");
使用了bean 就能够实现上面两句话,这个怎么办的到呢,这里采用了反射机制
读了这个class文件,加载这个id的实体,通过这个属性的set方法进行实现,
那么在UserService.java文件中的set方法必须写,不然值无法注入进去。
-->
<bean id="userService" class="com.service.UserService">
<!-- 这里体现注入的概念 它将name的值注入进bean-->
<property name="name">
<value> Hello </value>
</property>
</bean>>
</beans>
- 在Test.java中,我们怎么使用
import java.util.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
// 使用传统方法调用 userservice的sayhello方法
// UserService userService = new UserService();
// userService.setNameString("Hello");
// userService.sayHello();
//使用spring来完成上面的任务
//1.得到spring的容器applicationContext对象(容器对象),这个applicationContext对象对应文件applicationContext.xml
//这个applicationContext对象其实就是对应的applicationContext.xml这个文件
//而这个文件中配置的有bean,将来通过这个对象就能取出这个东西了
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) ac.getBean("userService");
userService.sayHello();
}
}
- 细节讨论?
传统方法和使用spring的方法
-
- 使用spring,没有new对象,我们把创建对象的任务交给spring框架
- spring的运行原理图:
5.3 我们再看spring
对上面案例总结:
spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可.
ioc是什么?
答 :ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(即applicationContext.xml),而程序本身不再维护.
创建对象和维护对象控制权,反转到spring容器中。
DI是什么?
答: di(dependency injection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术。
我们不能删除id=“byService”中的这个代码,因为上面会依赖这个代码进行程序执行,对象之间就是依赖关系。