单纯的spring框架已经全部过了一遍了,现在整理一下里面涉及到的要点:
- IOC控制反转与依赖注入
- (基于动态代理原理的)AOP面向切面编程
拓展bean
事务处理 - 注解方式开发与XML
一.IOC原理及应用
传统方式在创建对象时一般采用工厂模式:目的是减少接口类与实现类之间的耦合关系,但是增加了接口与工厂的耦合(修改代码时需要修改工厂类中的接口,不符合闭包原则)。解决方法就是“工厂+反射+配置文件”了。工厂中配置方法,XML中配置类,反射捕捉到需求就创建新类,这就是IOC的主要原理.
1.自定义工厂类
框架中自定义的工厂类 ApplicationContext有两个实现类
- ClassPathXmlApplicationContext :加载类路径下的配置文件
- FileSystemXmlApplicationContext :加载文件系统下的配置文件
需要在XML中配置bean。
<bean>标签的id和name的配置 id 使用了约束中的唯一约束。里面不能出现特殊字符的。 name 没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。
class 定义的类的位置 Spring和Struts1框架整合的时候 <bean name=”/user” class=””/> Bean的生命周期的配置(了解) init-method Bean被初始化的时候执行的方法 destroy-method Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)
Bean的作用范围的配置(重点)
l scope :Bean的作用范围
singleton :默认的,Spring会采用单例模式创建这个对象。
prototype :多例模式。(Struts2和Spring整合一定会用到)
request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。
创建类的方式:默认创建(无参构造),静态工厂(factory-method),实例工厂(先实例化工厂然后factory-bean+factory-method)
2.属性注入:
构造方法注入
set方式注入
ps:设置对象类型的属性使用ref(加bean的id)
P空间属性注入
spel属性注入(可以注入表达式)
3.集合属性注入
<!-- Spring的集合属性的注入============================ --> <!-- 注入数组类型 --> <bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean"> <!-- 数组类型 --> <property name="arrs"> <list> <value>王东</value> <value>赵洪</value> <value>李冠希</value> </list> </property> <!-- 注入list集合 --> <property name="list"> <list> <value>李兵</value> <value>赵如何</value> <value>邓凤</value> </list> </property> <!-- 注入set集合 --> <property name="set"> <set> <value>aaa</value> <value>bbb</value> <value>ccc</value> </set> </property> <!-- 注入Map集合 --> <property name="map"> <map> <entry key="aaa" value="111"/> <entry key="bbb" value="222"/> <entry key="ccc" value="333"/> </map> </property> </bean>
在加载配置文件的时候,加载多个配置文件
在一个配置文件中引入多个配置文件(在其中一个里配置其他的)
4.基于注解的IOC开发:
1.引入aop的包
2.引入context约束(可以直接扫父包:com.itheima.spring=扫描父包下面的所有子包)
<context:component-scan />
3.使用注解开发
l @Component(修饰一个类并交给spring管理):定义Bean
- @Controller :WEB层
- @Service :Service层
- @Repository :DAO层 (效果一致)
l 属性注入:(类中有set方法,注解加到方法上;没有set方法,注解添加到属性上)
- 普通属性 :@Value
- 对象属性 :@Resource
@Autowired :按类型注入属性,
@Autowired+@Qulifier或者@resourse:按名称
作用范围@Scope:
- * singleton: 单例
- * prototype: 多例
生命周期
XML方式和注解方式比较
XML方式 :适用性更广,结构更加清晰。
注解方式 :适用类是自己定义,开发更方便。
XML和注解的整合开发:XML定义类
注解属性注入
二. AOP原理与应用
原理:动态代理