4.114 Spring的bean和注解

 

 

  1. Spring的Bean

    1. Spring Bean是什么

      1. Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中 的形式定义。
      2. 一个Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖
    2. 如何给Spring 容器提供配置元数据

        1. XML配置文件。
          1. Set方法注入;
          2. 构造器注入:①通过index设置参数的位置;②通过type设置参数类型;
          3. 静态工厂注入;
          4. 实例工厂
        2. 基于注解的配置。
          1. @Component   指定把一个对象加入IOC容器
          2. @Repository   作用同@Component; 在DAO持久层使用
          3. @Service      作用同@Component; 在IMPL业务逻辑层使用
          4. @Controller    作用同@Component; 在控制层使用
          5. @Resource     属性注入
        3. 基于java的配置。
        4. 总结
          1. 使用注解,可以简化配置,且可以把对象加入IOC容器,及处理依赖关系(DI)
          2.  注解可以和XML配置一起使用。
    3. SpringBean的作用域

      1. 当定义一个 在Spring里,我们还能给这个bean声明一个作用域。它可以通过bean 定义中的scope属性来定义。如,当Spring要在需要的时候每次生产一个新的bean实例,bean的scope属性被指定为prototype。另一方面,一个bean每次使用的时候必须返回同一个实例,这个bean的scope 属性 必须设为 singleton。
        1. singleton : bean在每个Spring ioc 容器中只有一个实例。
        2. prototype:一个bean的定义可以有多个实例。
        3. request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
        4. session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
        5. global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
        6. 注意: 缺省的Spring bean 的作用域是Singleton。使用 prototype 作用域需要慎重的思考,因为频繁创建和销毁 bean 会带来很大的性能开销。
  2. Spring的注解

    1. 什么是基于Java的Spring注解配置? 给一些注解的例子

      1. 基于Java的配置,允许你在少量的Java注解的帮助下,进行你的大部分Spring配置而非通过XML文件。
      2. 以@Configuration 注解为例,它用来标记类可以当做一个bean的定义,被Spring IOC容器使用。
      3. 另一个例子是@Bean注解,它表示此方法将要返回一个对象,作为一个bean注册进Spring应用上下文。
    2. 怎样开启注解装配?

      1. 先引入context名称空间:  xmlns:context="http://www.springframework.org/schema/context"
      2. 开启注解扫描 <context:component-scan base-package="com.itmayiedu02"></context:component-scan>
      3. 通过注解的方式,把对象加入ioc容器
        1. @Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。
        2. @Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。
        3. @Service:此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用 @Service 而不是 @Component,因为它以更好的方式指定了意图。
        4. @Repository:这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。
    3. @Required 注解有什么作用:

      1. 这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。
    4. @Autowired 注解有什么作用

      1. @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。@Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required一样,修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。
    5. Autowired和@Resource之间的区别

      1. @Autowired可用于:构造函数、成员变量、Setter方法
      2. @Autowired和@Resource之间的区别
        1. @Autowired默认是按照类型装配注入的(这个注解是属业spring的),默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
          1. @Autowired() @Qualifier("baseDao")     
          2. private BaseDao baseDao;    
        2. @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。
          1. @Resource(name="baseDao") 
        3. 总结:可以多使用@Resource注解在字段上,且这个注解是属于J2EE的,减少了与spring的耦合。最重要的这样代码看起就比较优雅
    6. @Qualifier 注解有什么作用:

      1. 当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。
    7. @RequestMapping 注解

      1. 用于将特定 HTTP 请求方法映射到将处理相应请求的控制器中的特定类/方法。此注释可应用于两个级别:
      2. 类级别:映射请求的 URL
      3. 方法级别:映射 URL 以及 HTTP 请求方法
posted @ 2020-10-09 18:32  Smileing  阅读(84)  评论(0编辑  收藏  举报