实例化 Bean 对象。设置 Bean 属性。如果我们通过各种 Aware 接口声明了依赖关系,则会注入 Bean 对容器基础设施层面的依赖。具体包括 BeanNameAware、BeanFactoryAware 和 ApplicationContextAware,分别会注入 Bean ID、Bean Factory 或者 ApplicationContext。调用 BeanPostProcessor 的前置初始化方法 postProcessBeforeInitialization。如果实现了 InitializingBean 接口,则会调用 afterPropertiesSet 方法。调用 Bean 自身定义的 init 方法。调用 BeanPostProcessor 的后置初始化方法 postProcessAfterInitialization。创建过程完毕。
Spring Bean 有五个作用域:
Singleton,这是 Spring 的默认作用域,也就是为每个 IOC 容器创建唯一的一个 Bean 实例。
Prototype,针对每个 getBean 请求,容器都会单独创建一个 Bean 实例。
如果是 Web 容器,则支持另外三种作用域:
Request,为每个 HTTP 请求创建单独的 Bean 实例。,为每个请求创建一个bean实例。
Session,很显然 Bean 实例的作用域是 Session 范围。为每个会话创建一个bean实例。
GlobalSession,用于 Portlet 容器,因为每个 Portlet 有单独的 Session,GlobalSession 提供一个全局性的 HTTP Session。
他们是什么时候创建的:
1一个单例的bean,而且lazy-init属性为false(默认),在Application Context创建的时候构造
2一个单例的bean,lazy-init属性设置为true,那么,它在第一次需要的时候被构造.
3 其他scope的bean,都是在第一次需要使用的时候创建
他们是什么时候销毁的:
1 单例的bean始终 存在与application context中, 只有当 application 终结的时候,才会销毁
2 和其他scope相比,Spring并没有管理prototype实例完整的生命周期,在实例化,配置,组装对象交给应用后,spring不再管理.只要bean本身不持有对另一个资源(如数据库连接或会话对象)的引用,只要删除了对该对象的所有引用或对象超出范围,就会立即收集垃圾.
3 Request: 每次客户端请求都会创建一个新的bean实例,一旦这个请求结束,实例就会离开scope,被垃圾回收.
4 Session: 如果用户结束了他的会话,那么这个bean实例会被GC.
Spring AOP:
Aspect,通常叫作方面,
Join Point,它是 Aspect 可以切入的特定点,在 Spring 里面只有方法可以作为 Join Point。
Advice,它定义了切面中能够采取的动作。
Pointcut 是解决了切面编程中的 Where 问题,Advice 则是明确了切面编程中的 What,也就是做什么