1.spring框架的核心功能有两个:
- spring容器作为超级大工厂,负责创建,管理所有的java对象,这些java对象被称为Bean。
- spring容器管理容器bean之间的依赖关系,spring使用一种被称为“依赖注入”的方式来管理bean之间的依赖关系。
2.理解依赖注入:
以配置文件来管理java实例的协作关系,称之为控制反转(Inverse of control,IoC)。
后来起了个新名字:依赖注入(Dependency Injection)。
3.当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,在传统模式下通常有两种做法:
- 1.原始做法:new一个对象,主动创建被依赖对象,然后调用其方法;
- 2.简单工厂模式:找到被依赖对象的工厂,主动通过工厂去调用被依赖对象。
主动二字,这必然会导致调用者与被依赖对象实现类的硬编码耦合,非常不利于项目升级的维护。
4.spring框架中:
调用者无需主动获取被调用对象,只需被动接收spring容器为调用者的成员变量赋值即可。
5.spring的零配置支持
spring提供如下几个Annotation来标注bean:
- @Component:标注一个普通spring bean类;
- @Controller:标注一个控制器类组件;
- @Service:标注一个业务逻辑组件类;
- @Repository:标注一个Dao类组件;
在spring配置文件中做如下配置,指定自动扫描的包;
<context:component-scan base-package="edu.shu.spring.domain"/>
使用@Resource配置依赖
@Resource
位于javax.annotation
包下,是来自JavaEE规范的一个Annotation
,Spring直接借鉴了该Annotation
,通过使用该Annotation
为目标Bean指定协作者Bean。使用@Resource
与``元素的ref属性有相同的效果。
使用@PostConstruct和@PreDestroy定制生命周期行为
@PostConstruct
和@PreDestroy
同样位于javax.annotation包下,也是来自JavaEE规范的两个Annotation,Spring直接借鉴了它们,用于定制Spring容器中Bean的生命周期行为。它们都用于修饰方法,无须任何属性。其中前者修饰的方法时Bean的初始化方法;而后者修饰的方法时Bean销毁之前的方法
Spring4.0增强的自动装配
Spring提供了@Autowired
注解来指定自动装配,@Autowired
可以修饰setter方法、普通方法、实例变量和构造器等。当使用@Autowired
标注setter方法时,默认采用byType自动装配策略。
精确装配
Spring提供了@Qualifier
注解,通过使用@Qualifier
,允许根据Bean的id来执行自动装配。
Spring的AOP
AOP(Aspect Orient Programming)也就是面向切面编程,作为面向对象编程的一种补充,已经成为一种比较成熟的编程方式
1.AOP的基本概念
- 切面(Aspect): 切面用于组织多个Advice,Advice放在切面中定义。
- 连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用,或者异常的抛出。在Spring AOP中,连接点总是方法的调用。
- 增强处理(Advice): AOP框架在特定的切入点执行的增强处理。有"around"、"before"和"after"等类型
- 切入点(Pointcut): 可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点
2.Spring的AOP支持
Spring中的AOP代理由Spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。
为了在应用中使用@AspectJ
支持,Spring需要添加AspectJ依赖