`

(转)简单理解Spring的自动装配(byName;byType)

 
阅读更多
Spring的自动装配(byName;byType)    好处:大幅度减少Spring配置
   坏处:依赖不能明确管理,可能会有多个bean同时符合注入规则。没有清晰的依赖关系。
          1,byName  根据属性名自动装配。此选项将检查容器并根据名字查找
                                  与属性完全一致的bean,并将其与属性自动装配。
            2,byType   如果容器中存在一个与指定属性类型相同的bean,那么将与
                                  该属性自动装配;如果存在多个该类型bean,那么抛出异常,
                                  并指出不能使用byType方式进行自动装配;如果没有找
                                  到相匹配的bean,则什么事都不发生,也可以通过设置
看代码:
UserDAO的实现类 有一个属性daoId
public class UserDAOImpl implements UserDAO {
private int daoId;
public int getDaoId() {
  return daoId;
}
public void setDaoId(int daoId) {
  this.daoId = daoId;
}
public void save(User user) {
  System.out.println("user saved!");
}
@Override
public String toString() {
  return "daoId=" + daoId;
}
}
UserService 依赖了UserDAO
public class UserService {

private UserDAO userDAO; 
public void add(User user) {
  userDAO.save(user);
}
public UserDAO getUserDAO() {
  return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
  this.userDAO = userDAO;
}

}
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-2.5.xsd"
          >
  <bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl">
   <property name="daoId" value="1"></property>
  </bean>
 
  <bean name="userDAO2" class="com.bjsxt.dao.impl.UserDAOImpl">
   <property name="daoId" value="2"></property>
  </bean>

  <bean id="userService" class="com.bjsxt.service.UserService"  autowire="byName"><!-- 这里的byName是按照属性名进行匹配 这里我们并没有注入UserDAO 但是你的UserService属性名称是UserDAO 所以就相当于 你注入了UserDAO-->
相当于这样  <property name="userDAO" ref="userDAO"/>
  </bean>
 
</beans>

测试:
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
 
 
  UserService service = (UserService)ctx.getBean("userService");
 
  System.out.println(service.getUserDAO());
打印出来是1 说明默认注入的是UserDAO
----------
改成byType的话 是按照类型自动装配 如果按照上面的写法 就把autowire="byType">  那么将会报错 因为你的UserDAO 和UserDAO1的类型是一样的 都是class="com.bjsxt.dao.impl.UserDAOImpl" 的

分享到:
评论

相关推荐

    spring中的自动装配实例byName、byType

    在Spring框架中,自动装配(Auto-Wiring)是一种简化依赖注入的方式,它允许Spring容器自动为bean找到并设置其依赖。本篇文章将深入探讨两种...理解并灵活运用byName和byType,可以帮助开发者更高效地利用Spring框架。

    Spring实现自动装配

    在学习自动装配的过程中,建议先从简单的基于类型的自动装配开始,然后逐步掌握基于注解的自动装配。理解每个bean如何被创建、初始化和装配,以及Spring如何处理这些过程,对于深入理解Spring框架至关重要。 本项目...

    spring自动装配例子

    (2)byName:根据属性 名 自动装配,设值注入 &lt;bean id="xxx" class="xxx" &gt;&lt;/bean&gt; (3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 &lt;bean class="xxx" &gt;&lt;/bean&gt; (4)constructor:与 ...

    spring自动装配

    Spring自动装配提供了几种模式来处理这些依赖,如`byName`、`byType`、`constructor`、`autodetect`和`default`。这些模式帮助Spring容器识别并注入合适的依赖。 - `byName`模式:根据属性名寻找匹配的Bean名称进行...

    Spring自动装配解析

    - byName:根据bean的属性名自动装配。如果bean的属性名为其他bean的id,那么Spring会尝试将这个bean注入。 - byType:根据属性的类型自动装配。Spring会查找与该属性类型匹配的bean,并将其注入。 - constructor:...

    spring自动装配项目struts2

    Spring提供了多种自动装配方式,如byType、byName等,可以根据配置或注解来实现。在项目中,通过配置Spring的bean定义,或者使用@Autowired注解,我们可以让Spring自动为我们的bean注入所需的依赖,简化了代码并增强...

    Java注解机制之Spring自动装配实现原理详解

    其中,byName是指根据Bean对象的名称来进行自动装配,byType是指根据Bean对象的类型来进行自动装配,constructor是指使用构造方法来进行自动装配,autodetect是指自动选择byType或constructor的自动装配方式,no是指...

    Spring 自动装配及其注解

    在Spring框架中,自动装配...理解并熟练掌握自动装配的原理和注解,能够更好地利用Spring框架的优势,构建更加灵活和可维护的Java应用。在实际使用中,应根据项目需求和bean的关系选择合适的装配策略,以达到最佳效果。

    Spring自动装配模式表

    本文将详细介绍Spring框架中的五种自动装配模式:`no`、`byName`、`byType`、`constructor`以及`autodetect`,帮助开发者更好地理解和应用这些模式。 #### 二、自动装配模式概览 自动装配是指Spring容器根据一定的...

    Spring的自动装配源代码

    本文将深入探讨Spring中的六种自动装配方式:byType、byName、no、constructor、autodetect和default。 1. byType(按类型装配) 当Spring容器在配置文件中找不到明确的通过`ref`属性指定的依赖时,会尝试通过类型...

    第五章 Spring4 自动装配、方法注入

    Spring提供了多种自动装配模式,如byName、byType、constructor、autodetect等。byName是根据属性名匹配bean的id,byType则是根据属性类型匹配bean的类型。constructor和autodetect则分别处理构造函数参数和属性的...

    spring学习之四“自动装配”

    1. **byName**:基于bean的名称进行自动装配。当Spring容器在bean的属性上发现@Autowired注解时,如果没有指定qualifier,那么Spring会尝试找到一个与该属性名称相同的bean来注入。 2. **byType**:基于bean的类型...

    Spring中自动装配的4种方式

    byName 自动装配是指通过设置 property 标签的 autowire 属性为 byName,Spring 将自动寻找一个与该属性名称相同或 id 相同的 Bean,注入进来。例如: ```xml &lt;property name="driverClassName" value=...

    Spring自动装配Bean实现过程详解

    默认情况下,配置文件中需要通过ref装配Bean,但设置了autowire="byName",Spring会在配置文件中自动寻找与属性名字personDao相同的bean,找到后,通过调用setPersonDao(PersonDao personDao)方法将id为personDao的...

    第四章示例代码__自动装配

    1. **byName**:Spring会查找与bean属性名称相匹配的bean,并将其注入。例如,如果有一个名为`dataSource`的属性,Spring将尝试找到一个名为`dataSource`的bean进行装配。 2. **byType**:Spring会查找与bean属性...

    pring自动装配方式介绍共2页.pdf.zip

    1. **byName**:基于Bean名称的自动装配。Spring会查找与当前Bean属性名相同的其他Bean,并将其注入。例如,如果一个Bean有一个名为`dataSource`的属性,Spring会尝试找到一个名字为`dataSource`的Bean来注入。 2. ...

    彻底搞明白Spring中的自动装配和Autowired注解的使用

    在 Spring 中,自动装配是通过 AutowireCapableBeanFactory 接口来实现的,该接口定义了四种自动装配策略:byName、byType、constructor 和 AUTOWIRE_AUTODETECT(已被弃用)。 1. byName 自动装配 byName 自动...

    JSP Spring 自动化装配Bean实例详解

    - **按名称装配(byName)**:Spring容器查找与依赖对象属性名称相同ID的Bean,并将其注入到该属性中。 - **构造器装配(constructor)**:通过Bean的构造器来实现自动装配,必须保证每个构造参数的类型都有一个唯一...

    Spring自动装配与扫描注解代码详解

    * byName:使用需要注入的属性对应的set方法名字和Spring容器中的对象的id进行匹配,如果能匹配上,进行自动注入。 * byType:使用需要注入的属性对应的set方法参数类型和Spring容器中的对象的类型进行匹配,如果能...

Global site tag (gtag.js) - Google Analytics