Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a Spring annotation that replaces ClassPathXmlApplicationContext.getBean?

Tags:

java

spring

I have defined a class MyFrontService in a jar, here is how I want to use it:

import blabla.MyFrontService;

public class Main {
    public static void main(String[] args) {
        MyFrontService.doThis();
    }
}

The FrontService serves as an entry point to access other services. Here is how it is currently defined (and it works).

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/main/resources/META-INF/springBeans.xml:

(...)
<context:annotation-config />
<context:component-scan base-package="blabla.service" />
(...)

I would like to replace the code of MyFrontService.java by something like this:

@MagicAnnotation("what_path?/springBeans.xml")
public class MyFrontService {

    @Autowired
    private static MyService1 myService1;

    public static void doThis(){
        myService1.doSomething();            
    }
}

I've read a lot from other questions on this website and others. It is sometimes said that it's impossible, and sometimes annotations like @Configuration, @Import and others are used but I can't make them work. For example, using

@ImportResource("classpath:META-INF/springBeans.xml")

triggers a NullPointerException when calling myService1.doSomething().

If it is possible to do it, what annotation and what path should I use?

like image 969
ThCollignon Avatar asked Nov 21 '22 09:11

ThCollignon


1 Answers

Use Spring Boot framework and you will be able to write smth like this

@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);
    }
}
like image 159
Andriy Kryvtsun Avatar answered May 31 '23 10:05

Andriy Kryvtsun