获取@Service注释类的bean?

时间:2013-04-11 10:23:13

标签: java spring web-applications spring-mvc spring-annotations

在我的网络应用程序中,我没有使用applicationContext.xml。如何获取@Service注释类的bean?

如果我在我的Web应用程序中使用applicationContext.xml,我每次都必须加载applicationContext.xml以获取@Service注释类的bean。

我用这种方式

WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext);
ServerConnection  con = (ServerConnection ) ctx.getBean("con");

我的服务类将为,

@Service  or @Service("con")
public class ServerConnection {

    private  TServerProtocol tServerProtocol;
    private  URI uri;

    public TServerProtocol getServerConnection(){

        System.out.println("host :"+host+"\nport :"+port);

        try {
            uri = new URI("tcp://" + host + ":" + port);
        } catch (URISyntaxException e) {
            System.out.println("Exception in xreating URI Path");
        }

        tServerProtocol = new TServerProtocol(new Endpoint(uri));
        return tServerProtocol;
    }
}

是否有任何其他方式来获取此类的bean

在Spring3.x中核心应用程序和Web应用程序的情况下,获取@Service注释类的bean的正确方法是什么?

4 个答案:

答案 0 :(得分:5)

ApplicationContext context=SpringApplication.run(YourProjectApplication.class, args);

此上下文可用于获取由注释@Bean@Service创建的bean 如

context.getBean(className.class);

答案 1 :(得分:2)

如果您使用基于注释的配置,则使用@Autowired按类型获取bean,或使用@Resource获取bean的名称。只使用其中一种用于任何特定属性(以避免混淆)。

@Autowired
private ServerConnection connection;
@Resource(name = "con")
private ServerConnection connection;

There's also @Inject,但我不喜欢它,因为随着豆子数量的增加,它变得不那么好了。 YMMV。

答案 2 :(得分:0)

由于您正在使用注释,我相信您更愿意使用 @Autowired 。如果您有一个会调用ServerConnection的课程(在CallingClass包下说com.foo),那么这就是它的样子:

package com.foo;

@Component
public class CallingClass{

   @Autowired
   private ServerConnection serverConnection

    // add your getters and setters
}

然后在您的applicationContext.xml上添加以下内容

<context:component-scan base-package="com.foo" />

希望我回答你的问题。

答案 3 :(得分:0)

如果你在春天之外的某个bean工作,那么你可以使用普通的Spring注释:

@Autowired
private Dependency1 dependency1;

@Autowired
private Dependency2 dependency2;

@Autowired
private Dependency2 dependency2;

然后从这个班级内部调用一次:

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

注入所有依赖项。如果您有多个依赖项,可能会更方便。