Spring interview questions and answers
1. What is IOC (or
Dependency Injection)?
The basic concept of the Inversion of Control pattern (also known as dependency injection) is that you do not create your objects but describe how they should be created. You don't directly connect your components and services together in code but describe which services are needed by which components in a configuration file. A container (in the case of the Spring framework, the IOC container) is then responsible for hooking it all up.
i.e., Applying IoC, objects are given their dependencies at creation time by some external entity that coordinates each object in the system. That is, dependencies are injected into objects. So, IoC means an inversion of responsibility with regard to how an object obtains references to collaborating objects.
2. What are the different
types of IOC (dependency injection) ?
There are three types of dependency injection:
- Constructor
Injection
(e.g. Pico container, Spring etc): Dependencies are provided as
constructor parameters.
- Setter
Injection
(e.g. Spring): Dependencies are assigned through JavaBeans properties (ex:
setter methods).
- Interface
Injection (e.g.
Avalon): Injection is done through an interface.
Note: Spring supports
only Constructor and Setter Injection
3. What are the
benefits of IOC (Dependency Injection)?
Benefits of IOC (Dependency Injection) are as follows:
- Minimizes the amount
of code in your application. With IOC containers you do not care about how
services are created and how you get references to the ones you need. You
can also easily add additional services by adding a new constructor or a
setter method with little or no extra configuration.
- Make your
application more testable by not requiring any singletons or JNDI lookup
mechanisms in your unit test cases. IOC containers make unit testing and
switching implementations very easy by manually allowing you to inject your
own objects into the object under test.
- Loose coupling
is promoted with minimal effort and least intrusive mechanism. The factory
design pattern is more intrusive because components or services need to be
requested explicitly whereas in IOC the dependency is injected into
requesting piece of code. Also some containers promote the design to
interfaces not to implementations design concept by encouraging managed
objects to implement a well-defined service interface of your own.
- IOC containers
support eager instantiation and lazy loading of services. Containers also
provide support for instantiation of managed objects, cyclical
dependencies, life cycles management, and dependency resolution between
managed objects etc.
4. What is Spring ?
Spring is an open source framework created to address the
complexity of enterprise application development. One of the chief advantages
of the Spring framework is its layered architecture, which allows you to be
selective about which of its components you use while also providing a cohesive
framework for J2EE application development.
5. What are the
advantages of Spring framework?
The advantages of Spring are as follows:
- Spring has
layered architecture. Use what you need and leave you don't need now.
- Spring Enables
POJO Programming. There is no behind the scene magic here. POJO
programming enables continuous integration and testability.
- Dependency
Injection and Inversion of Control Simplifies JDBC
- Open source and
no vendor lock-in.
6. What are features
of Spring ?
Lightweight:
spring is lightweight when it comes to size and transparency. The basic version of spring framework is around 1MB. And the processing overhead is also very negligible.
spring is lightweight when it comes to size and transparency. The basic version of spring framework is around 1MB. And the processing overhead is also very negligible.
Inversion of control
(IOC):
Loose coupling is achieved in spring using the technique Inversion of Control. The objects give their dependencies instead of creating or looking for dependent objects.
Loose coupling is achieved in spring using the technique Inversion of Control. The objects give their dependencies instead of creating or looking for dependent objects.
Aspect oriented (AOP):
Spring supports Aspect oriented programming and enables cohesive development by separating application business logic from system services.
Spring supports Aspect oriented programming and enables cohesive development by separating application business logic from system services.
Container:
Spring contains and manages the life cycle and configuration of application objects.
Spring contains and manages the life cycle and configuration of application objects.
MVC Framework:
Spring comes with MVC web application framework, built on core Spring functionality. This framework is highly configurable via strategy interfaces, and accommodates multiple view technologies like JSP, Velocity, Tiles, iText, and POI. But other frameworks can be easily used instead of Spring MVC Framework.
Spring comes with MVC web application framework, built on core Spring functionality. This framework is highly configurable via strategy interfaces, and accommodates multiple view technologies like JSP, Velocity, Tiles, iText, and POI. But other frameworks can be easily used instead of Spring MVC Framework.
Transaction Management:
Spring framework provides a generic abstraction layer for transaction management. This allowing the developer to add the pluggable transaction managers, and making it easy to demarcate transactions without dealing with low-level issues. Spring's transaction support is not tied to J2EE environments and it can be also used in container less environments.
Spring framework provides a generic abstraction layer for transaction management. This allowing the developer to add the pluggable transaction managers, and making it easy to demarcate transactions without dealing with low-level issues. Spring's transaction support is not tied to J2EE environments and it can be also used in container less environments.
JDBC Exception Handling:
The JDBC abstraction layer of the Spring offers a meaningful exception hierarchy, which simplifies the error handling strategy. Integration with Hibernate, JDO, and iBATIS: Spring provides best Integration services with Hibernate, JDO and iBATIS
contexts for Web-based applications. As a result, the Spring framework supports integration with Jakarta Struts. The Web module also eases the tasks of handling multi-part requests and binding request parameters to domain objects.
The JDBC abstraction layer of the Spring offers a meaningful exception hierarchy, which simplifies the error handling strategy. Integration with Hibernate, JDO, and iBATIS: Spring provides best Integration services with Hibernate, JDO and iBATIS
contexts for Web-based applications. As a result, the Spring framework supports integration with Jakarta Struts. The Web module also eases the tasks of handling multi-part requests and binding request parameters to domain objects.
7 . What is web module?
This module is built on the application context module,
providing a context that is appropriate for web-based applications. This module
also contains support for several web-oriented tasks such as transparently
handling multipart requests for file uploads and programmatic binding of
request parameters to your business objects. It also contains integration
support with Jakarta Struts.
8. What are the
types of Dependency Injection Spring supports?
Setter Injection:
Setter-based DI is realized by calling setter methods on your beans after invoking a no-argument constructor or no-argument static factory method to instantiate your bean.
Setter-based DI is realized by calling setter methods on your beans after invoking a no-argument constructor or no-argument static factory method to instantiate your bean.
Constructor Injection:
Constructor-based DI is realized by invoking a constructor with a number of arguments, each representing a collaborator.
Constructor-based DI is realized by invoking a constructor with a number of arguments, each representing a collaborator.
9. What is Bean
Factory ?
A BeanFactory is like a factory class that contains a collection
of beans. The BeanFactory holds Bean Definitions of multiple beans within
itself and then instantiates the bean whenever asked for by clients.
- BeanFactory is
able to create associations between collaborating objects as they are
instantiated. This removes the burden of configuration from bean itself and
the beans client.
- BeanFactory also
takes part in the life cycle of a bean, making calls to custom
initialization and destruction methods.
10. What is
Application Context?
A bean factory is fine to simple applications, but to take
advantage of the full power of the Spring framework, you may want to move up to
Springs more advanced container, the application context. On the surface,
an application context is same as a bean factory.Both load bean definitions,
wire beans together, and dispense beans upon request. But it also provides:
- A means for
resolving text messages, including support for internationalization.
- A generic way to
load file resources.
- Events to beans
that are registered as listeners.
11.What is the
difference between Bean Factory and Application Context?
On the surface, an application context is same as a bean
factory. But application context offers much more..
- Application
contexts provide a means for resolving text messages, including support
for i18n of those messages.
- Application
contexts provide a generic way to load file resources, such as images.
- Application
contexts can publish events to beans that are registered as listeners.
- Certain
operations on the container or beans in the container, which have to be
handled in a programmatic fashion with a bean factory, can be handled
declaratively in an application context.
- ResourceLoader
support: Spring’s Resource interface us a flexible generic abstraction for
handling low-level resources. An application context itself is a
ResourceLoader, Hence provides an application with access to
deployment-specific Resource instances.
- MessageSource
support: The application context
implements MessageSource, an interface used to obtain localized messages,
with the actual implementation being pluggable
12. What are the
common implementations of the Application Context ?
The three commonly
used implementation of 'Application Context' are
- ClassPathXmlApplicationContext
:
It Loads context definition from an XML file located in the classpath,
treating context definitions as classpath resources. The application
context is loaded from the application's classpath by using the code .
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); - FileSystemXmlApplicationContext
:
It loads context definition from an XML file in the filesystem. The
application context is loaded from the file system by using the
code .
ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml"); - XmlWebApplicationContext
: It
loads context definition from an XML file contained within a web
application.
13. How is a typical
spring implementation look like ?
For a typical Spring Application
we need the following files:
- An interface
that defines the functions.
- An
Implementation that contains properties, its setter and getter methods,
functions etc.,
- Spring AOP
(Aspect Oriented Programming)
- A XML file
called Spring configuration file.
- Client program
that uses the function.
14. What is the
typical Bean life cycle in Spring Bean Factory Container ?
Bean life cycle in Spring Bean Factory
Container is as follows:
- The spring
container finds the bean’s definition from the XML file and instantiates
the bean.
- Using the
dependency injection, spring populates all of the properties as specified
in the bean definition
- If the bean
implements the BeanNameAware interface, the factory calls setBeanName()
passing the bean’s ID.
- If the bean
implements the BeanFactoryAware interface, the factory calls
setBeanFactory(), passing an instance of itself.
- If there are any
BeanPostProcessors associated with the bean, their post-
ProcessBeforeInitialization() methods will be called.
- If an
init-method is specified for the bean, it will be called.
- Finally, if
there are any BeanPostProcessors associated with the bean, their
postProcessAfterInitialization() methods will be called.
15. What do you mean
by Bean wiring ?
The act of creating associations between application components
(beans) within the Spring container is reffered to as Bean wiring.
16. What do you mean
by Auto Wiring?
The Spring container is able to autowire relationships
between collaborating beans. This means that it is possible to automatically
let Spring resolve collaborators (other beans) for your bean by inspecting the
contents of the BeanFactory. The autowiring functionality has five modes.
- no
- byName
- byType
- constructor
- autodirect
17. What is
DelegatingVariableResolver?
Spring
provides a custom JavaServer Faces VariableResolver implementation that extends
the standard Java Server Faces managed beans mechanism which lets you use JSF
and Spring together. This variable resolver is called as
DelegatingVariableResolver
18. How to
integrate Java Server Faces (JSF) with Spring?
JSF and Spring do
share some of the same features, most noticeably in the area of IOC services.
By declaring JSF managed-beans in the faces-config.xml configuration file, you
allow the FacesServlet to instantiate that bean at startup. Your JSF pages have
access to these beans and all of their properties.We can integrate JSF and
Spring in two ways:
- DelegatingVariableResolver: Spring comes
with a JSF variable resolver that lets you use JSF and Spring together.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<faces-config>
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>
</faces-config>
The DelegatingVariableResolver will first delegate value lookups to the default resolver of the underlying JSF implementation, and then to Spring's 'business context' WebApplicationContext. This allows one to easily inject dependencies into one's JSF-managed beans.
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>
</faces-config>
The DelegatingVariableResolver will first delegate value lookups to the default resolver of the underlying JSF implementation, and then to Spring's 'business context' WebApplicationContext. This allows one to easily inject dependencies into one's JSF-managed beans.
- FacesContextUtils:custom
VariableResolver works well when mapping one's properties to beans in
faces-config.xml, but at times one may need to grab a bean explicitly. The
FacesContextUtils class makes this easy. It is similar to
WebApplicationContextUtils, except that it takes a FacesContext parameter
rather than a ServletContext parameter.
ApplicationContext ctx =
FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
19. What is
Java Server Faces (JSF) - Spring integration mechanism?
Spring provides a custom JavaServer Faces VariableResolver
implementation that extends the standard JavaServer Faces managed beans
mechanism. When asked to resolve a variable name, the following algorithm is
performed:
- Does a bean with
the specified name already exist in some scope (request, session,
application)? If so, return it
- Is there a
standard JavaServer Faces managed bean definition for this variable name?
If so, invoke it in the usual way, and return the bean that was created.
- Is there
configuration information for this variable name in the Spring
WebApplicationContext for this application? If so, use it to create and
configure an instance, and return that instance to the caller.
- If there is no
managed bean or Spring definition for this variable name, return null
instead.
- BeanFactory also
takes part in the life cycle of a bean, making calls to custom
initialization and destruction methods.
As a result of this algorithm, you can transparently use either
JavaServer Faces or Spring facilities to create beans on demand.
20. What is
Significance of JSF- Spring integration ?
Spring - JSF integration is useful when an event handler wishes
to explicitly invoke the bean factory to create beans on demand, such as a bean
that encapsulates the business logic to be performed when a submit button is
pressed.
0 comments:
Post a Comment