zoukankan      html  css  js  c++  java
  • spring 基础(二) spring 基于注解配置ioc容器

    1基础

    1.1注解优势

    1. 摆脱繁琐的XML形式的bean与依赖注入配置。
    2. 基于"声明式"的原则,更适合轻量级的现代企业应用。
    3. 让代码可读性变得更好,研发人员拥有更好的开发体验。

    1.2三类注解(注解功能划分)

    1. 组件类型注解-声明当前类的功能与职责。
    2. 自动装配注解-根据属性特征自动注入对象。
    3. 元数据注解-更细化的辅助IoC容器管理对象的注解。

    1.3四类主键类型注解

    1. @Component:组件注解,通用注解,被该注解描述的类将被loC容器管理并实例化,以下三个都是主键注解的细化,当不确当用哪一个时候,就可以用这个。
    2. @Controller:语义注解,说明当前类是MVC应用中的控制器类。
    3. @Service:语义注解,说明当前类是Service业务服务类。
    4. 如果需要被spring Ioc识别 需要在contextApplication.xml中:
      1.   扫描com.imooc下所有的class,如果class中有之前那四个注解实例化并且管理到ioc容器中
    5. @Repository:语义注解,说明当前类用于业务持久层通常描述对应Dao类。
    6. 关于beanid ,可以自己指定或者使用默认。
    7. 特别注意,当@Autowired注解使用某个对象时候,必须先用@Component/@Repository/@Service先将此类注解,否则springIoc找不到 

    1.3.1拓展@ConfigurationPropertie

    通过这种注解可以使得ConfigBean.class 中对象被注入值,但是要注意命名一定要相同

    1.4demo学习

    代码准备

     

     注意-其中contextApplication.xml中表头文件来源spring.io,具体见 spring ioc中contextApplication.xml

     

    1.5两类自动装配注解

    Ioc容器运行中,自动为某个属性注入数据,自动装配注解就是为了依赖注入存在的。让Spring自动的把属性需要的对象找出来,并注入给该属性。

    1.5.1按照类型装配

    1. @Autowired 按容器内对象类型动态注入属性,由Spring机构提供。
    2. @Inject 基于JSR-330(Dependency Injection for Java)标准, 其他同@Autowired,但不支持required属性
    3. 按照类型装配置的缺点:当一个接口下有两个实现(一个用于mysql数据库、一个用于oracle数据库,这个时候实例化就会出错,系统不知道实例化哪一个)
      1.  

      2. mysql实现 

      3. oracle实现
      4. 解决这种方法,要么在不使用的实现中删除@Repository,要么在要使用的实现中添加@Primary(系统就使用这个)

    1.5.2按名称装配

    1. @Named 与@Inject配合使用,JSR-330规范,按属性名自动装配 属性
    2. @Resource 基于JSR-250规范,优先按名称、再按类型智能匹配
    3. @Resource设置name属性,则按name在IoC容器中将bean注入
    4. @Resource未设置name属性
      1. 以属性名作为bean name在IoC容器中匹配bean,如有匹配则注入
      2. 按属性名未匹配,则按类型进行匹配,同@Autowired,需加入@Primary解决类型冲突
      3. 使用建议:在使用@Resource对象时推荐设置name或保证属性名与bean名称一致

    5. demo
      1.  
      2. 方式1 定义的名称与实现类名称不同,通过Bean( @Resource中定义名称=》和实现类相同) ioc容器则会根据名称去调用;方式2 定义的名称与实现类名称完全相同,ioc容器则会根据名称去调用;方式3如果以上都没有写,则和@Autowired解决方式相同

    1.6元数据注解

    1. @Primary 按类型装配时出现多个相同类型对象,拥有此注解对象优先被注 入 @PostConstruct 描述方法,相当于XML中init-method配置的注解版本 。
    2. @PreDestroy 描述方法,相当于XML中destroy-method配置的注解版本 。
    3. @Scope 设置对象的scope属性 ,决定这个对象的生存周期是什么(单例模式、多例模式)。
    4. @Value 为属性注入静态数据。【@Value、@Resource、@Autowired对属性的设置原理都相同:运行时将private改为public 赋值完毕之后将public在改为private】
  • 相关阅读:
    北漂开始
    iOS沙盒简单介绍
    iOS多线程技术
    使用Redis实现分布式锁
    Spring Cloud构建微服务架构(六)高可用服务注册中心
    springboot学习之maven多环境打包的几种方式
    数据库中in和exists关键字的区别
    Java 中的悲观锁和乐观锁的实现
    springboot学习笔记-5 springboot整合shiro
    spring 整合 redis,以及spring的RedisTemplate如何使用
  • 原文地址:https://www.cnblogs.com/1439107348s/p/14281042.html
Copyright © 2011-2022 走看看