zoukankan      html  css  js  c++  java
  • Spring实践第四天(基于xml实现bean的自动装配)

    如下图,昨天已经进行过依赖注入,

     今天的项目实践如果看不懂就请参考我昨天实践写的博文:

    Spring实践第三天 (SpringDI:依赖注入)

    1.什么是自动装配?

    自动装配即无需配置类之间的依赖关系!

    基于xml实现bean的自动装配,也就是红框里对依赖的手动配置都要删掉不要了。

    2.怎样自动装配?(原理)

    依赖注入方式:手动装配和自动装配

    (1)手动装配:一般通过配置xml文件来完成关系装配,比如构造方法,setter方法

    (2)自动装配:

    • byType:按类型装配
    • byName:按名称装配,需要一个setter方法
    <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="byName">

    首先要在applicationContext.xml配置文件中指明autowire的属性(即自动装配的方法)

    其次在UserService接口的实现类UserServiceImpl中添加对应的setter或constructor!

     看不懂没关系,下面我们开始举例进行自动装配!

    一、xml实现bean自动装配的三种方式

    1.constructor

    首先applicationContext.xml改为:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
        <!-- Spring配置依赖关系,两种方法任选其一 -->
        <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="constructor">
            <!--第一种方式:setter方法-->
            <!--<property name="userDao" ref="UserDao"/>-->
            <!--第二种方式-->
            <!--<constructor-arg name="userDao" ref="UserDao"/>-->
        </bean>
    
        <bean id="UserDao" class="com.nenu.dao.impl.UserDaoImpl"/>
    
    </beans>

    其次在UserServiceImpl中添加constructor方法,即:

        public UserServiceImpl(){}

    进行测试:

    成功!!!

    2.byType

    首先applicationContext.xml改为:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
        <!-- Spring配置依赖关系,两种方法任选其一 -->
        <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="byType">
            <!--第一种方式:setter方法-->
            <!--<property name="userDao" ref="UserDao"/>-->
            <!--第二种方式-->
            <!--<constructor-arg name="userDao" ref="UserDao"/>-->
        </bean>
    
        <bean id="UserDao" class="com.nenu.dao.impl.UserDaoImpl"/>
    
    </beans>

    其次在UserServiceImpl中添加setter方法,即:

    
    
    //这是一个setter方法,设置userDao属性的值
    public void setUserDao(UserDaoImpl userDao) {
    this.userDao = userDao;
    }

    测试:

    成功!!!

    3.byName

    首先applicationContext.xml改为:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
        <!-- Spring配置依赖关系,两种方法任选其一 -->
        <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="byName">
            <!--第一种方式:setter方法-->
            <!--<property name="userDao" ref="UserDao"/>-->
            <!--第二种方式-->
            <!--<constructor-arg name="userDao" ref="UserDao"/>-->
        </bean>
    
        <bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>
    
    </beans>

    PS:注意这里bean id从UserDao改为了userDao(大小写问题),为了与UserServiceImpl中的userDao对象名称对应

    其次在UserServiceImpl中添加setter方法,即:

    
    
    //这是一个setter方法,设置userDao属性的值
    public void setUserDao(UserDaoImpl userDao) {
    this.userDao = userDao;
    }

    测试:

    成功!!!

    4.实验

    那么byName和ByType有何区别?下面我们做两个实验:

    实验一:

     把UserDao的bean的配置删掉,发现这三种配置方式的测试结果不通过,显示空指针。

    也就是这句话:

    <bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>

    实验二:

      把setter方法的方法名修改掉,发现byName测试不通过,byType可以通过测试:

    也就是把setter方法改为:

        //这是一个setter方法,设置userDao属性的值
        public void setUserDao2(UserDaoImpl userDao) {
            this.userDao = userDao;
        }

    也就是byName找名称一样的,byType找类型符合的。

    二、如果xml文件中指定一种自动配置方式,就不需要挨个bean配置,只在beans标签中加入即可:

    例如加入default-autowire

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-autowire="byName">

    三、总结


     基于实现xml的bean的自动装配这个小知识点就到此为止啦hhh,小伙伴们有问题欢迎一起探讨!加油~

  • 相关阅读:
    MQTT Client软件-MQTTBox
    Eclipse
    Ant + ivy的安装
    常用消息中间件比较
    各种MQTT server功能比較
    消息中间件的对比
    RabbitMQ Performance Testing Tool 性能测试工具
    Eureka 简介
    win10 localhost 解析为::1 的解决办法
    JSP中过滤器的设置
  • 原文地址:https://www.cnblogs.com/yangf428/p/12297540.html
Copyright © 2011-2022 走看看