精华内容
下载资源
问答
  • 装配方式default
    2022-04-02 12:58:45

    no:这是 Spring 框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在 bean 定义中用标签明确的设置依赖关系。

    byName:该选项可以根据 bean 名称设置依赖关系。当向一个 bean 中自动装配一个属 性时,容器将根 据 bean 的名称自动在在配置文件中查询一个匹配的 bean。如果找到的 话,就装配这个属性,如果没找到的话 就报错。

    byType:该选项可以根据 bean 类型设置依赖关系。当向一个 bean 中自动装配一个属性时,容器将根据 bean 的类型自动在在配置文件中查询一个匹配的 bean。如果找到的话,就装配这个属性,如果没找到的话就报 错。

    constructor:造器的自动装配和 byType 模式类似,但是仅仅适用于与有构造器相同参数 的 bean,如果在 容器中没有找到与构造器参数类型一致的 bean,那么将会抛出异常。

    autodetect:该模式自动探测使用构造器自动装配或者 byType 自动装配。首先,首先会 尝试找合适的带 参数的构造器,如果找到的话就是用构造器自动装配,如果在 bean 内部没有找到相应的构造器或者是无参构造 器,容器就会自动选择 byTpe 的自动装配方式。

    更多相关内容
  • 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性。 先写两个类 public class UserServcie { private UserDao userDao; public UserServcie(UserDao userDao){} public ...

    当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性。

    先写两个类

    public class UserServcie {
    
        private UserDao userDao;
    
        public UserServcie(UserDao userDao){}
        public void setUserDao(UserDao userDao){
            this.userDao = userDao;
        }
        public UserDao getUserDao(){
            return userDao;
        }
    }
    
    public class UserDao {
    }

    例如:在UserServcie中注入UserDao需要显式的手动装配

    <bean id="userDao" class="com.beans.UserDao"></bean>
    <bean id="userService" class="com.beans.UserServcie">
       <property name="userDao" ref="userDao"></property>
    </bean>

    这种写法会是开发效率变慢。

    因此出现了spring的自动装配方式:五种自动装配方式 no、byName、byType、constructor、default。

    1、no:当使用autowire="no"时,不使用自动装配,依然需要手动装配,需要显式指定某个bean的引用。

    <bean id="userService" class="com.beans.UserServcie" autowire="no">
         <property name="userDao" ref="userDao"></property>
    </bean>

    2、byName:使用autowire="byName"装配方式时,就是使用名字装配,不需要显式指定某个bean的引用,此时使用的是setter方式注入。此时要注意需要被注入的bean的id和注入的bean的属性名之间的匹配,否则失败注入不成功。

     例如:UserService中需要注入UserDao, private UserDao userDao,当byName注入时,spring会在ioc容器中寻找id="userDao"的对象,找到注入成功,找不到注入失败。

    public class UserServcie {
    
        private UserDao userDao;
    
        public UserServcie(UserDao userDao){}
        public void setUserDao(UserDao userDao){
            this.userDao = userDao;
        }
        public UserDao getUserDao(){
            return userDao;
        }
    }

    此时的配置文件为

    <bean id="userDao" class="com.beans.UserDao"></bean>
    <bean id="userService" class="com.beans.UserServcie" autowire="byName"></bean>

    3、byType:使用autowire="byType"装配方式时,就是使用类型装配,不需要显式指定某个bean的引用,此时使用的是setter方式注入。此时需要注意ioc容器中不允许出现同一个类型的两个及以上个数量的实例,否则失败报异常。

    此时的配置文件为

    <bean id="userDao" class="com.beans.UserDao"></bean>
    <bean id="userService" class="com.beans.UserServcie" autowire="byType"></bean>

     4、constructor :使用autowire="constructor "装配方式时,默认也是使用byType方式装配,只是不同的是按照构造器参数的类型进行装配,构造器方式注入。

    <bean id="userDao" class="com.beans.UserDao"></bean>
    <bean id="userService" class="com.beans.UserServcie" autowire="constructor"></bean>

    5、default: 使用autowire="default"装配方式时,是使用父级标签的默认装配方式,我们这里也就是指<bean/>的父级标签<beans>的默认装配方式进行装配。例如:

    <beans default-autowire="byType" 
           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.xsd">
    
        <bean id="userDao" class="com.beans.UserDao"></bean>
        <bean id="userService1" class="com.beans.UserServcie" autowire="default"></bean>
    
        <bean id="userService2" class="com.beans.UserServcie" autowire="byName"></bean>
    </beans>

    这里beans标签使用的是byType方式,对于userService1 使用的autowire="default",就会使用beans的byType方式装配,而 userService1的autowire="byName"则会使用byName装配。

     

     

     

     

     

    展开全文
  • Bean的装配方式

    2021-11-14 18:00:13
    1.基于XML的装配 2.基于注解的装配 3.自动装配

    Bean的装配可以理解为依赖关系注入,Bean的装配方式即Bean的依赖注入的方式。

    Spring容器支持多种形式的Bean的装配方式,如基于XML的装配基于注解的装配自动装配等。其中最常用的是基于注解的装配。

    基于XML的装配

    Spring提供了两种基于XML的装配方式:设值注入构造注入

    Spring实例化Bean的过程中,Spring首先会调用Bean的默认构造方法来实例化Bean对象,然后通过反射的方式调用setter方法来注入属性值。

    设值注入:

    • Bean类必须提供一个默认的无参构造方法
    • Bean类必须为需要注入的属性提供对应的setter方法
    • 在配置文件中,需要使用 <property>元素为每个属性注入值

    构造注入

    • Bean类必须提供有参构造方法
    • 在配置文件中,需要使用<constructor-arg>元素来定义构造方法的参数,也可以使用其value属性来设置该参数的值

    基于注解的装配

    Spring中定义了一系列的注解,常用的注解如下:

    • @Component:描述Spring中的Bean,可以作用在任何层次
    • @Repository:用于将持久层(Dao层)的类标识为Spring中的Bean
    • @Service:用于将业务层(Service层)的类标识为Spring中的Bean
    • @Controller:用于将控制层(Controller层)的类标识为Spring中的Bean
    • @Autowired:用于对Bean的属性变量、属性的setter方法以及构造方法进行标注,配合对应的注解处理器完成Bean的自动装配工作。默认按照Bean的类型进行装配
    • @Resource:其作用与@Autowired一样。其区别在于@Autowired默认Bean的类型装配,而@Resource默认按照Bean的实例名称进行装配

    @Resource中有两个重要属性:nametype。Spring将name属性解析为Bean实例名称type属性解析为Bean实例类型。如果指定name属性,则按实例名称进行装配;如果指定type属性,则按Bean类型进行装配;如果都不指定,则先按Bean的实例名称装配,如果不能匹配,再按照Bean类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException异常。

    • @Qualifier:与@Autowired注解配合使用,会将默认的按Bean类型装配修改为Bean的实例名称装配,Bean的实例名称由 @Qualifier注解的参数指定
    @Repository("accountDao")
    public class AccountDaoImpl implements AccountDao {
    
    }
    @Service("accountService")
    public class AccountServiceImpl implements AccountService {
      
         @Resource(name="accountDao")
         private AccountDao accountDao; 
    
    }

    此时,在配置文件中,Spring注解提供了另外一种高效的注解配置方式。

    含义是:告知Spring在创建容器时要扫描的包(通知Spring扫描指定包下的所有Bean)

    
        <context:component-scan base-package="cn.itcast"></context:component-scan>

    自动装配 

    自动装配:将一个Bean自动地注入到其他Bean的Property中

    Spring的 <bean>元素中包含一个 autowire 属性,我们可以通过设置 autowire 的属性值来自动装配Bean。

    autowire属性的5个值:

    • default默认):由<beans>的default-autowire属性值来确定。
    • byName根据属性的名称自动装配。容器将根据名称查找与属性完全一致的Bean,并将其属性自动装配
    • byType根据属性的数据类型自动装配
    • constructor根据构造函数参数的数据类型,进行byType模式的自动装配
    • no:在默认情况下,不使用自动装配,Bean依赖必须通过ref元素定义

    展开全文
  • spring 自动装配 bean 有哪些方式

    万次阅读 2019-07-17 10:59:39
    spring 自动装配 bean 有哪些方式?...default - 默认的方式和 "no" 方式一样 no - 不自动装配,需要使用 <ref />节点或参数 byName - 根据名称进行装配 byType - 根据类型进行装配 constructo...

    spring 自动装配 bean 有哪些方式?

     spring 配置文件中 <bean> 节点的 autowire 参数可以控制 bean 自动装配的方式

    • default - 默认的方式和 "no" 方式一样
    • no - 不自动装配,需要使用 <ref />节点或参数
    • byName - 根据名称进行装配
    • byType - 根据类型进行装配
    • constructor - 根据构造函数进行装配

    文档解释

    Attribute : autowire
    Controls whether bean properties are "autowired". This is an 
     automagical process in which bean references don't need to 
     be coded explicitly in the XML bean definition file, but rather 
     the Spring container works out dependencies. The effective 
     default is "no". There are 4 modes: 1. "no" The traditional 
     Spring default. No automagical wiring. Bean references must 
     be defined in the XML file via the <ref/> element (or "ref" 
     attribute). We recommend this in most cases as it makes 
     documentation more explicit. Note that this default mode also 
     allows for annotation-driven autowiring, if activated. "no" 
     refers to externally driven autowiring only, not affecting any 
     autowiring demands that the bean class itself expresses. 2. 
     "byName" Autowiring by property name. If a bean of class Cat 
     exposes a "dog" property, Spring will try to set this to the 
     value of the bean "dog" in the current container. If there is no 
     matching bean by name, nothing special happens. 3. "byType" 
     Autowiring if there is exactly one bean of the property type in 
     the container. If there is more than one, a fatal error is raised, 
     and you cannot use byType autowiring for that bean. If there is 
     none, nothing special happens. 4. "constructor" Analogous to 
     "byType" for constructor arguments. If there is not exactly one 
     bean of the constructor argument type in the bean factory, a 
     fatal error is raised. Note that explicit dependencies, i.e. 
     "property" and "constructor-arg" elements, always override 
     autowiring. Note: This attribute will not be inherited by child 
     bean definitions. Hence, it needs to be specified per concrete 
     bean definition. It can be shared through the 'default-autowire' 
     attribute at the 'beans' level and potentially inherited from 
     outer 'beans' defaults in case of nested 'beans' sections (e.g. 
     with different profiles).
    
    Data Type : string
    Default Value : default
    Enumerated Values : 
    	- default
    	- no
    	- byName
    	- byType
    	- constructor

     

    代码示例

    1、no 方式

    spring 配置文件,使用 ref 参数注入 bean,必须要有对象的 setter 方法,这里即 Person 的 setFr 方法。

    没有 <property name="fr" ref="fr"></property> 因没有注入 fr 属性,会报空指针错误。

    <?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"
    	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">
            
    	<bean id="person" class="constxiong.interview.assemble.Person" autowire="no">
    		<property name="fr" ref="fr"></property>
    	</bean>
    	<bean id="fr" class="constxiong.interview.assemble.FishingRod"></bean>
    		
    </beans>

    鱼竿 bean

    package constxiong.interview.assemble;
    
    
    /**
     * 鱼竿
     * @author ConstXiong
     * @date 2019-07-17 09:53:15
     */
    public class FishingRod {
    
    	/**
    	 * 被使用
    	 */
    	public void used() {
    		System.out.println("钓鱼...");
    	}
    }
    

    人 bean

    package constxiong.interview.assemble;
    
    
    /**
     * 人
     * @author ConstXiong
     * @date 2019-07-17 09:54:56
     */
    public class Person {
    
    	private FishingRod fr;
    	
    	/**
    	 * 钓鱼
    	 */
    	public void fish() {
    		fr.used();
    	}
    	
    	public void setFr(FishingRod fr) {
    		this.fr = fr;
    	}
    	
    }
    

    测试代码

    package constxiong.interview.assemble;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class AssembleTest {
    
    	public static void main(String[] args) {
    		ApplicationContext context = new ClassPathXmlApplicationContext("spring_assemble.xml");
    		Person person = (Person)context.getBean("person");
    		person.fish();
    	}
    	
    }
    

     

    2、byName 也是需要相应的 setter 方法才能注入

    修改 spring 配置文件 autowire="byName"

    <?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"
    	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">
            
    	<bean id="person" class="constxiong.interview.assemble.Person" autowire="byName"></bean>
    	<bean id="fr" class="constxiong.interview.assemble.FishingRod"></bean>
    		
    </beans>

    其他不变

     

    3、byType 也是需要相应的 setter 方法才能注入

    修改 spring 配置文件 autowire="byType"

    <?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"
    	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">
            
    	<bean id="person" class="constxiong.interview.assemble.Person" autowire="byType"></bean>
    	<bean id="fr" class="constxiong.interview.assemble.FishingRod"></bean>
    		
    </beans>

    其他不变

     

    4、constructor 无需 setter 方法,需要通过 构造方法注入 bean

    修改 spring 配置文件autowire="byType"

    Person 类去除 setFr 方法,添加构造方法设置 fr 属性

    <?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"
    	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">
            
    	<bean id="person" class="constxiong.interview.assemble.Person" autowire="constructor"></bean>
    	<bean id="fr" class="constxiong.interview.assemble.FishingRod"></bean>
    		
    </beans>
    package constxiong.interview.assemble;
    
    
    /**
     * 人
     * @author ConstXiong
     * @date 2019-07-17 09:54:56
     */
    public class Person {
    
    	private FishingRod fr;
    	
    	public Person(FishingRod fr) {
    		this.fr = fr;
    	}
    	
    	/**
    	 * 钓鱼
    	 */
    	public void fish() {
    		fr.used();
    	}
    	
    }
    

     

    1、2、3、4 的测试结果一致,打印

    钓鱼...

     


     

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • autodetect:如果有默认的构造器,则通过constructor的方式进行自动装配,否则使用byType的方式进行自动装配。 自动装配没有自定义装配方式那么精确,而且不能自动装配简单属性(基本类型、字符
  • Spring的装配方式

    千次阅读 2019-06-18 13:49:56
    Spring的装配方式参考资料nobyName和byTypeconstructorautodetect小结 参考资料 Spring - bean的autowire属性(自动装配) Spring 自动装配 spring byType和byName 是什么意思 no Spring中默认的方式,它不能...
  • Spring中对Bean的理解什么是BeanBean的装配Bean的作用域Bean实例构造的时机 什么是Bean         1、在我们的Java中是一种面向对象的语言,而对象由属性和行为组成,我们...
  • 自动装配是Spring框架的重要功能,是使用Spring满足bean依赖的一种方式,Spring会在应用中为某个bean寻找其依赖的bean,Spring中bean有三种装配机制,分别是:在xml中显示配置、在java中显示配置以及隐式的bean发现....
  • Spring之自动装配的五种方式

    千次阅读 2018-08-25 19:01:30
    基于xml配置文件中的autowire来实现的spring自动装配,主要有以下五种具体的实现方式: no —— 默认情况,自动装配方式为手动装配,即通过ref手动设定 byName —— 根据属性名称自动装配,如果一个bean的...
  • spring的5种自动装配方式

    万次阅读 2018-06-10 18:51:22
    set注入和构造注入有时在做配置时比较麻烦。所以框架为了提高开发效率,...标签的autowire属性自动装配属性的5种选择: 1,no不支持自动装配功能2,default表示默认采用上一级标签的自动装配的取值。如果存在多个配...
  • spring的自动装配(default-autowire="byName")
  • Spring自动装配方式介绍

    千次阅读 2018-06-01 18:39:08
    自动装配是Spring框架的重要功能,是使用Spring满足bean依赖的一种方式,Spring会在应用中为某个bean寻找其依赖的bean,Spring中bean有三种装配机制,分别是:在xml中显示配置、在java中显示配置以及隐式的bean发现....
  • Spring容器可以在不使用和元素的情况下自动装配相互协作的...在Spring中,我们有4种方式可以装配Bean的属性。1,byName通过byName方式自动装配属性时,是在定义Bean的时候,在property标签中设置autowire属性为byNa...
  • 这篇文章,主要介绍的内容是Spring的自动装配、五种自动装配方式。 目录 一、自动装配 1.1、什么是自动装配 1.2、五种自动装配方式 (1)no (2)default (3)byType (4)byName (5)constructor 一...
  • Bean的装配方式 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 文章目录Bean的装配方式基于XML的装配基于注解(Annotation)的装配自动装配 IoC是Spring框架的核心内容,使用...
  • 自动装配,官方给出的定义是这样: Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系。因此,如果可能的话,可以自动让Spring通过检查BeanFactory中的内容,来替我们指定bean的协作者(其他被依赖...
  • pre name="code" class="html">spring 自动装配 default-autowire="byName/byType" 一、spring 自动装配 default-autowire="byName" byName,按变量名称,与id名称一样,若不一样,就报错。 xml version=...
  • 在Spring框架xml配置中共有6种自动装配: byName:通过bean的名称进行自动装配,如果一个bean的 property 与另一bean 的name 相同,就进行自动装配。 byType:通过参数的数据类型进行自动装配。 constructor:...
  • 一,spring的default-lazy-init参数 spring在启动的时候,会默认加载会默认加载整个对象实例图,从初始化ACTION配置、到 service配置到dao配置、乃至到数据库连接、事务等等。这样可以减少web服务器在运行时的...
  • 一、自动装配的概念 在Spring使用中,我们在xml配置文件通过元素或元素的ref属性向bean注入另外的依赖bean。 如果使用自动装配(autowiring) ,就可以减少甚至消除配置元素和元素。 设置元素的autowire属性就可以设定...
  • SpringBoot # 源码 # 自动装配 一日我在愉快得遨游时,看到有鱼友在问:SpringBoot 中引入了 Nacos 依赖为啥就可以直接使用 Nacos 中的相关功能呀! 认真思考了一番,我立马就想说,自动装配,但这种回答怎么能...
  • 装配 axy.define 项目 见 。 安装 npm install axy-define-asm 命令行实用程序 axy-define-asm 。 位于目录bin 。 例子: axy-define-asm --source=js --outDir=outJS 没有参数,只有选项: --addExt=ext Add ...
  • Asmref 从命令行检查多个Arch装配参考文档安装$ sudo npm install asmref -g用法$ asmrefUsage: asmref [-a arch] mnemonic -a arch: Target platform (x86_64, x86, arm, mips, xtensa, any)Default arch is x86_64...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,219
精华内容 15,287
热门标签
关键字:

装配方式default