[英]Dependency Injection in simple java program using CDI
在仅使用CDI的简单java程序中,是否总是需要bean.xml进行依赖项注入?是否需要构造一个bean来获取注入的对象?
以下是具有依赖项注入的简单Java项目的代码:
接口
public interface Hello
{
public void sayHello(String str);
}
类
public class HelloImpl1 implements Hello{
public void sayHello(String str){
System.out.println("Hello from 1st block")
}
}
类
public class HelloImpl2 implements hello{
public void sayHello(String str){
System.out.println("Hello from 2nd block")
}
}
类
public CallingHello(){
@Inject
Hello hello;
public void callHello(){
hello.sayHello("Hey");
}
}
类
public Test(){
public static void main(String[] args){
CallingHello hello=new CallingHello();
hello.callHello();
}
那就是我正在做的所有事情,运行测试类时会抛出nullpointerexception异常,并且我正在使简单的类在Eclipse中没有bean,mi正确了吗?
您可以使用autowiring,以便向不属于应用程序上下文一部分的对象注入依赖关系(并可能将后处理程序应用于)。
您可以将java config类与工厂方法一起使用来配置ApplicationContext
:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean(name="HelloImpl1")
public HelloImpl1 helloImpl1() {
return new HelloImpl1();
}
@Bean(name="HelloImpl2")
public HelloImpl1 helloImpl2() {
return new HelloImpl2();
}
}
然后实例化:
ApplicationContext ctx =
new AnnotationConfigApplicationContext(AppConfig.class);
HelloImpl1 helloImpl1= (HelloImpl1)ctx.getBean("HelloImpl1");
helloImpl1.sayHello("#?*")
如果使用Spring进行依赖项注入,则始终需要一个配置文件。 但它不必命名为beans.xml。
是的,这些豆被注入其他豆中 。
从技术上讲,没有,您不需要使用XML文件来定义bean和注入依赖项。 这取决于您使用的ApplicationContext的类型。 但是,对于大多数实际的应用程序,您将使用AbstractXMLContextApplication实例之一,该实例将加载XML文件来确定您的应用程序已声明的bean。 该文件的名称不必是beans.xml。 这是一个约定,但是您不必为此命名。 在构造AbstractXMLApplicationContext对象的实现时,可以覆盖它寻找的文件。
您需要做的就是构造bean容器,它将加载bean,解决依赖关系并启动程序(如果使用的是init-method)。 通常,我的Spring Container Java程序如下所示:
ApplicationContext context = null;
try {
context = new FileSystemXmlApplicationContext( new String[] { file } );
// pause until we want to shutdown or after something happens.
System.in.readLine();
} finally {
context.close(); // remember to clean up!
}
然后,我让Bean上的init方法启动了我的应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.