是否有一个Spring注释替换ClassPathXmlApplicationContext.getBean?

时间:2016-04-06 18:13:05

标签: java spring

我在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。

如果可以这样做,我应该使用什么注释和路径?

2 个答案:

答案 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);