Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
l Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发
l Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring
l Spring框架的主页:http://www.springsource.org/
l Spring框架下载地址:http://www.springsource.org/download
在项目中引入spring立即可以带来下面的好处
l 降低组件之间的耦合度,实现软件各层之间的解耦。
1. IOC(依赖注入):包含并管理应用对象的配置和生命周期,你可以配置你的每个bean如何被创建,也可以配置每个bean是只有一个实例,还是每次需要时都生成一个新的实例,以及它们是如何相互关联的
2. AOP(面向切面):采用了面向切面编程来实现很多基础但是与业务逻辑无关的功能的解耦,比如:事务管理、日志、权限验证.....
3. DAO:Spring 还提供了对数据库JDBC的封装,使用JdbcTemplate来简化数据操作
4. ORM:提供了对主流的对象关系映射框架的支持
5. JEE: 对Java企业级开发提供了一些解决方案,例如EJB、JMS等
6. WEB: 提供了自己的Spring MVC和对显示层框架的集合支持
IOC就是 Inversion Of Control
public class Girl {
private Boy boy =new Boy();
public void kiss() {
System.out.println(boy.getName());
}
}
boy是在应用内部创建及维护的。所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,目的是为了获得更好的扩展性和良好的可维护性。
DI就是 Dependency Injection
当我们把依赖对象交给外部容器负责创建,那么Girl类可以改成如下:
public class Girl {
private Boy boy;
public void kiss() {
System.out.println(boy.getName());
}
}
所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到另一个对象中。
实例化Spring容器常用的两种方式:
方法一:
在类路径下寻找配置文件来实例化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
可以在整个类路径中寻找xml文件
* 通过这种方式加载。需要将spring的配置文件放到当前项目的classpath路径下
* classpath路径指的是当前项目的src目录,该目录是java源文件的存放位置。
方法二:
在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\\beans.xml“});
Spring的配置文件可以指定多个,可以通过String数组传入。
当spring容器启动后,因为spring容器可以管理bean对象的创建,销毁等生命周期,所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。从容器获取bean对象的代码如下:
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
Girl girl =(Girl)ctx.getBean("girl");
1.使用类构造器实例化(默认无参数)
2.使用静态工厂方法实例化
3.使用实例工厂方法实例化:
9.指定Bean的初始化方法和销毁方法
Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和销毁bean的时候调用bean的两个生命周期方法。
<bean id=“foo” class=“...Foo”
init-method=“setup”
destory-method=“teardown”/>
.singleton(默认值)
在每个Spring IoC容器中一个bean定义只有一个对象实例(共享)。
默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。如:
<bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true"/>
.prototype
允许bean可以被多次实例化(使用一次就创建一个实例)
原文地址:http://11926581.blog.51cto.com/11916581/1866240