我在jar中定义了一个MyFrontService类,以下是我想要使用它的方法:
import blabla.MyFrontService;
public class Main {
public static void main(String[] args) {
MyFrontService.doThis();
}
}
FrontService充当访问其他服务的入口点。 以下是它当前的定义方式(并且有效)。
MyFrontService.java:
public class MyFrontService {
public static void doThis(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/springBeans.xml");
MyService1 myService1 = (MyService1) context.getBean("myService1");
myService1.doSomething();
context.close();
}
}
MyService1.java:
package blabla.service;
@Service("myService1")
public class MyService1 {
public void doSomething(){
// some code
}
}
的src /主/资源/ META-INF / springBeans.xml:
(...)
<context:annotation-config />
<context:component-scan base-package="blabla.service" />
(...)
我想通过以下方式替换MyFrontService.java的代码:
@MagicAnnotation("what_path?/springBeans.xml")
public class MyFrontService {
@Autowired
private static MyService1 myService1;
public static void doThis(){
myService1.doSomething();
}
}
我已经从本网站和其他人的其他问题上阅读了很多内容。有时候说这是不可能的,有时会使用@Configuration,@ Import等注释,但我无法使它们工作。例如,使用
@ImportResource("classpath:META-INF/springBeans.xml")
在调用myService1.doSomething()时触发NullPointerException。
如果可以这样做,我应该使用什么注释和路径?
答案 0 :(得分:1)
使用Spring Boot框架,你就可以像这样编写smth
@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleController.class, args);
}
}
答案 1 :(得分:-1)
如果你使用@Component注释标记你的MyFrontService类,这应该可以避免做你正在做的所有事情的麻烦。如果您不想添加注释并且不希望在spring配置下拥有所有内容,则可以按如下方式定义类。
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
@Override
public void setApplicationContext(
org.springframework.context.ApplicationContext ctx)
throws BeansException {
applicationContext = ctx;
}
}
然后在任何课程中你都可以做到,
ApplicationContext ctx = SpringContextUtil.getApplicationContext();
BeanClass av = ctx.getBean(BeanClass.class);