ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

课时4:特殊值的注入问题和各种类型的自动装配

2020-03-13 09:55:25  阅读:225  来源: 互联网

标签:装配 各种类型 课时 bean 自动 IStudentDao context 使用 属性


.1)特殊值的注入问题

<constructor-arg value="何邦柱" index="0"></constructor-arg>
<constructor-arg  index="1"><value>20</value></constructor-arg>

    1.1                使用子元素<value>注入                而使用value属性注入

       参数的位置            写在首尾标签<value></value>的中间(不加双引号)。   写在value的属性值中(必须加双引号)

       type属性             有(可选) 可以通过type属性指定数据类型。         无。

       参数值包含特殊字    两种处理方法:1.使用<![CDATA[ ]]标>记。        一种处理方法:即使用xml预定义的实体引用。

       符(<,&)时的处理方法。      2.使用xml预定义的实体引用。

    1.2 如何处理参数值包含特殊符号

      1.2.1 使用XML预定义的实体引用

  <bean id="Teacher" class="net.bdqn.hbz.pojo.Teacher">
<!--        <property name="teaName" value="何邦柱"></property>-->
<!--        <property name="teaAge" value="20"></property>-->
        <constructor-arg value="何邦柱&lt;&amp;" index="0"></constructor-arg>
        <constructor-arg  index="1">
            <value>20</value>
        </constructor-arg>
    </bean>

        1.2.1.1 &lt -----> <                                     &amp代表 --->&

      1.2.2 使用<![CDATA[ ]]标记

<!--    课程类-->
    <bean id="Scourse" class="net.bdqn.hbz.pojo.Scourse">
        <property name="CName" >
            <value>java<![CDATA[ >>>> ]]></value>
        </property>
        <property name="CHour" value="200"></property>
        <property name="teaCher" ref="Teacher"></property>
<!--        <constructor-arg value="java" index="0" name="cName" type="java.lang.String"></constructor-arg>-->
<!--        <constructor-arg value="200" index="1"></constructor-arg>-->
<!--        <constructor-arg ref="Teacher" index="2"></constructor-arg>-->
    </bean>

  2.constructor注入的特殊值处理与set注入是一样的

  3.如何处理null值以及""值

    3.1 给元素赋值null

<property name="CName" >
            <null/>
        </property>

    3.2 给元素赋值“”

    <property name="CName" >
            <value></value>
        </property>
或者
        <property name="CName" value="">
        </property>

.2)在定义ioc的前提:该bean的类必须要有无参构造

.3)自动装配(只适用于 ref类型):

  1.约定大于配置

  2.如何使用byName自动装配 byName的本质就是byId

   <bean id="Scourse" class="net.bdqn.hbz.pojo.Scourse" autowire="byName">
  </bean>

    2.1 自动寻找:其他bean的值id值=该类的属性名称

  3.如何使用byType自动装配

    <bean id="Scourse" class="net.bdqn.hbz.pojo.Scourse" autowire="byType">
</bean>

    3.1 自动寻找bean的class类型=该类的属性类型(注意:此种方式 必须满足:当ioc容器中 只能有一个Bean满足条件 )

  4.如何使用constructor自动装配

    <bean id="Scourse" class="net.bdqn.hbz.pojo.Scourse" autowire="constructor">
</bean>

    4.1 其他的bean的类型(class) 是否与 该Course类的构造方法参数的类型一致 ;本质上就是byType

  4.可以在头文件中一次性将该ioc容器的所有bean统一设置成自动装配

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
       default-autowire="byName"
>

    4.1 这虽然可以减少代码量 ,但是会降低可读性,使用时需要谨慎

.4)使用注解自定义bean:通过注解方式 将bean以及相应的属性值 放入ioc容器

  1.首先声明头部

    xmlns:context="http://www.springframework.org/schema/context"
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd"

   2.开始配置扫描器 (如果有多个包 使用逗号隔开)

<!--    配置扫描器 扫描注解形式的bean对象-->
    <context:component-scan base-package="net.bdqn.hbz.dao"/>

  3.声明注解类放入bean

@Component("IStudentDao")
public class IStudentDao {
    public Integer addStudent(Student student){
        System.out.println("你好......我是何邦柱");
        return 1;
    }

  4.@Component("IStudentDao)范围太大了 可以细化:

    4.1 dao层使用:@Repository("IStudentDao")

    4.2 service层使用:@Service("IStudentDao")

    4.3 控制层使用:@Controller("IStudentDao")

 

 

标签:装配,各种类型,课时,bean,自动,IStudentDao,context,使用,属性
来源: https://www.cnblogs.com/thisHBZ/p/12484542.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有