Spring---Bean

  在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后bean就可以被使用了,一旦该bean不再使用,Java就自动进行垃圾回收。然而,在Spring中,bean的生命周期就比较复杂了。下面是一个bean装载到Spring应用上下文的过程:

  如图所示:在你准备调用bean之前,bean工厂执行了若干启动步骤:

      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将调用它们的post-ProcessBeforeInitialization()方法;
      7.如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似地,如果bean使用initmethod
    声明了初始化方法,该方法也会被调用;
      8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法;
      9.此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
      10.如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销
    毁方法,该方法也会被调用。

一,创建可以被发现的Bean

  在厨师的眼中,一套好的刀是必不可少的,它能够将平淡的食物素材加工成精致的艺术品。

1 package cooking;
2 
3 public interface knife{
4 
5      void cut();
6 }

  现在,我们创建一个名为knife(刀)的接口,它拥有cut(切)的功能。接下来我们实现这个接口

 1 package cooking
 2 
@Component 3 public class beef implements knife{ 4 5 private int weight = 2; 6 private double price = 32.1; 7 8 public void cut(){ 9 System.out.println(“This is perfect beef”,+“weight:”+weight 10 +“kg”+“,”+“It's price is”+price+"$"); 13   } 14 }

  请注意,我们在beef类上使用了@Component注解。这个简单的注解表明 该类是一个组件类,并告诉Spring要为这个类创建bean。

  在默认情况下,组件扫描是不启用的,我们需要显示配置一下Spring,命令Spring去寻找带有@Component注解的类,并为其创建bean

1 package cooking
2 
3 @Configuration
4 @ComponentScan
5 public class knifeConfig{
6 
7    
8 }

  注意到,在knifeConfig类上加上了@ComponentScan注解,该注解能够在Spring中开启组件扫描,如果没有其他配置的话,@ComponentScan默认会扫描与配置类相同的包,去查找带有@Component的注解类,并在Spring中自动为其创建一个bean。如果你更倾向于使用XML来启用组件扫描的话,那么可以使用Spring context命名空间的<context:component-scan>元素。

<context:component-scan base-package="cooking"/> 该标签会开启组件扫描,去cooking包下寻找带有@Component的注解类。

 

  

posted on 2017-08-05 10:15  冥石  阅读(261)  评论(0编辑  收藏  举报