在Spring中的Beans Autowiring

时间:2020-02-23 14:35:40  来源:igfitidea点击:

我们已经学会了如何使用XML配置文件中使用元素和注入的元素声明bean。

在Spring框架中,我们可以使用自动接线功能自动钢筋。
要启用它,只需定义"Autowire"属性。
该Spring容器可以在不使用和元素之间进行协作Bean之间的关系,有助于减少XML配置量的元素

<bean id="countryBean" class="org.arpit.javapostsforlearning.Country" autowire="byName">

Autowiring模式:

有以下操作模式,可用于指示Spring 容器以用于依赖性注入的自动控制。

no:

默认情况下,无自动接线,通过"ref"属性手动设置,因为我们通过定居点方法帖子所做的依赖注入。

byName:

按财产名称自动划分。
Spring Container查看XML配置文件中的Autowire属性设置为ByName的Bean的属性,并尝试将其与XML配置文件中的bean的名称匹配。

byType:

按属性数据类型自动定向。
Spring Container查看XML配置文件中AutoWire属性设置为yetype的bean的属性。
然后,如果它的类型与配置文件中的beans名称恰好匹配,则尝试匹配和引线属性。
如果存在多个这样的豆类,则抛出致命的异常。

contructor:

bytype模式在构造函数参数中。

autodetect:

Spring首先尝试使用构造函数使用AutoWire的电线,如果它不起作用,Spring尝试到yotype autovire。

例子:

我在这里拍摄了autowire"byname"的例子。
它几乎通过Setter方法与依赖项注入相同,具有XML配置文件的一些更改。

1.Country.java:

这是简单的Pojo类,其中有一些属性,所以国家有资本类的名称和对象。

在package org.arpit.javapostssforlarearning中创建country.java .Copy内容到Country.java之后。

package org.arpit.javapostsforlearning;
 
public class Country {
 
    String countryName;
    Capital capital;
    public String getCountryName() {
        return countryName;
    }
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    public Capital getCapital() {
        return capital;
    }
    public void setCapital(Capital capital) {
        this.capital = capital;
    }
}

2.Capital.java.

这也是一个名为"bueinkname"的一个属性的简单pojo类。

在package org.arpit.javapostsforlearning时创建Capital.java .java.above country类包含此类的对象。
内容进入capical.java之后

package org.arpit.javapostsforlearning;
 
public class Capital {
 
    String capitalName;
 
    public String getCapitalName() {
        return capitalName;
    }
 
    public void setCapitalName(String capitalName) {
        this.capitalName = capitalName;
    }
}

3.Beanautowirngbynamemain.java.

此类包含main function.create beanautowiringbynamemain.java在package org.arpit.javapostsforlearning。
内容到beanautowiringbynamememeain.java之后的内容.copy

package org.arpit.javapostsforlearning;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class BeanAutowiringByNameMain{
 
    public static void main(String[] args) {
        ApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
 
        Country countryObj = (Country) appContext.getBean("country");
        String countryName=countryObj.getCountryName();
        String capitalName=countryObj.getCapital().getCapitalName();
        System.out.println(capitalName+" is capital of "+countryName);
       
    }
}

我们可以在此处注意到,我们在此处使用ClassPathxmlApplicationContext来获取bean。
有多种方法来获取beans.in Hello World示例我们已使用XMLBeanFactory来获取beans。

4.ApplicationContext.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" xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
 <bean id="country" class="org.arpit.javapostsforlearning.Country" autowire="byName">
 <property name="countryName" value="San Franceco"
 </bean>
 <bean id="capital" class="org.arpit.javapostsforlearning.Capital">
 <property name="capitalName" value="Delhi" 
 </bean>
</beans>

在此处,我们使用了Autowire属性并将其设置为"byName"。
所以,现在Spring容器将在XML配置文件中具有ID或者其他Bean的ID或者名称的国家类中的"大写"引用。
所以这里你可以看到我们有ead作为"capital"

5.运行

当我们将运行上面的应用程序时,我们将按照输出作为输出。

Delhi is capital of San Franceco

Autowiring的局限性:

  • 覆盖可能性:我们仍然可以使用始终覆盖自动控制的依赖项或者标记。
  • 原始数据类型:我们必须定义像字符串或者Interger等原始数据类型或者使用标签。我们无法自动运行它们。
  • 令人困惑的性质:如果我们有很多依赖程序,那么很难找到使用bean的autowire属性。