Spring 是一个开源的控制反转(IOC)和面向切面(AOP)的容器框架,它的主要目的是简化企业软件的开发。
Spring提供的服务:事务管理服务,jms服务,spring core的服务,持久化的服务,其他……。
Spring提供单例模式,提供了AOP技术,提供了众多的辅助类,如JdbcTemplate、HibernateTemplate。
Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA(持久化服务)、Struts等,这样便于应用的开发。
1 spring2.5 搭建和测试:
1.1使用spring使用的jar包
1.2Spring的配置文件
1.3实例化Spring容器
1.4测试框架
建立java工程,导入Spring.jar和log日志包,建立配置Spring(beans.xml)文件,建立junit测试类验证框架,
Junit测试类,如下图所示:
运行测试类,如果没有报错,那么框架搭建成功。
1.5配置帮助信息
1.6 beans配置文件详解
在beans.xml配置spring容器要管理的bean,
测试Spring容器是否有创建实例
Console打印:
表明:Spring容器创建实例成功。
2 Spring管理bean的原理
模拟spring容器创建实例的原理(自创Spring容器):
测试传智播客Spring容器:
3实例化bean的三种方式
3.1使用类构造器(最常用)
如上所示,一般都是类构造器。
3.2静态工厂方法
Junit测试……
3.3实例工厂方法实例化
4bean的作用域
4.1 sigleton
Spring的默认情况下,是单例模式(sigleton),测试如下:
Console打印为true,俩个对象是相同,表明为单例模式。
4.2 prototype
代表每调用一个方法,都会产生新的实例,是在scope(范围)属性里设置。
配置如下:
用junit测试验证,console打印为false,俩个对象不相同,表明每次都产生一个新的实例。
5 bean的生命周期
5.1 bean什么时候开始实例化?
1、作用域为sigleton的时候,bean在容器实例化的时候开始实例化。
2、作用域为prototype的时候,bean是在容器对象调用getBean()时候实例化。
5.2 改变bean实例化的时间
Bean标签中有一个lazy_init(延迟实例化)属性可以配置。
- lazy_init=”true”时候,bean容器是在调用getBean()的时候实例化,一般不建议使用(开发的时候),以便于在服务器启动的时候,检查控制台。
- lazy_init=”false”(默认就为false)的时候,bean在容器实例化的时候就已经实例化了,建议使用。
5.3 init_method和destroy_method属性
1、在init_method属性里面设置要初始化的方法。
2、在destory_method属性里面设置bean消亡的方法。如果不设置bean实例必须是Spring容器停止运行才结束。
6 spring依赖注入
6.1属性setter方法注入
内部是如何实现的?
………………
6.1.1内部bean依赖注入
6.1.2外部bean和内部bean注入区别
1、外部bean可以为多个bean的属性注入实例。
2、内部bean只能为其父bean的属性注入实例。
6.1.3基本类型值的注入
6.1.4 集合类型的注入
6.2 构造器注入
6.3 注解注入
注解方式的注入减轻了xml配置文件的臃肿。那么该如何进行装备呢?
@AutoWired :默认是根据类型进行注入,但是也可以通过配置按名称进行注入,例:
@Autowired @Qualifier(“personDaoxx”)
Private personDao personDao;
@Autowired(required=false/true)如果required=true的时候,必须注入对象,否则会报错;
Required=false的时候,不要求必须注入,不注入为则为null。
@Resource :先根据name进行注入,如果找不到name值,再根据类型注入。
@Resource实现原理……(源代码—传智播客的注解类)
7 Spring自动扫描和管理
Spring2.5提供了给配置文件减肥的功能,通过在classpath自动扫描方式把组件纳入spring容器中管理。
配置文件如下:
7.1 bean的名称
配置文件中没有bean文件,那么bean的名称是什么?
spring中默认bean的名称是第一个字母小写的类名,注解中也可以修改bean的名称,如@service(“personService”),bean的名称由personServiceBean设置为personService,代码如下图:
7.2、修改bean的作用域
bean的作用域(默认为sigleton),通过@Service(“personService”) @Scope(“prototype”)修改。
7.3设置init方法
@PostConstruct,如下图:
7.4设置destroy方法
@PreDestroy,如下图:
8 AOP
面向切面编程……
8.1 JDK代理对象(PROXY)
- 静态代理(企业开发很少用)
- 动态代理(JDK提供了Proxy动态代理类)
目标类必须提供接口
思考的方式:横切性关注点。
动态代理类:
目标类:
8.2 CGLIB实现AOP
图解:
相关概念:
8.3 spring 的AOP
8.3.1注解方式进行AOP开发
定义一个切面:
配置文件(把bean交给spring管理):
8.3.2 使用配置文件实现AOP
实例配置:
- aspect的切入点语法定义细节:
*号位置代表返回类型,()代表参数表
9、String +JDBC组合开发
事务详解:
事务传播属性:
事务的四种隔离级: