zoukankan      html  css  js  c++  java
  • spring学习(三)DI 依赖注入

    使用IOC容器来解决对象之间的依赖关系对象之间的依赖关系,其实就是给对象上的属性赋值!因为对象上有其他对象的变量,因此存在了依赖

    Spring提供了好几种的方式来给属性赋值

    • 1) 通过构造函数

    • 2) 通过set方法给属性注入值

    • 3) p名称空间

    • 4)自动装配(了解)

    • 5) 注解(重要)

    在xml中使用构造函数赋值

        <bean id="userDao" class="bean.UserDao"/>
       <bean id="userService" class="bean.UserService">
           <constructor-arg name="userDao" type="bean.UserDao" ref="userDao"/>
       </bean>

    在xml中通过set方法赋值

    applicationContext.xml配置文件:通过property节点来给属性赋值

    • 引用类型使用ref属性

    • 基本类型使用value属性

        <bean id="userDao" class="bean.UserDao"/>
       <bean id="userService" class="bean.UserService">
           <property name="userDao" ref="userDao"/>
       </bean>

    内部bean赋值

    先创建userService,发现userService需要userDao的属性,再创建userDao

    applicationContext.xml配置文件:property节点内置bean节点(不能复用)

        <bean id="userService" class="bean.UserService">
           <property name="userDao">
               <bean id="userDao" class="bean.UserDao"/>
           </property>
       </bean>

    p名称空间注入属性值

    p名称控件这种方式其实就是set方法的一种优化,优化了配置而已

    <beans>元素中加入声明xmlns:p="http://www.springframework.org/schema/p"

    applicationContext.xml配置文件:使用p名称空间

    <bean id="userService" class="bean.UserService" p:userDao-ref="userDao"/>

    自动装配

    Spring还提供了自动装配的功能,能够非常简化我们的配置

    自动装载默认是不打开的,自动装配常用的可分为两种:

    • 根据名字装配

    • 根据类型装配

    XML配置根据名字装配

    applicationContext.xml配置文件:使用自动装配,根据名字

        <bean id="userDao" class="bean.UserDao"/>
       <!--
           1.通过名字来自动装配
           2.发现userService中有个叫userDao的属性
           3.看看IOC容器中没有叫userDao的对象
           4.如果有,就装配进去
       -->
       <bean id="userService" class="bean.UserService" autowire="byName"/>

    XML配置根据类型装配

    applicationContext.xml配置文件:使用自动装配,根据类型

    值得注意的是:如果使用了根据类型来自动装配,那么在IOC容器中只能有一个这样的类型,否则就会报错!

       <bean id="userDao" class="UserDao"/>
       <!--
           1.通过类型来自动装配
           2.发现userService中有个UserDao类型的属性
           3.看看IOC容器中UserDao类型的对象
           4.如果有,就装配进去
       -->
       <bean id="userService" class="UserService" autowire="byType"/>

    设置全局自动装配

    <beans>声明的最后添加 default-autowire="byName"

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="..."
          xsi:schemaLocation="..."
          default-autowire="byName">

    使用注解自动装配

    @Autowired注解来实现自动装配:

    • 可以在 成员变量(不用写setter方法)、构造器、setter方法 上修饰

    • 如果没有匹配到bean(或允许为null),又为了避免异常的出现,我们可以设置required属性为false @Autowired(required=false)

    • J2EE的@Resource和@AutoWired有相同的功能,区别如下:

      • @Resource默认按byName装配,可以设置属性来选择使用name 或者 type 装配

      • @AutoWired默认按byType装配,如果想使用name装配,结合@Qualifier注解使用

      @Autowired 
      @Qualifier ( "baseDao" )

     

  • 相关阅读:
    【转】JAVA内存泄露分析和解决方案及WINDOWS自带查看工具
    windows 下面获得pid
    几个工具的收藏
    转-springboot2新版升级springcloud微服务实战Consul+sleuth+zipkin+Feign/Ribbon+Config+Zuul+Hystrix+Turbine
    【转】windows+gitlab配置ssh key
    telnet端口不通
    layui后台框架的搭建
    用ffmpeg+nginx+海康威视网络摄像头rtsp在手机端和电脑端实现直播
    从零开始搭建基于CEFGlue的CB/S的winform项目
    WinForm使用CefSharp内嵌chrome浏览器
  • 原文地址:https://www.cnblogs.com/yjh1995/p/14164340.html
Copyright © 2011-2022 走看看