为了账号安全,请及时绑定邮箱和手机立即绑定

使用弹簧注解创建对象

使用弹簧注解创建对象

青春有我 2021-11-17 17:17:12
我是春天的初学者。我浏览了一些在线教程并编写了一个简单的程序,但我无法理解其价值。当我们使用 spring.xml 文件并使用 getBean 方法创建对象时。但是,在注释的情况下,我使用 new 创建对象,我认为这是不对的。请查看下面的代码,让我知道我遵循的程序是否有问题。Hello.java:package bean;import org.springframework.stereotype.Component;@Componentpublic 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;@Configurationpublic 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();这看起来有问题。如果我必须自己创建对象,那为什么我们需要 spring。请建议我在这里做错了什么。
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

使用时进行编辑@Component("h"),您正在创建一个名为 h 的 bean,该 bean 具有在 Hello 类中定义的某些属性。所以你不需要 Appconfig 类。而且你不应该尝试在 Hello 类之外的其他地方更改 bean 属性(如 setGender)。那么我什么时候应该使用配置类?当您不将 Hello 类标记为 bean 时(即不使用组件注释)。您创建一个 Hello 类对象,设置某些属性并将其标记为 bean(使用 @bean)。

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

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


查看完整回答
反对 回复 2021-11-17
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

有两种方法可以在 Spring Context 中创建 bean


使用@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)

使用@Configuration 注解:(您的实际选择)

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


 @Bean(name="h")

public Hello getHello(){

    Hello h= new Hello();

    h.setGender("male");

    return h;

}



查看完整回答
反对 回复 2021-11-17
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

您不需要在 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();


查看完整回答
反对 回复 2021-11-17
  • 3 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信