Spring 基础+精华.docx

上传人:公**** 文档编号:548693955 上传时间:2023-02-21 格式:DOCX 页数:50 大小:2.84MB
返回 下载 相关 举报
Spring 基础+精华.docx_第1页
第1页 / 共50页
Spring 基础+精华.docx_第2页
第2页 / 共50页
Spring 基础+精华.docx_第3页
第3页 / 共50页
Spring 基础+精华.docx_第4页
第4页 / 共50页
Spring 基础+精华.docx_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《Spring 基础+精华.docx》由会员分享,可在线阅读,更多相关《Spring 基础+精华.docx(50页珍藏版)》请在金锄头文库上搜索。

1、Spring(2.5)1.基础Spring是一个开源的控制反转(IOC)和面向切面(AOP)的容器框架。1.1控制反转(IOC)BookDao bookdao=new BookDaoImpl();BookDaoImpl是由应用维护和创建的。所谓控制反转就是应用本身并不负责对象的创建及维护,而是由外部容器负责。这样控制权就由应用转移到了外部容器,即所谓的反转。1.2依赖注入 所谓依赖注入,就是在运行期间,由外部容器动态的将依赖对象注入到组件中去。 Public class BookServiceBeanPrivate BookDao bookdao;/通过构造器参数,让容器把创建好的对象注入进B

2、ookDaoBean,当然也可以用set方法进行注入;Public BookServiceBean(BookDao bookdao)This.bookdao=bookdao; Public void save(Book book)bookdao.save(book)1.3为何使用spring 降低组件之间的耦合度,实现各层之间的解耦 提供众多服务,如:事务管理、消息服务、JMS服务、持久化服务等 提供单例模式支持 提供了AOP技术,利用它很容易实现权限拦截、运行期监控等功能 提供众多辅助类,加速开发,如:JdbcTemplate、HibernateTemplate 对于主流的应用框架提供了支持

3、,如struts、hibernate、JPA等1.4环境搭建所需jar包配置文件模板实例化spring容器 关闭spring容器:ctx.close()Spring的XML配置文件代码自动提示说明 id、name都是给bean取名字;id不能包含特殊字符,name可以。 class,指定bean指向的具体类。 init-method:初始化创基bean实例时就调用的bean的方法 destroy-method:销毁bean实例前调用的bean的方法(在销毁前关闭资源) 获取bean实例,通过ApplicationContext的getBean(String id)方法获取bean实例2.Spr

4、ing管理bean2.1.实例化bean的3种方式2.2.Bean的作用域及延迟初始化默认情况下spring创建对象是单例的,即多次getBean方法得到的是同一个Bean实例,默认的作用域为singleton(默认scope=” singleton”)。2.3.Bean的生命周期 singleton范围的bean在spring容器(ApplicationContext)实例化时,就会被实例化。即的lazy-init的默认值为default。将lazy-init的值改为true时,就会在在调用genBean方法时,才实例化的。 prototype范围的bean是在调用genBean方法时,才实

5、例化的。 init-method:初始化创建bean时就调用的bean的方法 destroy-method:销毁bean实例前调用的bean的方法(在销毁前关闭资源)2.4依赖注入的原理注入依赖对象(1)方式一:通过set方法Service中注入dao对象。上图中,标签的ref指向service中要注入的bean的名称(bean的id、name),name指向service类中要注入的dao属性的名称;(2)方式二:通过内部bean标签的,name指向service类中要注入的dao属性的名称;如果使用内部bean,则该bean只能为外部bean服务。其他bean不能使用。(3)方式三:通过构

6、造器方式在标签中,index指的是构造器参数的索引,type指的是构造器参数指向的bean类,ref指的是参数指向的具体bean;如果参数为字符串,则没有type和ref,value指注入的字符串参数的值。(4)注解方式 见注解注入基本类型 name属性要有get、set方法。注入集合类型(集合中元素为字符串)2.5手工装配-自动装配手动装配,如上面的xml依赖注入和下面注解中的Resource和Autowired依赖注入。建议开发中使用手动装配。 自动装配,在xml中的标签中配置。不推荐使用。3.注解3.1依赖注入3.2自动扫描bean组件 如果项目中的bean很多,xml就会显得臃肿。可以

