4

在我的 Web 应用程序中,我没有使用applicationContext.xml. 我怎样才能得到@Service注释类的bean?

如果我applicationContext.xml在我的 Web 应用程序中使用了 ,我必须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?

或者

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

4

4 回答 4

6

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

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

context.getBean(className.class);

于 2016-08-20T11:46:49.007 回答
2

如果您使用基于注解的配置,您可以@Autowired通过类型@Resource获取 bean 或通过名称获取 bean。仅对任何特定属性使用其中之一(以减少混淆)。

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

也有@Inject,但我不喜欢这样,因为随着豆子数量的增加,它变得不那么好。YMMV。

于 2013-04-11T11:36:30.070 回答
0

由于您正在使用注释,我相信您更喜欢使用@Autowired。如果您有一个要调用的类ServerConnection(可以说CallingClass在 package 下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" />

希望我回答了你的问题。

于 2013-04-11T10:35:17.163 回答
0

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

@Autowired
private Dependency1 dependency1;

@Autowired
private Dependency2 dependency2;

@Autowired
private Dependency2 dependency2;

然后从此类内部调用一次:

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

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

于 2013-04-11T12:29:44.553 回答