Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Autowiring in servlet

i want to use spring autowiring in servlet so here's my code:

@Configurable
public class ImageServlet extends HttpServlet {

   @Autowired
   private SystemPropertyDao systemPropertyDao;

   @Override
   public void init() throws ServletException {


   String imagePath = systemPropertyDao.findByID(StaticParam.CONTENT_FOLDER);

}

while the SystemPropertyDao is annotated with @Repository

and my applicationContext.xml:

<context:component-scan base-package="com.basepackage" />
<mvc:annotation-driven />
<context:annotation-config />
<context:spring-configured/>

web.xml:

  <servlet>
    <servlet-name>imageServlet</servlet-name>
    <servlet-class>com.xeno.basepackage.ImageServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>imageServlet</servlet-name>
    <url-pattern>/myimages/*</url-pattern>
  </servlet-mapping>

sometimes the autowiring works and sometimes it doesn't (the reference to the spring bean systemPropertyDao is null), can anyone please tell me if i am missing something?

like image 617
Mahmoud Saleh Avatar asked Aug 07 '12 10:08

Mahmoud Saleh


People also ask

What is @autowired and how it works?

The @Autowired annotation provides more fine-grained control over where and how autowiring should be accomplished. The @Autowired annotation can be used to autowire bean on the setter method just like @Required annotation, constructor, a property or methods with arbitrary names and/or multiple arguments.

Where @autowired can be used?

Enabling @Autowired annotation Spring beans can be declared either by Java configuration or XML configuration. By declaring beans, you provide metadata to the Spring Container to return the required dependency object at runtime. This is called Spring Bean Autowiring.

What is difference between @bean and @autowire?

@Bean is just for the metadata definition to create the bean(equivalent to tag). @Autowired is to inject the dependancy into a bean(equivalent to ref XML tag/attribute).

What is @autowired and @inject?

@Inject and @Autowired both annotations are used for autowiring in your application. @Inject annotation is part of Java CDI which was introduced in Java 6, whereas @Autowire annotation is part of spring framework. Both annotations fulfill same purpose therefore, anything of these we can use in our application.


2 Answers

I followed the solution in the following link, and it works fine: Access Spring beans from a servlet in JBoss

public class MyServlet extends HttpServlet {    @Autowired   private MyService myService;    public void init(ServletConfig config) {     super.init(config);     SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,       config.getServletContext());   } } 
like image 90
Mahmoud Saleh Avatar answered Oct 02 '22 12:10

Mahmoud Saleh


Remove the @Configurable annotation from your servlet and add:

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this); 

at the first line of your init() method.

like image 28
Stefan Avatar answered Oct 02 '22 12:10

Stefan