spring框架学习笔记

Spring自带了多种类型的应用上下文
 AnnotationConfigApplicationContext: 从一个或多个基于Java的配置类中加
载Spring应用上下文。

AnnotationConfigWebApplicationContext: 从一个或多个基于Java的配置类中
加载Spring Web应用上下文。
ClassPathXmlApplicationContext: 从类路径下的一个或多个XML配置文件中加
载上下文定义, 把应用上下文的定义文件作为类资源。

FileSystemXmlapplicationcontext: 从文件系统下的一个或多个XML配置文件
中加载上下文定义。
XmlWebApplicationContext: 从Web应用下的一个或多个XML配置文件中加载上
下文定义。

1. Spring对bean进行实例化;
2. Spring将值和bean的引用注入到bean对应的属性中;
3. 如果bean实现了BeanNameAware接口, Spring将bean的ID传递给setBean-Name()方法;
4. 如果bean实现了BeanFactoryAware接口, Spring将调用setBeanFactory()方法, 将BeanFactory容器实例传入;
5. 如果bean实现了ApplicationContextAware接口, Spring将调用setApplicationContext()方法, 将bean所在的应用上下文的          引 用传入进来;
6. 如果bean实现了BeanPostProcessor接口, Spring将调用它们的postProcessBeforeInitialization()方法;
7. 如果bean实现了InitializingBean接口, Spring将调用它们的after-PropertiesSet()方法。 类似地, 如果bean使用init-method         声明了初始化方法, 该方法也会被调用;
8. 如果bean实现了BeanPostProcessor接口, Spring将调用它们的postProcessAfterInitialization()方法;
9. 此时, bean已经准备就绪, 可以被应用程序使用了, 它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
10. 如果bean实现了DisposableBean接口, Spring将调用它的destroy()接口方法。 同样, 如果bean使用destroy-method声明         了销毁方法, 该方法也会被调用。

Spring装配bean:

创建应用对象之间协作关系的行为通常称为装配(wiring) , 这也是依赖注入(DI) 的本质。
它提供了三种主要的装配机制:
在XML中进行显式配置。
在Java中进行显式配置。
隐式的bean发现机制和自动装配。

Spring从两个角度来实现自动化装配:
组件扫描(component scanning) : Spring会自动发现应用上下文中所创建的bean。
自动装配(autowiring) : Spring自动满足bean之间的依赖。
组件扫描和自动装配组合在一起就能发挥出强大的威力, 它们能够将你的显式配置降低到最少。

@Component注解:这个简单的注解表明该类会作为组件类, 并告知Spring要为这个类创建bean
@ComponentScan注: 这个注解能够在Spring中启用组件扫描。如果没有其他配置的话, 默认会扫描与配置类相同的包。
@ContextConfiguration:需要在什么类中加载配置。
@Configuration注解表明这个类是一个配置类, 该类应该包含在Spring应用上下文中如何创建bean的细节
@Bean注解会告诉Spring这个方法将会返回一个对象, 该对象要注册为Spring应用上下文中的bean。 方法体中包含了最终产生bean实例的逻辑。
在Java配置中, 可以使用@Profile注解指定某个bean属于哪一个profile

Spring在确定哪个profile处于激活状态时, 需要依赖两个独立的属性: spring.profiles.active和spring.profiles.default。 如果设置了spring.profiles.active属性的话, 那么它的值就会用来确定哪个profile是激活的。 但如果没有设置spring.profiles.active属性的话, 那Spring将会查找spring.profiles.default的值。 如果spring.profiles.active和spring.profiles.default均没有设置的话, 那就没有激活的profile, 因此只会创建那些没有定义在profile中的bean。
Spring提供了@ActiveProfiles注解, 我们可以使用它来指定运行测试时要激活哪个profile。
条件化bean:@Conditional注解, 它可以用到带有@Bean注解的方法上。 如果给定的条件计算结果为true, 就会创建这个bean, 否则的话, 这个bean会被忽略。

在Spring中, 可以通过@Primary来表达最喜欢的方案。 @Primary能够与@Component组合用在组件扫描的bean上, 也可以与@Bean组合用在Java配置的bean声明中。
 Spring能够让bean以单例、 原型、 请求作用域或会话作用域的方式来创建。

@Pointcut注解能够在一个@AspectJ切面内定义可重用的切点
通过使用EnableAspectJAutoProxy注解启用自动代理功能
@DeclareParents注解由三部分组成:
value属性指定了哪种类型的bean要引入该接口。 在本例中, 也就是所有实现
Performance的类型。 (标记符后面的加号表示是Performance的所有子类型, 而不是Performance本身。 )
defaultImpl属性指定了为引入功能提供实现的类。 在这里, 我们指定的是DefaultEncoreable提供实现。
@DeclareParents注解所标注的静态属性指明了要引入了接口。 在这里, 我们所引入的是Encoreable接口。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值