精华内容
下载资源
问答
  • byType。然后,如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配,它将尝试匹配和连接它的属性。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。 在配置文件中,如果一个 bean 定义...

    Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType。然后,如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配,它将尝试匹配和连接它的属性。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。

    在配置文件中,如果一个 bean 定义设置为自动装配 byType,并且它包含 SpellChecker 类型的 spellChecker 属性,那么 Spring 就会查找定义名为 SpellChecker 的 bean,并且用它来设置这个属性。你仍然可以使用 标签连接其余属性。

    看个例子:

    TextEditor:

    
    public class TextEditor {
    
    private SpellChecker spellChecker;
    
    private String name;
    
    public void setSpellChecker( SpellChecker spellChecker ) {
    
    this.spellChecker = spellChecker;
    
    }
    
    public SpellChecker getSpellChecker() {
    
    return spellChecker;
    
    }
    
    public void setName(String name) {
    
    this.name = name;
    
    }
    
    public String getName() {
    
    return name;
    
    }
    
    public void spellCheck() {
    
    spellChecker.checkSpelling();
    
    }
    
    }
    
    

    正常情况下beans.xml里的显式装配:

    采用by Name自动装配的beans.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-3.0.xsd">
    
    <!-- Definition for textEditor bean -->
    
    <bean id="textEditor" class="com.sap.TextEditor"
    
    autowire="byType">
    
    <property name="name" value="Generic Text Editor" />
    
    </bean>
    
    <!-- Definition for spellChecker bean -->
    
    <bean id="SpellChecker" class="com.sap.SpellChecker">
    
    </bean>
    
    </beans>
    
    

    可以看到,在by Type自动装配模式下,beans.xml里的spellChecker bean的ID可以随便取,因为这个属性是为by Name装配模式服务的,在by Type模式下忽略。

    展开全文
  • byType讲解

    2011-04-19 21:35:00
    如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check=...

     

     
    容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。
    xml 中文件的配置如下:
     
    < bean id="GreetingServliceImpl" class="com.csdn.service.GreetingServliceImpl"
           autowire="byType">
           < property name="say" value="hello"></property>
        </ bean >
    完整案例:
    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 id="student" class="com.csdn.bean.Student">
        < property name="name"><value> 朱磊 </ value ></ property >
        </ bean >
        < bean id="GreetingServliceImpl" class="com.csdn.service.GrtieengServliceImpl"
           autowire="byType">
           < property name="say" value="hello"></property>
        </ bean >
    </ beans >
    Student 中为:
    package com.csdn.bean;
     
    public class Student {
        private String name ;
     
     
        public void setName(String name) {
           this . name = name;
        }
     
    }
    GrtieengServliceImpl 中为:
    package com.csdn.service;
     
    import com.csdn.bean.Student;
     
    public class GreetingServliceImpl implements GreetingServlice {
        private String say ;
     
        @Override
        public void say() {
           System. out .println( " 这是我说的话 " + say );
        }
     
        public void setSay(String say) {
           this . say = say;
        }
     
        private Student student ;
     
        public void setStudent(Student student) {
           this . student = student;
        }
    }
    值得注意的是:自动装配指的是装配 bean 的值而不是属性值,网上很多文章都有错误我特意的查了查资料。还有就是而该 bean 包含 student 属性(同时必须提供 setStudent(..) 方法), byType 根据 set 依赖注入的。

    如果xml文件中包括多个

    相容类型的 bean 利用 byType 会出错。(这里说的相同类型包括,如类 B 继承类 A ,如果 bean 中定义了类 A 和类 B 都会出错)错误如下。
       org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ' 类名 ' defined in file
     
    展开全文
  • Spring中的byName与byType

    2021-07-08 13:21:22
    Spring注入中byType和byName的总结 1.首先,区分清楚什么是byType,什么是byName。 比如说如上这段代码,byName就是通过Bean的id或者name,byType就是按Bean的Class的类型。 若autowire="byType"意思是通过 ...

    Spring注入中byType和byName的总结

    1.首先,区分清楚什么是byType,什么是byName。

    比如说如上这段代码,byName就是通过Bean的id或者name,byType就是按Bean的Class的类型。
    若autowire="byType"意思是通过 class="cn.com.bochy.dao.impl.UserDaoImpl"来查找UserDaoImpl下所有的对象。
    代码autowire="byName"意思是通过id="userDao"来查找Bean中的userDao对象
     
    建议看 《Spring in Action》 第三章第一节,“自动装配 Bean 属性”
     
    在spring中@Autowired注入规则:
    1.@Autowired默认是按照byType进行注入的 
    二.spring注入的基本语法如下:
    xml中语法如下:
    如果是属性注入,需要为每一个依赖类创建相应的getter和setter方法。
    如果是构造方法注入,需要为依赖类创建相应的构造方法。
    属性注入的语法如下:

            
                  
             
    如例子:


    因为UserService依赖于UserDao,因此需要在userService中创建相应的getter和setter方法。

    展开全文
  • @Autowired注解到底是byType还是byName?

    万次阅读 多人点赞 2016-08-05 14:29:32
    @Autowired是spring的注解,默认使用的是byType的方式向Bean里面注入相应的Bean。例如: @Autowired private UserService userService; 这段代码会在初始化的时候,在spring容器中寻找一个类型为UserService的...

    网上的文章已经很多了,这里就不说太多废话,开门见山。

     

    @Autowired是spring的注解,默认使用的是byType的方式向Bean里面注入相应的Bean。例如:

    @Autowired
    private UserService userService;


    这段代码会在初始化的时候,在spring容器中寻找一个类型为UserService的bean实体注入,关联到userService的引入上。

     

    但是如果UserService这个接口存在多个实现类的时候,就会在spring注入的时候报错,具体如下:

     

    public class UserService1 implements UserService
    public class UserService2 implements UserService

    当存多个UserService的实现类时,错误信息如下:

     

    2016-08-05 14:53:53,795 ERROR [org.springframework.test.context.TestContextManager] - <Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@14a2f921] to prepare test instance [UserServiceTest@3c87521]>
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserServiceTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private yjc.demo.service.UserService UserServiceTest.userService; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [yjc.demo.service.UserService] is defined: expected single matching bean but found 2: userService1,userService2

    抛出了org.springframework.beans.factory.BeanCreationException,而原因是注入的时候发现有2个匹配的bean,但是不知道要注入哪一个:expected single matching bean but found 2: userService1,userService2

     

    那么如何应对多个实现类的场景呢,看一下代码:

     

    @Autowired
    private UserService userService1;
    @Autowired
    private UserService userService2;
    @Autowired
    @Qualifier(value = "userService2")
    private UserService userService3;
    
    
    @Test
    public void test(){
        System.out.println(userService1.getClass().toString());
        System.out.println(userService2.getClass().toString());
        System.out.println(userService3.getClass().toString());
    }

     

     

     

    运行结果:

    class yjc.demo.serviceImpl.UserService1
    class yjc.demo.serviceImpl.UserService2
    class yjc.demo.serviceImpl.UserService2

     

    运行结果成功,说明了2种处理多个实现类的方法:

    1.变量名用userService1,userService2,而不是userService。

    通常情况下@Autowired是通过byType的方法注入的,可是在多个实现类的时候,byType的方式不再是唯一,而需要通过byName的方式来注入,而这个name默认就是根据变量名来的。

     

    2.通过@Qualifier注解来指明使用哪一个实现类,实际上也是通过byName的方式实现。

     

    由此看来,@Autowired注解到底使用byType还是byName,其实是存在一定策略的,也就是有优先级。优先用byType,而后是byName。

    展开全文
  • 自动装配举例:byType

    2020-02-10 14:00:40
    * 通过byType自动装配进行注入 * * collaboratorBean 单个bean,在配置元数据中不能有多个同类型的bean,否则会出错 * set 集合,将多个同类性的bean注入这个集合(array)中 */ public class Dependent { ...
  • 文章目录1.ByName和ByType的总结2.demo1 ByName案例3.demo2 ByType案例参考文章 1.ByName和ByType的总结 ByName:需要保证 beans.xml 中所有bean 的 id 唯一,并且 这个 bean 的 id 要和 自己对象中 set函数后面的值...
  • 转载自 Spring 自动装配 ‘byType’ Spring 自动装配 ‘byType’ 这种模式由属性类型指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType。然后,如果它的 type ...
  • Spring 自动装配 `byType`

    2019-04-13 19:53:09
    Spring 自动装配 byType 这种模式由属性类型指定自动装配。 Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType。然后,如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配,它...
  • Spring 中的注入分为byType和byName 俩种方式下面一起来了解下 <bean id="userServiceImpl" class="cn.com.bochy.service.impl.UserServiceImpl" autowire="byName"> </bean> <bean id=...
  • @Autowired是spring的注解,默认使用的是byType的方式向Bean里面注入相应的Bean。例如: @Autowiredprivate UserService userService;这段代码会在初始化的时候,在spring容器中寻找一个类型为UserService的bean...
  • autowire可选值:byType | byName(只介绍这两种) byName:由属性名自动装配 byType:由属性的数据类型自动装配 代码如下: Car.java: public class Car extends CarExtends { private Integer cid; private ...
  • 当我们学习spring时,一定遇到过一个问题,spring中自动装配注解Autowired到底是ByType还是ByName,当我们网络上搜索答案时,总会发现很多答案都是说的ByType,这里说说关于自己的看法。 当初学到这里的时候,自己也...
  • 以下内容引用自...Spring容器查看XML配置文件中将autowire属性设置为byType的bean。然后,如果它的类型与配置文件中的一个bean名称匹配,它将尝试匹配和...
  • spring自动注入中byName和byType 1,byName: 其实byName根据被注入的名称作为bean名称作为依赖查找,并将对象设置到该属性。(根据bean的id进行查找) 首先创建Student类: public class Student { private String...
  • @Autowired是byType还是byName

    千次阅读 2018-11-14 18:16:00
    假设以下场景,有一个接口UserService,一个实现类的时候是...1,默认是byType @Autowired private UserService userService; 如果只有一个实现类,不会报错; 如果有多个会报错; @Autowired private UserServi...
  • Spring的自动装配 byName和byType的区别

    千次阅读 2019-04-20 13:43:24
    Spring的自动装配 好处:大幅度减少Spring配置 坏处:依赖不能明确管理,可能会有多个bean同时符合注入规则,没有清晰的依赖关系。...byType:如果容器中存在一个与指定属性类型相同的bean,那么将...
  • 自动装配之byType

    2011-04-24 21:15:50
    自动装配之byType byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,...
  • byType–>byName 1.根据Type从spring容器中找到多个Bean 2.判断是不是isAutowireCandidate @Bean public OrderService orderService1() { return new OrderService(); } @Bean(autowiredCandidate = false)/...
  • 上篇文章没写清楚,这篇文章一篇就可以明白什么是byName和byType,先看代码 package com.test; public class test4 { String name; public String getName() { return name; } public void setName(String ...
  • 主要区别 Autowire modes no 默认不开启 ...根据被注入属性的名称作为 Bean 名称作为依赖查找,并将...特殊 byType 类型,用于构造器参数 我直接上例子让大家有一个直观的认识。 我们首先构造一个 model pub...
  • 3、第二种方式是使用byType的方式配置bean文件 4、实际编程的过程中,必须要使用多个配置文件,这可以避免竞争 第一种方式是分别写配置文件,然后用一个总的配置文件将他们引入 分配置文件 分配置...
  • Spring的依赖注入和自动装配(byName、byType) 1、概念 1.1依赖注入:又可以叫做控制反转, 即将初始化的控制权交给他人(Spring容器)。 2、文件位置截图 3、代码 3.1、要点说明: 注意:在实体类中要有相应的...
  • Spring的@Autowired这个注解是先bytype再byname,通过源码分析可以知道,spring中的属性填充是通过populateBean这个方法完成(后期有时间补充一下spring中的属性填充流程),spring中初始化bean是不管属性,先将bean ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,212
精华内容 9,684
关键字:

byType