在我的网络应用程序中,我没有使用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的正确方法是什么?
答案 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);
注入所有依赖项。如果您有多个依赖项,可能会更方便。