Spring实战第一部分总结
第一章 综述
1. DI依赖注入让相互协作的组件保持松散耦合,而面向切面编程允许你把遍布应用各处的功能分离出来形成可重用的组件。
2.Spring容器负责创建并管理对象(单例),配置并管理他们的整个生命周期
3.spring中的bean的生命周期:实例化—填充属性—调用setBeanName方法—调用setBeanFactory方法—调用setApplicationContext方法—调用BeanPostProcessor预初始化方法—调用afterpropertiesSet方法—调用自定义的初始化方法-- 调用BeanPostProcessor初始化后方法—bean可以使用了—容器关闭时调用Disposablebean的destroy方法—调用自定义的销毁方法。
第二章 装配Bean
bean,构造器注入和set方法注入,装配bean,控制bean的创建和销毁。
1.spring配置方案:XML中显式配置;Java中进行显式配置;隐式的bean发现机制和自动装备。 推荐指数依次升高。
2.自动化装配Bean:(1)组件扫描(component scanning)spring会自动发现应用上下文中所创建的bean。(2)自动装配(autowiring):spring自动满足bean之间的依赖。
3.将一个bean用@component标注,然后在同一个包写一个JavaConfig类,用@Configuration和@componentscan(自动扫描)标注;Spring就会自动扫描位于javaconfig包下的带有@component标签的bean。
XML中自动扫描启动方式为:<context:component-scan base-package=”soundSystem”/>
4.标记bean @Named = @Component ;装配bean @Inject = @Autowired
bean直接在类头上添加注释即可。装配bean可以在定义的类属性上,构造方法上,set方法上直接添加@Autowired(@Inject)注释,直接完成bean的装配。
5.在JavaConfig类中也可以用@Bean注释来声明应用上下文中的Bean,这里会写一个方法,方法返回类型为定义的bean。在javaconfig中装配bean最常用的方法就是引用创建bean的方法。如:
@Bean
public Cdplayer cdPlayer(){retrun new CDPlayer(sgtPeppers()); }
6.XML声明bean <bean id = “compactDisc” class = “soundsystem.sgtPepers”/>
bean:<bean id = “cdPlayer” class = “soundsystem.CDPlayer”>
<constructor-arg ref = “compactDisc”/> 注入bean
<constructor-arg value = “she is a really boy”/> 注入属性
</bean>
7. 对于强依赖 采用构造器注入,弱依赖采用属性注入。
第三章 高级装配
1.高级装配中的歧义性,使用@Qualifier注解。
2.Spring定义了多种作用域:单例;原型:每次注入或获取时都会创建一个bean实例;会话:在web中为每个会话建立一个bean实例;请求:同会话
3.运行时求值有两种方法,一是属性占位符,一是Spring表达式
@propertySource(”路径”)),并通过Spring的Enviroment对象来检索属性。如果是自动扫描,则可以用@Value(${disc.title}).
4. spring表达式SpEL需要放入#{...}中。
第四章 面向切面
切面帮助我们模块化横切关注点。在面向切面编程时,我们可以在一个地方定义通用功能,但是可以通过声明的方式定义这个功能要在何处应用,而无需修改受影响的类。
1. 切面也有目标,他必须完成的工作,切面的工作被称之为通知
Spring有五种通知,前置,后置,返回,异常,环绕。
2.连接点:应用通知的时机被称为连接点。
3.切点:切点有助于缩小切面所通知的连接点的范围。
4.切面:切面是通知和切点的结合,通知和切点反映出—它是在何时何处完成其功能的。
5.Spring提供四种aop支持:基于代理的经典Spring AOP;纯pojo切面;@AspectJ注解驱动的切面;注入式AspectJ切面。
6.@pointcut可定义 重用的切点, 先用@aspect 标注audience类,声明为切面。然后:
@pointcut(“execution(** concert.Performance.perform(..))”)
public void performance() { }
@Before(“performance()”)
public void takeseats( ){ }
7. 使用JavaConfig时,可以在配置类级别上通过使用@EnableAspectJAutoProxy注解启用自动代理功能。6中的切面就可以被实际使用起来。audience类中的通知就会在perform()方法执行的前后执行。