当前位置:首页 > 学习笔记之十五Spring
一、Spring概述
我们学习Spring框架的最终目的是用它整合Struts2、Hibernate框架(SSH)。
1.1 Spring框架的作用
Spring框架主要负责技术整合(可以整合很多技术),该框架提供IoC和AOP机制,基于这些特性整合,可以降低系统组件之间的耦合度,便于系统组件的维护、扩展和替换。
1.2 Spring框架的优点
其实与Spring框架的作用相同:
在SSH中,主要是利用Spring容器管理我们程序中的Action、DAO等组件,通过容器的IoC机制,可以降低Action、DAO之间的耦合度(关联度),利用AOP进行事务管理等共通部分的处理。
在SSH中,Struts2主要是利用它的控制器,而不是标签、表达式;Hibernate主要利用它的数据库访问;Spring主要是利用它的整合。
1.3 Spring框架的容器
Spring框架的核心是提供了一个容器(是我们抽象出来的,代指后面的类型)。该容器类型是BeanFactory或ApplicationContext(建议用这个类型,它是BeanFactory的子类,功能更多)。
该容器具有以下功能:
1)容器可以创建和销毁组件对象,等价于原来“工厂”类的作用。 2)容器可以采用不同的模式创建对象,如单例模式创建对象。 3)容器具有IoC机制实现。 4)容器具有AOP机制实现。
1
二、Spring容器的基本应用
2.1如何将一个Bean组件交给Spring容器
1)Bean组件其实就是个普通的Java类!
2)方法:在applicationContext.xml中添加以下定义,见2.6案例中step4。 1)实例化容器: ApplicationContext ac=new ClassPathXmlApplicationContext(\//FileSystemXmlApplicationContext(\去指定的磁盘目录找,上面的为去Class路径找 2)利用getBean(\标识符\方法获取容器中的Bean对象。见2.6案例中step5。 2.3如何控制对象创建的模式 Spring支持singleton(单例)和prototype(原型,非单例)两种模式。 默认是singleton模式,可以通过 2.4 Bean对象创建的时机 1)singleton模式的Bean组件是在容器实例化时创建。 2)prototype模式是在调用getBean()方法时创建。 3)singleton模式可以使用 1)初始化:①可以利用 ②指定的初始化方法是在构造方法调用后自动执行。若非单例模式,则每创建一个 对象,则执行一次初始化方法(单例、非单例模式都可)。见2.6案例中step3、step4。 ? 注意事项: ? 初始化的三种方式:写构造方法中;或写{ }中(代码块);Spring框架中 元素写init-method=\方法名\属性。 ? 初始化不能用static{ },它是类加载调用,比创建对象要早。 2)销毁:①可以利用 ②指定的销毁方法是在容器关闭时触发,而且只适用于singleton模式的组件(只能 为单例模式)。见2.6案例中step3、step4、step6。 2.6案例:Spring框架的使用以及2.1节-2.5节整合测试 step1:导入Spring开发包:spring.jar、commons-logging.jar和配置文件:applicationContext.xml 2 public void delete(); public void save(); } } step2:在org.tarena.dao包下,创建接口CostDAO,添加两个方法 step3:在org.tarena.dao包下,创建JdbcCostDAO类,并实现CostDAO接口 public JdbcCostDAO(){ System.out.println(\创建CostDAO对象\ public void myinit(){ System.out.println(\初始化CostDAO对象\ public void mydestroy(){ System.out.println(\销毁CostDAO对象\ } public void delete() { System.out.println(\利用JDBC技术实现删除资费记录\public void save() { System.out.println(\利用JDBC技术实现保存资费记录\step4:在applicationContext.xml配置文件中,将Bean组件(Java类)交给Spring容器 3 @Test public void test3(){ String conf=\ ApplicationContext ac= new ClassPathXmlApplicationContext(conf); CostDAO costDAO1=(CostDAO)ac.getBean(\ CostDAO costDAO2=(CostDAO)ac.getBean(\ System.out.println(costDAO1==costDAO2);//true,所以Spring默认为单例模式 } 4
共分享92篇相关文档