在Spring中的@autowired incration

时间:2020-02-23 14:34:44  来源:igfitidea点击:

@autowired注释提供了控制可以控制可以完成的何处和方式。
这可以在Setter方法,Contructor或者Property上完成注释。
我们将详细介绍一个例子。

@Autowired on Setter方法:

默认情况下,Spring容器在@autowire表示法中找到@autowire表示法,它自动排行bean bytype。
我们可以在Setter方法上使用@autowire注释将标记放在XML配置文件中。

例子

在Eclipse IDE中配置Spring,请参阅Hello World示例

1.Country.java:

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

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

package org.arpit.javapostsforlearning;
import org.springframework.beans.factory.annotation.Autowired;
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;
    }
    @Autowired
    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.AutowiredannotationinspringMain.java.

此类包含Main Function.Create AutoWiredAnnotationInspringMain.java在package org.arpit.javapostsforlearning .copy以下内容到autowiveredannotationinspringmain.java之后

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

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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 <context:annotation-config
 <bean id="CountryBean" class="org.arpit.javapostsforlearning.Country">
  <property name="countryName" value="San Franceco" 
 </bean>
 <bean id="CaptialBean" class="org.arpit.javapostsforlearning.Capital">
  <property name="capitalName" value="Delhi" 
 </bean>
</beans>

正如我们所看到的,在两种豆之间没有关系,但我们使用了@autowired注释,这将在类型的基础上自动加线。

5.运行:

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

Delhi is capital of San Franceco

@Autowired属性:

我们可以在属性上使用@autowired来摆脱Setter方法.pring容器会自动为相应属性分配值。
我们不需要Setter方法来为此.Make对上述代码进行更改:

Country.java:

package org.arpit.javapostsforlearning;
import org.springframework.beans.factory.annotation.Autowired;
public class Country {
 
    String countryName;
 
    @Autowired
    Capital capital;
    public String getCountryName() {
        return countryName;
    }
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    public Capital getCapital() {
        return capital;
    }
}

运行:

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

Delhi is capital of San Franceco

@autowired on构造函数:

我们也可以在构造函数上使用@Autowired,即使我们没有在XML配置文件中定义标记,也可以使用XML配置文件。
遵循上述代码的更改:

Country.java:

package org.arpit.javapostsforlearning;
import org.springframework.beans.factory.annotation.Autowired;
public class Country {
 
    String countryName;
    Capital capital;
 
    @Autowired
    public Country(String countryName, Capital capital) {
 super();
 this.countryName = countryName;
 this.capital = capital;
    }
    public String getCountryName() {
        return countryName;
    }
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    public Capital getCapital() {
        return capital;
    }
}

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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 <context:annotation-config
 <bean id="CountryBean" class="org.arpit.javapostsforlearning.Country">
  <constructor-arg index="0" type="java.lang.String" value="San Franceco" 
 </bean>
 <bean id="CaptialBean" class="org.arpit.javapostsforlearning.Capital">
  <property name="capitalName" value="Delhi" 
 </bean>
</beans>

运行:

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

Delhi is capital of San Franceco

带参数的@Autowired:

默认情况下,在@Aurcowired这样的情况下,需要依赖依赖性,但我们可以通过CASED RESCLACE = FALSE关闭它作为参数来关闭它。

Country.java:

package org.arpit.javapostsforlearning;
import org.springframework.beans.factory.annotation.Autowired;
public class Country {
 
    String countryName;
    @Autowired(required=false)
    Capital capital;
    public String getCountryName() {
        return countryName;
    }
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    public Capital getCapital() {
        return capital;
    }
}

现在它将运行即使我们不提供XML配置中的大写字母。