Spring--5.bean管理 依赖注入(xml)

1       java属性注入(三种方式)

 

       属性注入:创建对象时候,向类里面属性里面设置值

 

 java属性注入的方式介绍(三种方式)

(1)使用set方法注入

(2)使用有参数构造注入

(3)使用接口注入(不用)

 

3 在spring框架里面,支持前两种方式

(1)set方法注入(重点)

(2)有参数构造注入

 

2       Spring的属性注入

2.1  使用有参数构造注入属性

public classPropertyDemo1 {
 
   private String username;
 
   public PropertyDemo1(Stringusername) {
      this.username = username;
   }
  
   public void test1() {
      System.out.println("demo1.........."+username);
   }
}

2.1.1      参数的名字(重点)—name

<!-- 使用有参数构造注入属性 -->
   <bean id="demo" class="spring.property.PropertyDemo1">
      <!-- 使用有参构造注入 -->
      <constructor-arg name="username" value="小王小马"></constructor-arg>
   </bean> 

2.1.2      索引—index

       根据索引赋值,索引都是以0开头的:

<bean          
id="memberBean"class="spring.property.Book">
         <constructor-arg index="0"value="刘晓刚" />
         <constructor-arg index="1"value="3500"/>
         <constructor-arg index="2"ref="dept"/>
         <constructor-arg index="3"value="男" />
   </bean>
 

2.1.3      类型—type

       这种方法基本上不怎么适用,因为一个类里可以有好几个相同基本类型的变量,很容易就混淆值传给哪一个参数了所以做好不要使用这种方法:

<bean>
    <constructor-arg type="Java.lang.String"value="刘晓刚"
         <constructor-arg type="java.lang.Double"value="3500" />
         <constructor-arg type="www.csdn.spring01.constructor.Dept"ref="dept"/>
         <constructor-arg type="java.lang.String"value="男" />
   </bean>        

2.1.4      直接传值

       直接给参数赋值,这种方法也是根据顺序排的,所以一旦调换位置的话,就会出现bug,这种方法已经很原始了

<bean>
	 <constructor-arg  value="刘晓刚" />
         <constructor-arg  value="3500" />
         <constructor-arg  ref="dept"/>
         <constructor-arg  value="男" />
</bean>

<bean id="dept" class="www.csdn.spring01.constructor.Dept" >
  <property name="dname" value="北航"/>
  <property name="deptno" value="00001"/>
</bean>

2.2  使用set方法注入属性(重点)

public classBook {
 
   private String bookname;
   //set方法
   public void setBookname(Stringbookname) {
      this.bookname = bookname;
   }
  
   public void demobook() {
      System.out.println("book..........."+bookname);
   }
}

 <!-- 使用set方法注入属性 -->
   <bean id="book" class="spring.property.Book">
      <!-- 注入属性值
         name属性值:类里面定义的属性名称
         value属性:设置具体的值    -->
      <property name="bookname" value="易筋经"></property>
   </bean>

3       注入类型

3.1  对象类型属性(重点)

1 创建service类和dao类

       在service得到dao对象;service里面得到dao类对象,才能调用dao里面的方法

 

2 具体实现过程

(1)在service里面把dao作为类型属性

(2)生成dao类型属性的set方法

(3)配置文件中注入关系

<!-- 注入对象类型属性 -->
   <!-- 1 配置dao对象 -->
   <bean id="userDao" class="spring.dao.UserDao"></bean>
  
   <!-- 2配置service -->
   <bean id="userService" class="spring.sevrvice.UserService">
      <!-- 注入dao对象
         name属性值:service类里面属性名称
                                                现在不要写value属性,因为刚才是字符串,现在是对象
         写ref属性:dao配置bean标签中id值    -->
      <property name="userDao" ref="userDao"></property>
   </bean>

 

3.2  null 值和级联属性

可以使用专用的<null/> 元素标签为 Bean 的字符串或其它对象类型的属性注入 null 值

和 Struts、Hiberante 等框架一样,Spring 支持级联属性的配置。

 

<null/>意义不大,

 

<bean id="car"class=" spring.beans.Car">
        <property name="brand" value="BMW"/>
        <property name="color" value="Black"/>
        <property name="price" value="800000"/>
        <property name="maxSpeed" value="200"/>
    </bean>
   
 
<!-- 级联属性 -->
    <bean id= "person3"class = "spring.beans.Person" >
       <constructor-arg value= "杰瑞"></constructor-arg>
       <constructor-arg value= "25"></constructor-arg>
       <constructor-arg ref="car"></constructor-arg>
           <!-- 为级联属性赋值,注意:属性必须先初始化后,才可以为级联属性赋值,否则会异常 -->
           <property name="car.maxSpeed" value="300"></property>
    </bean>

 

3.3  复杂类型属性

1 数组

2 list集合

3 map集合

4properties类型

<!-- 注入复杂类型属性值 -->
   <bean id="person" class="spring.property.Person">
      <!-- 数组 -->
      <property name="arrs">
         <list>
            <value>小王</value>
            <value>小马</value>
            <value>小宋</value>
         </list>
      </property>
 <!-- list -->
      <property name="list">
         <list>
            <value>小奥</value>
            <value>小金</value>
            <value>小普</value>
         </list>        
      </property>
 <!-- map -->
      <property name="map">
         <map>
            <entry key="aa" value="lucy"></entry>
            <entry key="bb" value="mary"></entry>
            <entry key="cc" value="tom"></entry>
         </map>
      </property>
<!-- properties -->
	<property name="properties">
		<props>
			<prop key="driverclass">com.mysql.jdbc.Driver</prop>
			<prop key="username">root</prop>
		</props>
	</property>
   </bean>

 

4       注入类型简化--P名称空间


pname为对象属性

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'deptServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptMapper' defined in file [D:\WorkSpace\work13\djd_server\target\classes\com\jiading\djd\mapper\DeptMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 40; 元素内容必须由格式正确的字符数据或标记组成。 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:893) ~[spring-beans-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) ~[spring-context-5.2.7.RELEASE.jar:5.2.7.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE] at com.jiading.djd.DjdApplication.main(DjdApplication.java:14) [classes/:na]报错了
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值