7、通过自动扫描来给xml减肥。 这些注解是在类上的,不是在接口上的。 bean默认名称。生成的bean的名称默认为bean类简单类名的首字母小写。 指定生成的bean实例的名称。如Service(“personservice”),Repository(“persondao”) 指定bean的作用域。上面的注解创建的bean是单例的。注解Scope(“prototype”),可以改变bean的作用域,每次创建新的bean实例。 指定bean初始化方法(生成bean时自动调用)在方法上PostConstruct。 指定bean销毁前的处理方法在方法上Predestroy 上面的标签会注册很多处理器;

8、使用它后,就不必使用了3.3动态代理AOP在JDK中,实现动态代理:代理对象和目标对象都实现了共同的接口,会使用Proxy类产生代理对象。Spring缺省使用J2SE 动态代理(dynamic proxies)来作为AOP的代理。这样任何接口都可以被代理。Spring也支持使用CGLIB代理. 对于需要代理类而不是代理接口的时候CGLIB代理是很有必要的。 如果一个业务对象并没有实现一个接口,默认就会使用CGLIB。 此外,面向接口编程 也是一个最佳实践,业务对象通常都会实现一个或多个接口。代理拦截方法的执行顺序基于注解 Pointcut,第一个*号表示任意的返回值类型,service.表示该

9、包及其子包,第二个*表示类,第三个*表示类中的方法,(.)表示方法的参数个数任意;注解表示拦截方法,即anyMethod代理了实际的方法。 Before,在所有拦截到的方法执行之前执行;agrs该前置通知拦截的方法还必须满足相应的参数类型和个数;否则不执行前置通知 AfterReturning,在所有拦截到的方法执行之后执行;returing表示该后置通知拦截的方法还必须满足相应的返回值类型,并且会将返回值作为后置通知方法的参数。 After,在后置通知后执行;最后执行,并且只要满足条件就一定会执行。 AfterThrowing,例外通知,throwing指该例外通知拦截的方法还必须满足:抛出

10、的例外类型、个数与throwing指定的相同,并将例外作为该例外通知的参数。实例基于XML实例切入点表达式 拦截service包及其子包下所有类的方法execution(* cn.itcast.service.*.*(.) 拦截返回值为String类型的方法execution(java.lang.String cn.itcast.service.*.*(.) 拦截第一个参数为String类型的方法execution(* cn.itcast.service.*.*( java.lang.String,.) 拦截所有返回值不是void类型的方法execution(!void cn.itcast.s

11、ervice.*.*(.)4.整合JDBC4.1基本步骤配置数据源配置事务 引入命名空间 注解方式 XML方式 实例在service层引入数据源- 向service层注入数据源-向service层引入jdbcTemplate类-4.2封装数据库配置到properties文件实质是在spring配置文件中使用占位符。 编写jdbc.properties文件 引入配置文件注意location指定的路径,这里默认为类路径4.3事务管理 开启事务 Spring默认会为每个数据库操作方法开启事务(在类上使用Transactional)。可以通过Transaction来改变。 回滚 Spring中事务对运

12、行时异常(unchecked)才会回滚,对编译时异常(checked)不会回滚。例如对RuntimeException会回滚,对Exception不会(Exception是RuntimeException的父类,包含checked和unchecked)。这种特性可以改变:上述注解指定某种编译异常(checked)回滚。当然也可以指定运行时异常不会滚:传播行为 实例指定该方法不开启事务。 NESTED属性介绍-xxx方法默认开启事务。注解方式(建议,可以精细配置) 在类上 Transactional,指明该类需要事务管理 Transactional(readOnly),该事务指定的方法为只读方法

13、;、 Transactional(timeput),事务的超时时间 Transactional(isolation),事务的隔离级别XML方式(不推荐)对标签:get*。表示如果拦截的方法以get开头,则不启用事务。*。表示拦截的方法使用默认的事务管理,即开启事务。5.整合Hibernate5.1引入jar包5.2配置数据源5.3将sessionFacory交给Spring5.4配置事务管理注解方式5.4配置实体bean的xx.hbm.xml5.5测试15.6二级缓存引入ehcache.jar对指定类使用缓存。引入ehcache.xml,放在类路径下。6.整合Hibernate+struts1第一版Hibernate如上,已整合。6.1引入jar包6.2web容器中实例化spring容器ContextLoaderListener实例化spring容器后,会将容器实例放到ServletContest实例中,可以通过ServletContext对象获取到spring容器的实例。(了解)6.3web容器中配置struts6.4 配置struts-config.xml6.5获取spring容器实例6.6编写action类7.整合Hibernate+struts1第二版7.1将action交给spring管理

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号