spring学习四

1: InitializingBean  vs  init-method

      InitializingBean 是一个接口,有一个方法afterPropertiesSet,不建议使用;因为InitializingBean是Spring接口,这样导致 bean和spring耦合到一起了。

     <bean id="SimpleBean1" class="com.SimpleBean" init-method="init" destroy-method="cleanUp >
        <property name="name" value="Bill"></property>
        <property name="age" value="19"></property>
      </bean> 

     DisposableBean接口 destroy() ,一般用destory-method替代

                可以用default-init-method/ default-destroy-method:  为多个bean定义初始化/销毁方法。

2:ApplicaitonContextAware ,   BeanNameAware接口, BeanFactoryAware 

      ApplicaitonContextAware :setApplicationContext()  可以让bean获取context信息。

      BeanNameAware:  可以让bean获得bean的name.

      BeanFactoryAware :  bean感知beanfactory接口

3: Spring中注入map的key必须是String类型。

4:bean的生命周期: 

  (1) Spring实例化bean.

  (2)  利用依赖注入来配置bean中所有的属性值。

  (3)  beanNameAware,   setBeanName

  (4)  BeanFactoryAware,   setBeanFacetory()

  (5)  ApplicationContextAware, setApplicationContext(), 当前ApplicationContext实例的引用。

  (6)  BeanPostProcessor,   posProcessBeforeINnitalzation()

  (7)  InitializingBean, posProcessAfterINitialization()

      到这为止,bean就可以被用了,

  (8) DisposableBean,  destroy()

  (9) destroy-method,  定义销毁bean的方法。

5: bean的作用域:

       scope = "singleton"(默认)

       prototype: 每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当于一个new的操作。

   request:request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:    

<web-app>...<listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener>...</web-app> 
 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/> 
6: @

    session:  和request类似

   global session:

其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。

6:@Autowired 

功能: 对类成员变量、方法以及构造函数进行标注,完成自动装配;可以消除set, get方法。

Spring 将直接采用 Java 反射机制对 自动注入。所以对成员变量使用 @Autowired 后,您大可将它们的 setter 方法(setCar() 和 setOffice())从 Boss 中删除。   

     (1) 默认采用bytype的方式注入bean,  如果byType有多个匹配的bean, 则会再按照byname的方式。如果byName还有多个,就抛出异常。

 (2)   @Autowired () 

                    @Qualifier ( "baseDao" )   如果想安装name的方式,则用qualifier限定

     (3)   @Autowired  (required=false)    ;  默认是必须能装配上,否则报错;如果用required=false, 即使装配不上也不报错

7:@Autowired   与  @Resource区别

  @Autowired:默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用;         

@Autowired() @Qualifier("baseDao")     
private BaseDao baseDao;    

         @Resource:(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定, 
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。        

Resource(name="baseDao")     
private BaseDao baseDao;    

8:  自动装配也可以不用注解@Autowired, 而是在XML中进行配置

        像下面这样, 当生成person实例的时候,对于其属性name采用这种setter装配,而对cat可以采用自动装配

<bean id="people" class="test.spring.autowired.Person" autowire="byName"><property name="name" value="小明"></property><!-- <property name="cat" ref="cat1"></property> -->
</bean>

9:如何开启 @Autowired    @ Resource     

在XML中定义<context:annotation-config/>

隐式地向 Spring容器注册AutowiredAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor以及PersistenceAnnotationBeanPostProcessor这4个BeanPostProcessor。如下:

<context:annotation-config/> 

  另,在我们使用注解时一般都会配置扫描包路径选项:

<context:component-scan base-package="pack.pack"/>

  该配置项其实也包含了自动注入上述processor的功能,因此当使用<context:component-scan/>后,即可将<context:annotation-config/>省去。

10:什么是bean的装配? Spring几种装配?

          构造装配;      setter,getter 装配;       自动装配;       类厂装配

11: Spring基于XML自动装配:

             byName: XML中加入autowired = 'byName'

             byType:   primary = "fale'":表示非首选装配的bean;

                              autowiredcandidate = "false"       // 这个bean不作为备选装配的bean

              constructor:  autowire= "construct"

              auto detect:  先按照construct, 如果失败,再安装byType装配

12: 可以为配置文件的所有bean指定相同的autowire属性。 bean自己的autowire配置可以覆盖这个默认的策略。

13:  基于注解的自动装配:

           默认是禁止注解装配的, XML中通过 <context: annotation-config> 启用注解装配。

14:   基于注解的自动装配有三个注解

            (1)@Autowired:

                        byType自动装配;  可以用在构造函数,setter函数,  直接用在属性的声明的地方;   把setter删掉.          

      @Autowired(required=false)    //    不是必须能装配的,否则 默认是必须可以装配的。                                      

                         @Autowired                              //    当有多个bean都满足可以装配的条件的时候,用qualifier进行限定。

                         @Qualifier(“guitar”)

            (2)@Inject:     和autowire一样,可以自动装配属性,方法,和构造器。

                               @Inject:

                                @Named(“guitar”)   // 限定。

            (3)@Resource

15:    <  context: component-scan>  用处?

                   除了能完成<context: annotation-config> 的功能外,还允许Spring自动检测识别以下注解,来进行生成bean.

      @Component

                 @Controller

                 @Repository

                 @Servie

            

原文地址:https://www.cnblogs.com/liufei1983/p/7554590.html