猿问

使用弹簧注解创建对象

我是春天的初学者。我浏览了一些在线教程并编写了一个简单的程序,但我无法理解其价值。当我们使用 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();

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


青春有我
浏览 147回答 3
3回答

MMMHUHU

使用时进行编辑@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 放在任何地方并做您想做的任何事情。

翻过高山走不出你

有两种方法可以在 Spring Context 中创建 bean使用@Component 注解(委托创建 Spring Framework)@Component:类上方的注解表明该类是一个组件,应自动检测并实例化。因此,Spring 组件 bean 将如下所示:@Componentpublic class User {&nbsp; private String name;&nbsp; private String address;&nbsp; public String getName() {return name;&nbsp; }&nbsp; public void setName(String name) {this.name = name;&nbsp; }&nbsp; public String getAddress() {return address;&nbsp; }&nbsp; public void setAddress(String address) {this.address = address;&nbsp; }}使用组件扫描扫描您的 bean:XML 老派 Spring 配置:&nbsp; <context:component-scan base-package=”com.yourpackage” />组件扫描(如果你使用 Spring boot,它会被包含在 @SpringBootAppilcation 中)@ComponentScan(basePackageClasses = Yourclass.class)使用@Configuration 注解:(您的实际选择)使用带有@bean 注释的方法的@Configuration 类。您应该在此处提供如何创建新的对象设置值(您的 getHello 方法):&nbsp;@Bean(name="h")public Hello getHello(){&nbsp; &nbsp; Hello h= new Hello();&nbsp; &nbsp; h.setGender("male");&nbsp; &nbsp; return h;}

慕侠2389804

您不需要在 AppConfig.java 类中显式创建 bean,因为您已经在 Hello.java 类上有 @Component 注释。它会自动创建bean。您可以使用 main 中的代码直接访问 bean,但您需要在 @Component 中将 bean 的名称指定为“h”。&nbsp;ApplicationContext ct=new AnnotationConfigApplicationContext(AppConfig.class);&nbsp; &nbsp; &nbsp; &nbsp; Hello h=ct.getBean("h",Hello.class);&nbsp; &nbsp; &nbsp; &nbsp; h.print();
随时随地看视频慕课网APP

相关分类

Java
我要回答