使用Spring注释创建对象

时间:2018-10-15 02:46:37

标签: java spring annotations

我是春天的初学者。我已经看过一些在线教程并编写了一个简单的程序,但是我不明白它的价值。当我们使用spring.xml文件并使用getBean方法创建对象时。但是,在注释的情况下,我正在使用new创建对象,我认为这是不对的。请查看下面的代码,并让我知道我执行的步骤是否有问题。

Hello.java:

package bean;

import org.springframework.stereotype.Component;

@Component
public class Hello {

    String gender;

    public void print(){
        System.out.println("Hello world "+gender);
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

}

AppConfig.java:

package config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import bean.Hello;

@Configuration
public class AppConfig {

    @Bean(name="h")
    public Hello getHello(){
        Hello h= new Hello();
        h.setGender("male");
        return h;
    }

}

Driver.java:

package client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import bean.Hello;
import config.AppConfig;

public class Driver {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ApplicationContext ct=new AnnotationConfigApplicationContext(AppConfig.class);

        Hello h=ct.getBean("h",Hello.class);

        h.print();

    }

}

如您在AppConfig.java中所看到的,我正在使用

创建类的对象。
Hello h= new Hello();

这看起来有问题。如果我必须自己创建对象,那么为什么我们需要弹簧。请在这里建议我做错了。

4 个答案:

答案 0 :(得分:1)

Edit ,当您使用@Component("h")时,您正在创建一个名称为h的bean,其中具有在Hello类中定义的某些属性。因此,您不需要Appconfig类。同样,除了Hello类之外,您也不应尝试在其他地方更改bean属性(例如setGender)。 那么我什么时候应该使用config类呢?当您不将Hello类标记为bean时(即,不使用组件注释)。您创建一个Hello类对象,设置某些属性并将其标记为bean(使用@bean)。

否,您不必自己创建对象。 将Hello类标记为@Component("h"),就可以使用Hello h=ct.getBean("h",Hello.class);直接获取bean。

您还可以使用Autowired批注将bean放在任何地方,并做您想做的任何事情。

答案 1 :(得分:0)

您不需要在AppConfig.java类中显式创建bean,因为Hello.java类上已经具有@Component批注。 它将自动创建bean。

您可以直接使用main中的代码直接访问Bean,但需要在@Component中将Bean名称指定为“ h”。

 ApplicationContext ct=new AnnotationConfigApplicationContext(AppConfig.class);

        Hello h=ct.getBean("h",Hello.class);

        h.print();

答案 2 :(得分:0)

您只需要使用Autowired并拥有一个getter

@Autowired
private Hello hello;

public Hello getHello () {return hello;}

答案 3 :(得分:0)

Thera是在Spring Context内创建bean的两种方法

  1. 使用@Component批注(代理创建Spring Framework)

@Component :类上方的注释表示该类是组件,应被自动检测和实例化。因此,Spring组件bean看起来像:

@Component
public class User {
  private String name;

  private String address;

  public String getName() {
return name;
  }

  public void setName(String name) {
this.name = name;
  }

  public String getAddress() {
return address;
  }

  public void setAddress(String address) {
this.address = address;
  }
}

使用组件扫描来扫描您的bean:

Xml老派Spring配置:

  <context:component-scan base-package=”com.yourpackage” />

组件扫描(如果使用Spring boot,它将包含在@SpringBootAppilcation中)

@ComponentScan(basePackageClasses = Yourclass.class)
  1. 使用@Configuration批注:(您的实际选择)

将@Configuration类与@bean一起使用。您应该在此处提供如何创建新的对象设置值(您的getHello方法):

 @Bean(name="h")
public Hello getHello(){
    Hello h= new Hello();
    h.setGender("male");
    return h;
}