Spring之DI(对象自动注入)

正常对象属性的注入DI
		<bean name="" class="">
			<property name="" value="">
				<value></value>
			</property>
			<contructor-arg name="" value="" type="">
				<value></value>
			</constructor-arg>
		</bean>
	产生一些特殊的值
		赋值的过程中是一个null对象	null对象  "null"
		value="null"------>"null" String类型 其他类型不可以
		<null></null>----->null对象
		String类型带有特殊符号	<zzt~>
		使用<value><![CDATA[内容]]></value>标签 标签内部<![CDATA[内容]]>

	对象中的属性可能是另一个对象	聚合关系
		<bean name="x" ref=""></bean>
		<bean>
			<property name="" >
				<bean>
			<>
		</bean>
		如果想要让属性不被别人访问
		可以采用内部bean的写法
			Room
			Computer   brand属性
			room.computer.brand

	========================================================================

	对象的自动装配	DI
		装配的方式---对象中的那个属性对象赋值
		1.构造方法
			<bean name="controller" class="controller.StudentController" autowire="constructor"></bean>
		2.set方法
			<bean name="controller" class="controller.StudentController" autowire="byName/byType"></bean>
			byName的方式  bean对象中的属性名与另一个bean对象的name或id一致即可
			byType的方式  bean对象中的属性类型与另一个bean对象的class类型一致

			以前默认的bean管理机制
			默认情况下bean是单例的 通过scope="prototype"
			多个对象之间对应的问题 采用内部bean方式 手动指定

		3.如果对象中的属性是抽象类、接口类型
			属性是没有办法直接创建对象赋值
			属性赋值一定是子类(不止一个可以啦)
			
			a.利用是构造方法方式自动装配
				先按照类型匹配  刚好就一个 直接赋值
				如果类型发现不止一个对应   再按照属性名与bean的name或id匹配 成功匹配 就赋值
			b.利用无参数构造方法+set方法进行自动装配
				byName形式  按照名字进行找寻 找不到就没有 找到就装配
				byType形式  如果有两个以上对应的类型 标签配置时直接报错 采用内部形式 ref自己指定的形式
			
		4.属性是集合
			Room
				Computer[]
				List<Computer>
				Set<>
				Map

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--通过属性对应的set方法做自动DI-->
    <!--<bean name="student" class="domain.Student">-->
        <!--<property name="sid" value="1"></property>-->
        <!--<property name="sname">-->
            <!--<value type="java.lang.String">zzt</value>-->
        <!--</property>-->
        <!--<property name="ssex" value="18"></property>-->
        <!--<property name="sage" value="18"></property>-->
    <!--</bean>-->

    <!--通过带参数的构造方法 给属性赋值-->
    <!--<bean name="student" class="domain.Student">-->
        <!--<constructor-arg name="sid" value="1" type="java.lang.Integer"></constructor-arg>-->
        <!--<constructor-arg name="sname" value="1" type="java.lang.String"></constructor-arg>-->
        <!--<constructor-arg name="ssex" type="java.lang.String">-->
            <!--<value></value>-->
        <!--</constructor-arg>-->
        <!--<constructor-arg name="sage" value="18" ></constructor-arg>-->
    <!--</bean>-->

    <!--==================================================================-->

    <!--以下讲了一些特殊情况 比如null 比如特殊符号 等-->
    <!--<bean name="student" class="domain.Student">-->
        <!--<constructor-arg name="sid" value="1"></constructor-arg>-->
        <!--<constructor-arg name="sname">-->
            <!--<value><![CDATA[<zzt~>]]></value>-->
        <!--</constructor-arg>-->
        <!--<constructor-arg name="ssex" value="男"></constructor-arg>-->
        <!--<constructor-arg name="sage" value="18"></constructor-arg>-->
    <!--</bean>-->

    <!--<bean name="student" class="domain.Student">-->
        <!--<property name="sid" value="1"></property>-->
        <!--<property name="sname">-->
            <!--<value><![CDATA[]]></value>-->
        <!--</property>-->
    <!--</bean>-->

    <!--=====================================================================-->


    <!--<bean name="room" class="domain.Room">-->
        <!--<property name="name" value="001"></property>-->
        <!--<property name="computer"><bean name="computer" class="domain.Computer"></bean></property>-->
        <!--<property name="computer.brand" value="联想"></property>-->
        <!--<property name="computer.name" value="S5"></property>-->
        <!--<property name="computer.price" value="7000"></property>-->
    <!--</bean>-->

    <!--===============================================================================-->

    <!--<bean name="controller" class="controller.StudentController" autowire="constructor"></bean>-->
    <!--<bean name="service" class="service.StudentService" autowire="constructor"></bean>-->
    <!--<bean name="dao" class="dao.StudentDao"></bean>-->

    <!-- 某一个bean中的属性名 对应 另一个bean的name或者id名 -->
    <!--<bean name="dao" class="dao.StudentDao"></bean>-->
    <!--<bean name="service" class="service.StudentService" autowire="byType"></bean>-->
    <!--<bean name="controller" class="controller.StudentController" autowire="byType"></bean>-->


    <!--接口的bean属性-->
    <bean name="ti" class="testinterface.ImplA"></bean>
    <bean name="tiB" class="testinterface.ImplB"></bean>
    <bean name="testService" class="testinterface.TestService" autowire="byName"></bean>


</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值