What
is Spring Framework?
It is a lightweight, loosely coupled and integrated
framework for developing enterprise applications in java.
What
are some of the important features and advantages of Spring Framework?
Spring Framework is built on top of two design
concepts – Dependency Injection and Aspect Oriented Programming.
Some of the features of spring framework are:
- 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.
- Inversion of control (IOC):
Loose
coupling is achieved in spring using the technique Inversion of Control. Dependency
Injection or Inversion of Control to write components that are independent of
each other, spring container takes care of wiring them together to achieve our
work.
- Aspect oriented (AOP):
Spring
supports Aspect oriented programming and enables cohesive development by
separating application business logic from system services.
- Container:
Spring
IoC container manages Spring Bean life cycle and project specific
configurations such as JNDI lookup.
- MVC Framework:
Spring
MVC framework can be used to create web applications as well as restful web
services capable of returning XML as well as JSON response.
- 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.
- 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
Some of the advantages of using Spring Framework
are:
- 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
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.
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.
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.
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
How many modules are there in Spring? What are they?
Spring
comprises of seven modules. They are.
- The core container:
The
core container provides the essential functionality of the Spring framework. A
primary component of the core container is the BeanFactory, an
implementation of the Factory pattern. The BeanFactory applies the Inversion
of Control (IOC) pattern to separate an application's configuration
and dependency specification from the actual application code.
- Spring context:
The
Spring context is a configuration file that provides context information to the
Spring framework. The Spring context includes enterprise services such as JNDI,
EJB, e-mail, internalization, validation, and scheduling functionality.
- Spring AOP:
The Spring AOP module integrates aspect-oriented
programming functionality directly into the Spring framework, through its
configuration management feature. As a result you can easily AOP-enable any
object managed by the Spring framework. The Spring AOP module provides
transaction management services for objects in any Spring-based application.
With Spring AOP you can incorporate declarative transaction management into
your applications without relying on EJB components.
- Spring DAO:
The
Spring JDBC DAO abstraction layer offers a meaningful exception hierarchy for
managing the exception handling and error messages thrown by different database
vendors. The exception hierarchy simplifies error handling and greatly reduces
the amount of exception code you need to write, such as opening and closing
connections. Spring DAO's JDBC-oriented exceptions comply to its generic DAO
exception hierarchy.
- Spring ORM:
The
Spring framework plugs into several ORM frameworks to provide its Object
Relational tool, including JDO, Hibernate, and iBatis SQL Maps. All of these
comply to Spring's generic transaction and DAO exception hierarchies.
- Spring Web module:
The
Web context module builds on top of the application context module, providing
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.
- Spring MVC
framework:
The
Model-View-Controller (MVC) framework is a full-featured MVC implementation for
building Web applications. The MVC framework is highly configurable via
strategy interfaces and accommodates numerous view technologies including JSP,
Velocity, Tiles, iText, and POI.
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.
- Constructor
Injection:
Constructor-based
DI is realized by invoking a constructor with a number of arguments, each
representing a collaborator.
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.
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.
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
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.
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.
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.
What do
you mean by Bean wiring ?
The act of creating associations between application
components (beans) within the Spring container is referred to as Bean wiring.
What is autowiring in
spring? What are the autowiring modes?
Autowiring
enables the programmer to inject the bean automatically. We don't need to write
explicit injection logic.
Let's
see the code to inject bean using dependency injection.
The
autowiring modes are given below:
No.
|
Mode
|
Description
|
1)
|
no
|
this
is the default mode, it means autowiring is not enabled.
|
2)
|
byName
|
injects
the bean based on the property name. It uses setter method.
|
3)
|
byType
|
injects
the bean based on the property type. It uses setter method.
|
4)
|
constructor
|
It
injects the bean using constructor
|
What are the different bean
scopes in spring?
There
are 5 bean scopes in spring framework.
No.
|
Scope
|
Description
|
1)
|
singleton
|
The
bean instance will be only once and same instance will be returned by the IOC
container. It is the default scope.
|
2)
|
prototype
|
The
bean instance will be created each time when requested.
|
3)
|
request
|
The
bean instance will be created per HTTP request.
|
4)
|
session
|
The
bean instance will be created per HTTP session.
|
5)
|
globalsession
|
The
bean instance will be created per HTTP global session. It can be used in
portlet context only.
|
In which scenario, you will
use singleton and prototype scope?
Singleton
scope should be used with EJB stateless
session bean and prototype scope with EJB stateful session bean.
What are the transaction management
supports provided by spring?
Spring
framework provides two type of transaction management supports:
- Programmatic
Transaction Management: should be used for few
transaction operations.
- Declarative
Transaction Management: should be used for many
transaction operations.
What are the benefits of the Spring Framework transaction management
?
The
Spring Framework provides a consistent abstraction for transaction management
that delivers the following benefits:
- Provides a
consistent programming model across different transaction APIs such as
JTA, JDBC, Hibernate, JPA, and JDO.
- Supports declarative
transaction management.
- Provides a simpler
API for programmatic transaction management than a number of complex transaction
APIs such as JTA.
- Integrates very well
with Spring's various data access abstractions.
Why most users of the Spring Framework choose
declarative transaction management ?
Most
users of the Spring Framework choose declarative transaction management because
it is the option with the least impact on application code, and hence is most
consistent with the ideals of a non-invasive lightweight container.
What is AOP?
AOP
is an acronym for Aspect Oriented Programming. It is a methodology that divides
the program logic into pieces or parts or concerns.
It
increases the modularity and the key unit is Aspect
AOP
breaks the program logic into distinct parts (called concerns). It is used to
increase modularity by cross-cutting concerns.
A cross-cutting
concern is a concern that can affect the whole application and should
be centralized in one location in code as possible, such as transaction management,
authentication, logging, security etc.
What are the advantages of
spring AOP?
AOP
enables you to dynamically add or remove concern before or after the business
logic. It is pluggable and easy to maintain.
Why use AOP?
It
provides the pluggable way to dynamically add the additional concern before,
after or around the actual logic. Suppose there are 10 methods in a class as
given below:
class A{
public void m1(){...}
public void m2(){...}
public void m3(){...}
public void m4(){...}
public void m5(){...}
public void n1(){...}
public void n2(){...}
public void p1(){...}
public void p2(){...}
public void p3(){...}
}
There are 5 methods that starts from m, 2
methods that starts from n and 3 methods that starts from p.
Understanding Scenario I have to
maintain log and send notification after calling methods that starts from m.
Problem without AOP We can call
methods (that maintains log and sends notification) from the methods starting
with m. In such scenario, we need to write the code in all the 5 methods.
But, if client says in future, I don't
have to send notification, you need to change all the methods. It leads to the
maintenance problem.
Solution with AOP We don't
have to call methods from the method. Now we can define the additional concern
like maintaining log, sending notification etc. in the method of a class. Its
entry is given in the xml file.
In future, if client says to remove the
notifier functionality, we need to change only in the xml file. So, maintenance
is easy in AOP.
Where use AOP?
AOP
is mostly used in following cases:
- to provide
declarative enterprise services such as declarative transaction
management.
- It allows users to
implement custom aspects.
What are the AOP
terminology?
AOP
terminologies or concepts are as follows:
- JoinPoint
- Advice
- Pointcut
- Aspect
- Introduction
- Target Object
- Interceptor
- AOP Proxy
- Weaving
Join point
Join
point is any point in your program such as method execution, exception
handling, field access etc. Spring supports only method execution join point.
Advice
Advice
represents an action taken by an aspect at a particular join point. There are
different types of advices:
- Before Advice:
it executes before a join point.
- After Returning
Advice: it executes after a joint point
completes normally.
- After Throwing
Advice: it executes if method exits by
throwing an exception.
- After (finally)
Advice: it executes after a join point
regardless of join point exit whether normally or exceptional return.
- Around Advice:
It executes before and after a join point.
Pointcut
It
is an expression language of AOP that matches join points.
Introduction
It
means introduction of additional method and fields for a type. It allows you to
introduce new interface to any advised object.
Target Object
It
is the object i.e. being advised by one or more aspects. It is also known as
proxied object in spring because Spring AOP is implemented using runtime
proxies.
Aspect
It
is a class that contains advices, joinpoints etc.
Interceptor
It
is an aspect that contains only one advice.
AOP Proxy
It
is used to implement aspect contracts, created by AOP framework. It will be a
JDK dynamic proxy or CGLIB proxy in spring framework.
Weaving
It
is the process of linking aspect with other application types or objects to
create an advised object. Weaving can be done at compile time, load time or
runtime. Spring AOP performs weaving at runtime.
AOP Implementations
AOP
implementations are provided by:
- AspectJ
- Spring AOP
- JBoss AOP
What is Spring MVC framework?
The
Spring web MVC framework provides model-view-controller architecture
and ready components that can be used to develop flexible and loosely coupled
web applications. The
MVC pattern results in separating the different aspects of the application
(input logic, business logic, and UI logic), while providing a loose coupling
between model, view and controller parts of application. Spring framework
provides lots of advantages over other MVC frameworks e.g.
- Clear
separation of roles – controller, validator, command object, form object,
model object, DispatcherServlet, handler mapping, view resolver, etc. Each
role can be fulfilled by a specialized object.
- Powerful
and straightforward configuration of both framework and application
classes as JavaBeans.
- Reusable
business code – no need for duplication. You can use existing business
objects as command or form objects instead of mirroring them in order to
extend a particular framework base class.
- Customizable
binding and validation
- Customizable
handler mapping and view resolution
- Customizable
locale and theme resolution
- A
JSP form tag library, introduced in Spring 2.0, that makes writing forms
in JSP pages much easier. etc.
What is the front controller
class of Spring MVC?
A front controller is
defined as “a controller which handles all requests for a Web Application.” DispatcherServlet
(actually a servlet) is the front controller in Spring MVC that intercepts
every request and then dispatches/forwards requests to an appropriate
controller.
When a web request is
sent to a Spring MVC application, dispatcher servlet first receives the
request. Then it organizes the different components configured in Spring’s web
application context (e.g. actual request handler controller and view resolvers)
or annotations present in the controller itself, all needed to handle the
request.
What does @Controller
annotation?
The @Controller annotation
marks the class as controller class. It is applied on the class.
What does @RequestMapping
annotation?
The @RequestMapping annotation
maps the request with the method. It is applied on the method.
What does the ViewResolver
class?
The View
Resolver class resolves the view component to be invoked for the
request. It defines prefix and suffix properties to resolve the view component.
Which ViewResolver class is
widely used?
The org.springframework.web.servlet.view.InternalResourceViewResolver class
is widely used.
Does spring MVC provide
validation support?
Yes, Spring supports
validations primarily into two ways.
- Using JSR-303 Annotations and
any reference implementation e.g. Hibernate Validator
- Using custom implementation
of org.springframework.validation.Validatorinterface
No comments:
Post a Comment