我是春天的初学者。我已经看过一些在线教程并编写了一个简单的程序,但是我不明白它的价值。当我们使用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();
这看起来有问题。如果我必须自己创建对象,那么为什么我们需要弹簧。请在这里建议我做错了。
答案 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的两种方法
@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一起使用。您应该在此处提供如何创建新的对象设置值(您的getHello方法):
@Bean(name="h")
public Hello getHello(){
Hello h= new Hello();
h.setGender("male");
return h;
}