spring:按照Bean的名称自动装配User

本实例将介绍如何按照Bean 的名称自动装配 User 对象!

<bean> 元素的 autowire 属性负责自动装配 <bean> 标签,定义 JavaBean 的属性。这样做可以省去很多配置 JavaBean 属性的标签代码,使代码更整洁、美观;

但是也有负面影响:使用自动装配之后,无法从配置文件中读懂 JavaBean 需要什么属性。

1.编写User 对象,代码如下:

package com.importnew;

public class User {
    private String name="test";
    private String sex="男";
    private int age=29;
    private String tel="123456789";

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getTel() {
        return tel;
    }
    public void setTel(String tel) {
        this.tel = tel;
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", sex=" + sex + ", age=" + age
                + ", tel=" + tel + "]";
    }

}

2.定义 Bean (TestUtil),将 User 对象注入到 TestUtil 对象中。代码如下:

package com.importnew;
  public class TestUtil {

      private User user;

      public User getUser() {
          return user;
      }
      public void setUser(User user) {
          this.user = user;
      }
}

3.在 Spring 的配置文件 applicationContext.xml 中设置 Bean 的自动装配,Spring 将根据 Bean 中的属性名称自动将 User 对象注入到指定的 Bean 中。代码如下;

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

     <bean id="user" class="com.importnew.User" />

     <bean autowire="byName" id="testUtil" class="com.importnew.TestUtil"  />

</beans>

4.编写测试类 TestSpring ,代码如下:

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.importnew.TestUtil;
import com.importnew.User;

public class TestSpring {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TestUtil testUtil = (TestUtil) context.getBean("testUtil");
        User user = testUtil.getUser();
        System.out.println(user.getAge());
        System.out.println(user.getName());
    }
}

———————————————————————————————————————————————————

备注:

1.按 Bean 名称自动装配存在的问题。

按照 Bean 名称自动装配存在错误装配 JavaBean 的可能,如果配置文件中定义了与需要自动装配的 JavaBean 的名称相同而类型不同的 JavaBean ,则会错误的注入不同类型的 JavaBean。

2.若将配置文件中的 autowire=“byName” 改成 "byType" ,则可以实现按照 Bean 的类型自动装配 User 。实际配置文件中的代码如下:

  <bean autowire="byType"  id="testUtil" class="com.importnew.TestUtil"  />

3.关于 byName 与 byType 两者之间的区别:

  byName 通过 Bean 的名称自动装配。如果一个 Bean 的 name  和另外一个 Bean 的 name 相同,就自动装配。  byType 通过 Bean 的属性类型自动自动装配。如果一个 Bean 的属性类型和另一个 Bean 的属性类型兼容,就自动装配。

4.无论是按照 Bean 的类型,还是按照 Bean 的名称,自动装配有时候都会出现无法自动装配的情况。例如在配置文件中再添加一个 User 类的实现对象,byType 自动装配类型会因为无法自动识别装配那一个JavaBean 而抛出 org.springframework.beans.factory.UnsatisfiedDependencyException 异常。要解决此类问题,只能通过混合使用手动装配来指定装配哪个 JavaBean 。

////end

时间: 2024-11-06 10:55:52

spring:按照Bean的名称自动装配User的相关文章

Spring系列【10】按照Bean的名称自动装配

User.java 1 package com.lh.entity; 2 3 public class User { 4 private String name = "test"; //用户姓名 5 private Integer age = 27; //年龄 6 private String sex = "男"; //性别 7 public String getName() { 8 return name; 9 } 10 @Override 11 public S

Spring4-自动装配Beans-按属性名称自动装配

1.创建Maven项目,项目名称springdemo15,如图所示 2.配置Maven,修改项目中的pom.xml文件,修改内容如下 <project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

Spring Boot(三)自动装配

@Configuration和@Bean Spring提供了注解@Configuration和@Bean注解用来配置多个Bean,在以前的Spring项目中可以通过xml的方式配置: <beans> <bean id=”xxxBean” class="aaa.bbb.xxxBean"></bean> </beans> 采用Configuration注解的方式如下: //@SpringBootConfiguration @Configura

隐式的bean发现与自动装配机制

使用beans.xml文件进行bean的创建和注入通常是可行的,但在便利性上Spring提供了更简单的方法--自动装配 接下来我们假设一个场景:我有若干播放器(MediaPlayer{CD播放器/MP3}),我也有很多媒体文件例如(CompactDisc{CD光盘/MP3文件}). 现在,我们需要创建两个接口MediaPlayer/CompactDisc,然后创建他们的实现CDPlayer/CompactDisc_zhoujielun.注意:CompactDisc_zhoujielun是周杰伦的

Spring中@Autowired注解与自动装配

1 使用配置文件的方法来完成自动装配我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法.比如:Boss 拥有 Office 和 Car 类型的两个属性:public class Boss { private Car car; private Office office; // 省略 get/setter @Override public String toString() { retu

Spring IOC容器-自动装配

1 autowire="byName" 根据名称自动装配,自动去IOC容器中找与属性名同名的引用的对象,并自动注入. <!-- ###############自动装配############### --> <bean id="userDao" class="d_auto.UserDao"></bean> <bean id="userService" class="d_auto

spring bean的作用域和自动装配

1 Bean的作用域 l  singleton单列:整个容器中只有一个对象实例,每次去访问都是访问同一个对象  默认是单列 l  prototype原型: 每次获取bean都产生一个新的对象,比如Action l  request:每次请求时创建一个新的对象 l  session:在会话的范围内是一个对象,http那个session l  global session:只在portlet下有用,表示application l  application:在应用范围内有效 注意:配置action的时

Spring - bean的autowire属性(自动装配)

当我们要往一个bean的某个属性里注入另外一个bean,我们会使用<property> + <ref/>标签的形式.但是对于大型项目,假设有一个bean A被多个bean引用注入,如果A的id因为某种原因修改了,那么所有引用了A的bean的<ref/>标签内容都得修改,这时候如果使用autowire="byType",那么引用了A的bean就完全不用修改了.autowire到底都什么用?我们继续往下看. autowire的用法: <bean i

Spring -- Bean自动装配&amp;Bean之间关系&amp;Bean的作用域

Bean的自动装配 Spring IOC 容器可以自动装配 Bean. 需要做的仅仅是在 的 autowire 属性里指定自动装配的模式 有以下几种自动装配的类型: byType(根据类型自动装配): 若 IOC 容器中有多个与目标 Bean 类型一致的 Bean. 在这种情况下, Spring 将无法判定哪个 Bean 最合适该属性, 所以不能执行自动装配. byName(根据名称自动装配): 必须将目标 Bean 的名称和属性名设置的完全相同. constructor(通过构造器自动装配):