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.
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.
loose coupling
spring takes responsibily of crating a object and managing
the wiring between the object,
where as a frame work it solve problem in solving some
complixity of using jdbc , jmax etc.
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.
- 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.
- Aspect oriented
(AOP):
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.
- 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.
- 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
7. 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.
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.
- Constructor
Injection:
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.
"http://www.springframework.org/dtd/spring-beans.dtd">
org.springframework.web.jsf.DelegatingVariableResolver
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.
21. How to
integrate your Struts application with Spring?
To integrate your Struts
application with Spring, we have two options:
- Configure Spring
to manage your Actions as beans, using the ContextLoaderPlugin, and set
their dependencies in a Spring context file.
- Subclass
Spring's ActionSupport classes and grab your Spring-managed beans
explicitly using a getWebApplicationContext() method.
25. What
are Bean scopes in Spring Framework ?
The
Spring Framework supports exactly five scopes (of which three are available
only if you are using a web-aware ApplicationContext). The scopes supported are
listed below:
Scope
|
Description
|
singleton
|
Scopes a single bean
definition to a single object instance per Spring IoC container.
|
prototype
|
Scopes a single bean
definition to any number of object instances.
|
request
|
Scopes a single bean
definition to the lifecycle of a single HTTP request; that is each and every
HTTP request will have its own instance of a bean created off the back of a
single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.
|
session
|
Scopes a single bean
definition to the lifecycle of a HTTP Session.
Only valid in the context of a web-aware Spring ApplicationContext.
|
global session
|
Scopes a single bean
definition to the lifecycle of a global HTTP Session. Typically only valid when used in a portlet context. Only
valid in the context of a web-aware Spring ApplicationContext.
|
26. What
is AOP?
Aspect-oriented programming, or AOP, is a
programming technique that allows programmers to modularize crosscutting
concerns, or behavior that cuts across the typical divisions of responsibility,
such as logging and transaction management. The core construct of AOP is the
aspect, which encapsulates behaviors affecting multiple classes into reusable
modules.
27. How
the AOP used in Spring?
AOP
is used in the Spring Framework: To
provide declarative enterprise services, especially as a replacement for EJB
declarative services. The most important such service is declarative
transaction management, which builds on the Spring Framework's transaction
abstraction.To allow users to implement custom aspects, complementing their use
of OOP with AOP.
28. What
do you mean by Aspect ?
A modularization of a concern that cuts across
multiple objects. Transaction management is a good example of a crosscutting
concern in J2EE applications. In Spring AOP, aspects are implemented using
regular classes (the schema-based approach) or regular classes annotated with
the @Aspect annotation (@AspectJ style).
29. What
do you mean by JointPoint?
A point during the execution of a program, such as the execution
of a method or the handling of an exception. In Spring AOP, a join point always
represents a method execution.
30. What
do you mean by Advice?
Action taken by an aspect at a particular join point. Different
types of advice include "around," "before" and
"after" advice. Many AOP frameworks, including Spring, model an
advice as an interceptor, maintaining a chain of interceptors
"around" the join point.
31. What
are the types of Advice?
Types of advice:
- Before
advice:
Advice that executes before a join point, but which does not have the
ability to prevent execution flow proceeding to the join point (unless it
throws an exception).
- After
returning advice:
Advice to be executed after a join point completes normally: for example,
if a method returns without throwing an exception.
- After
throwing advice:
Advice to be executed if a method exits by throwing an exception.
- After
(finally) advice:
Advice to be executed regardless of the means by which a join point exits
(normal or exceptional return).
- Around
advice:
Advice that surrounds a join point such as a method invocation. This is
the most powerful kind of advice. Around advice can perform custom
behavior before and after the method invocation. It is also responsible
for choosing whether to proceed to the join point or to shortcut the
advised method execution by returning its own return value or throwing an
exception
32. What
are the types of the transaction management Spring supports ?
Spring
Framework supports:
- Programmatic
transaction management.
- Declarative
transaction management.
33. 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.
34. 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.
35. Explain
the similarities and differences between EJB CMT and the Spring Framework's
declarative transaction
management ?
management ?
The
basic approach is similar: it is possible to specify transaction behavior (or
lack of it) down to individual method level. It is
possible to make a setRollbackOnly() call within a transaction context if necessary. The differences are:
possible to make a setRollbackOnly() call within a transaction context if necessary. The differences are:
- Unlike EJB CMT,
which is tied to JTA, the Spring Framework's declarative transaction
management works in any environment. It can work with JDBC, JDO, Hibernate
or other transactions under the covers, with configuration changes only.
- The Spring
Framework enables declarative transaction management to be applied to any
class, not merely special classes such as EJBs.
- The Spring
Framework offers declarative rollback rules: this is a feature with no EJB
equivalent. Both programmatic and declarative support for rollback rules
is provided.
- The Spring
Framework gives you an opportunity to customize transactional behavior,
using AOP. With EJB CMT, you have no way to influence the container's
transaction management other than setRollbackOnly().
- The Spring
Framework does not support propagation of transaction contexts across
remote calls, as do high-end application servers.
37. When to
use programmatic and declarative transaction management ?
Programmatic
transaction management is usually a good idea only if you have a small number
of transactional operations.
On the other hand, if your application has numerous transactional operations, declarative transaction management is usually worthwhile. It keeps transaction management out of business logic, and is not difficult to configure.
On the other hand, if your application has numerous transactional operations, declarative transaction management is usually worthwhile. It keeps transaction management out of business logic, and is not difficult to configure.
38. Explain
about the Spring DAO support ?
The Data Access Object
(DAO) support in Spring is aimed at making it easy to work with data access
technologies like JDBC, Hibernate or JDO in a consistent way. This allows one
to switch between the persistence technologies fairly easily and it also allows
one to code without worrying about catching exceptions that are specific to
each technology.
39. What
are the exceptions thrown by the Spring DAO classes ?
Spring DAO classes throw exceptions which are subclasses ofDataAccessException(org.springframework.dao.DataAccessException).Spring
provides a convenient translation from technology-specific exceptions like SQLExceptionto its own exception
class hierarchy with the DataAccessException as the root exception. These exceptions wrap the original
exception.
40. What is SQLExceptionTranslator ?
SQLExceptionTranslator, is an interface to be implemented by classes that can translate
between SQLExceptions and Spring's own data-access-strategy-agnosticorg.springframework.dao.DataAccessException.
41. What
is Spring's JdbcTemplate ?
Spring's JdbcTemplate is central class to interact with a
database through JDBC. JdbcTemplate provides many convenience methods for
doing things such as converting database data into primitives or objects,
executing prepared and callable statements, and providing custom database error
handling.
JdbcTemplate template = new JdbcTemplate(myDataSource);
42. What is
PreparedStatementCreator ?
PreparedStatementCreator:
- Is one of the
most common used interfaces for writing data to database.
- Has one method – createPreparedStatement(Connection)
- Responsible for
creating a PreparedStatement.
- Does not need to
handle SQLExceptions.
43. What is
SQLProvider ?
SQLProvider:
- Has one method – getSql()
- Typically
implemented by PreparedStatementCreator implementers.
- Useful for
debugging.
44. What is
RowCallbackHandler ?
The RowCallbackHandler interface
extracts values from each row of a ResultSet.
- Has one method – processRow(ResultSet)
- Called for each
row in ResultSet.
- Typically
stateful.
45. What
are the differences between EJB and Spring ?
Spring
and EJB feature comparison.
Feature
|
EJB
|
Spring
|
Transaction
management
|
|
|
Declarative
transaction support
|
|
|
Persistence
|
Supports
programmatic bean-managed persistence and declarative container managed
persistence.
|
Provides
a framework for integrating with several persistence technologies, including
JDBC, Hibernate, JDO, and iBATIS.
|
Declarative
security
|
|
|
Distributed
computing
|
Provides
container-managed remote method calls.
|
Provides
proxying for remote calls via RMI, JAX-RPC, and web services.
|
1) What is Spring Framework?
Spring is a lightweight inversion of control and aspect-oriented
container framework. Spring Framework’s contribution towards java community is
immense and spring community is the largest and most innovative community by
size. They have numerous projects under their portfolio and have their own spring dmServer for running spring applications. This community is acquired by
VMWare, a leading cloud compting company for enabling the java application in
the cloud by using spring stacks. If you are looking to read more about the
spring framework and its products, please read in their official site Spring
Source.
2) Explain 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.
·
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.
·
Aspect oriented (AOP) : 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.
·
Framework : Spring provides most of the intra functionality leaving rest of the
coding to the developer.
3) What are the different modules in Spring
framework?
·
The Core container
module
·
Application context
module
·
AOP module (Aspect
Oriented Programming)
·
JDBC abstraction and
DAO module
·
O/R mapping
integration module (Object/Relational)
·
Web module
·
MVC framework module
4) What is the structure of Spring framework?
5) What is the Core container module?
This module is provides the fundamental functionality of the
spring framework. In this module BeanFactory is the heart of any spring-based application. The entire
framework was built on the top of this module. This module makes the Spring
container.
6) What is Application context module?
The Application context module makes spring a framework. This
module extends the concept of BeanFactory, providing support for internationalization (I18N) messages,
application lifecycle events, and validation. This module also supplies many
enterprise services such JNDI access, EJB integration, remoting, and scheduling. It also provides
support to other framework.
7) What is AOP module?
The AOP module is used for developing aspects for our Spring-enabled
application. Much of the support has been provided by the AOP Alliance in order
to ensure the interoperability between Spring and other AOP frameworks. This module also introduces
metadata programming to Spring. Using Spring’s metadata support, we will be able to add annotations to our source code that instruct Spring on where and how to apply aspects.
8)What is JDBC abstraction and DAO module?
Using this module we can keep up the database code clean and
simple, and prevent problems that result from a failure to close database
resources. A new layer of meaningful exceptions on top of the error messages
given by several database servers is bought in this module. In addition, this
module uses Spring’s AOP module to provide transaction management services for
objects in a Spring application.
9) What are object/relational mapping
integration module?
Spring also supports for using of an object/relational mapping
(ORM) tool over straight JDBC by providing the ORM module. Spring provide
support to tie into several popularORM frameworks, including Hibernate, JDO, and iBATIS SQL Maps. Spring’s transaction management supports
each of these ORM frameworks as well as JDBC.
10) 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.
11) What is web module?
Spring comes with a
full-featured MVC framework for building web applications. Although Spring can
easily be integrated with other MVC frameworks, such as Struts, Spring’s MVC
framework uses IoC to provide for a clean separation of controller logic from
business objects. It also allows you to decoratively bind request parameters to
your business objects. It also can take advantage of any of Spring’s other
services, such as I18N messaging and validation.
12) What is a BeanFactory?
A BeanFactory is an
implementation of the factory pattern that applies Inversion of Control to
separate the application’s configuration and dependencies from the actual
application code.
13) What is AOP Alliance?
AOP Alliance is an
open-source project whose goal is to promote adoption of AOP and
interoperability among different AOP implementations by defining a common set
of interfaces and components.
14) What is Spring configuration file?
Spring configuration
file is an XML file. This file contains the classes information and describes
how these classes are configured and introduced to each other.
15) What does a simple spring application
contain?
These applications are
like any Java application. They are made up of several classes, each performing
a specific purpose within the application. But these classes are configured and
introduced to each other through an XML file. This XML file describes how to
configure the classes, known as the Spring configuration file.
16) What is XMLBeanFactory?
BeanFactory has many implementations in Spring. But one of
the most useful one isorg.springframework.beans.factory.xml.XmlBeanFactory, which loads its beans based on the
definitions contained in an XML file. To create an XmlBeanFactory, pass a java.io.InputStream to the
constructor. The InputStream will provide the XML to the factory. For
example, the following code snippet uses a java.io.FileInputStream to provide a bean definition XML file to XmlBeanFactory.
1
2
|
BeanFactory factory
= new XmlBeanFactory(
new FileInputStream("beans.xml"));
|
To retrieve the bean
from a BeanFactory, call the getBean() method by passing the name of the bean
you want to retrieve.
1
|
MyBean myBean =
(MyBean) factory.getBean("myBean");
|
17) What are important ApplicationContext
implementations in spring framework?
·
ClassPathXmlApplicationContext – This context loads a context definition from
an XML file located in the class path, treating context definition files as
class path resources.
·
FileSystemXmlApplicationContext – This context loads a context definition from
an XML file in the filesystem.
·
XmlWebApplicationContext – This context loads the context definitions
from an XML file contained within a web application.
18) Explain Bean lifecycle in Spring
framework?
1. The spring container finds the bean’s definition
from the XML file and instantiates the bean.
2. Using the dependency injection, spring
populates all of the properties as specified in the bean definition.
3. If the bean implements the BeanNameAware interface, the factory callssetBeanName() passing the bean’s ID.
4. If the bean implements the BeanFactoryAware interface, the factory callssetBeanFactory(), passing an instance of itself.
5. If there are any BeanPostProcessors associated with the bean, their post-
ProcessBeforeInitialization() methods will be called.
6. If an init-method is specified for the bean,
it will be called.
7. Finally, if there are any BeanPostProcessors associated with the bean, theirpostProcessAfterInitialization() methods will be called.
19) What is bean wiring?
Combining together
beans within the Spring container is known as bean wiring or wiring. When
wiring beans, you should tell the container what beans are needed and how the
container should use dependency injection to tie them together.
20) How do add a bean in spring application?
1
2
3
4
5
6
7
|
encoding="UTF-8"?>
|
In the bean tag the id
attribute specifies the bean name and the class attribute specifies the fully
qualified class name.
21) What are singleton beans and how can you
create prototype beans?
Beans defined in
spring framework are singleton beans. There is an attribute in bean tag named
‘singleton’ if specified true then bean becomes singleton and if set to false
then the bean becomes a prototype bean. By default it is set to true. So, all
the beans in spring framework are by default singleton beans.
1
2
3
4
|
singleton="false"/>
|
22) What are the important beans lifecycle
methods?
There are two
important bean lifecycle methods. The first one is setup which is called when
the bean is loaded in to the container. The second method is the teardown
method which is called when the bean is unloaded from the container.
23) How can you override beans default
lifecycle methods?
The bean tag has two
more important attributes with which you can define your own custom
initialization and destroy methods. Here I have shown a small demonstration.
Two new methods fooSetup and fooTeardown are to be added to your Foo class.
1
2
3
4
|
init-method="fooSetup" destroy="fooTeardown"/>
|
24) What are Inner Beans?
When wiring beans, if
a bean element is embedded to a property tag directly, then that bean is said
to the Inner Bean. The drawback of this bean is that it cannot be reused
anywhere else.
25) What are the different types of bean
injections?
There are two types of bean injections.
1. By setter
2. By constructor
26) What is Auto wiring?
You can wire the beans
as you wish. But spring framework also does this work for you. It can auto wire
the related beans together. All you have to do is just set the autowire
attribute of bean tag to an autowire type.
1
2
3
|
27) What are different types of Autowire
types?
There are four
different types by which autowiring can be done.
o
byName
o
byType
o
constructor
o
autodetect
28) What are the different types of events
related to Listeners?
There are a lot of events related to ApplicationContext of spring framework. All the events are
subclasses of org.springframework.context.Application-Event. They are
·
ContextClosedEvent –
This is fired when the context is closed.
·
ContextRefreshedEvent
– This is fired when the context is initialized or refreshed.
·
RequestHandledEvent –
This is fired when the web context handles any request.
29) What is an Aspect?
An aspect is the
cross-cutting functionality that you are implementing. It is the aspect of your
application you are modularizing. An example of an aspect is logging. Logging
is something that is required throughout an application. However, because
applications tend to be broken down into layers based on functionality, reusing
a logging module through inheritance does not make sense. However, you can
create a logging aspect and apply it throughout your application using AOP.
30) What is a Jointpoint?
A joinpoint is a point
in the execution of the application where an aspect can be plugged in. This
point could be a method being called, an exception being thrown, or even a
field being modified. These are the points where your aspect’s code can be
inserted into the normal flow of your application to add new behavior.
31) What is an Advice?
Advice is the
implementation of an aspect. It is something like telling your application of a
new behavior. Generally, and advice is inserted into an application at
joinpoints.
32) What is a Pointcut?
A pointcut is
something that defines at what joinpoints an advice should be applied. Advices
can be applied at any joinpoint that is supported by the AOP framework. These
Pointcuts allow you to specify where the advice can be applied.
33) What is an Introduction in AOP?
An introduction allows
the user to add new methods or attributes to an existing class. This can then
be introduced to an existing class without having to change the structure of
the class, but give them the new behavior and state.
34) What is a Target?
A target is the class
that is being advised. The class can be a third party class or your own class
to which you want to add your own custom behavior. By using the concepts of
AOP, the target class is free to center on its major concern, unaware to any
advice that is being applied.
35) What is a Proxy?
A proxy is an object
that is created after applying advice to a target object. When you think of
client objects the target object and the proxy object are the same.
36) What is meant by Weaving?
The process of
applying aspects to a target object to create a new proxy object is called as
Weaving. The aspects are woven into the target object at the specified
joinpoints.
37) What are the different points where
weaving can be applied?
·
Compile Time
·
Classload Time
·
Runtime
38) What are the different advice types in
spring?
o
Around : Intercepts the calls
to the target method
o
Before : This is called before
the target method is invoked
o
After : This is called after
the target method is returned
o
Throws : This is called when
the target method throws and exception
·
Around :
org.aopalliance.intercept.MethodInterceptor
·
Before : org.springframework.aop.BeforeAdvice
·
After :
org.springframework.aop.AfterReturningAdvice
·
Throws :
org.springframework.aop.ThrowsAdvice
39) What are the different types of
AutoProxying?
·
BeanNameAutoProxyCreator
·
DefaultAdvisorAutoProxyCreator
·
Metadata autoproxying
40) What is the Exception class related to all
the exceptions that are thrown in spring applications?
1
2
|
DataAccessException
-
org.springframework.dao.DataAccessException
|
41) What kind of exceptions those spring DAO
classes throw?
The spring’s DAO class
does not throw any technology related exceptions such as SQLException. They
throw exceptions which are subclasses of DataAccessException.
42) What is DataAccessException?
DataAccessException is
a RuntimeException. This is an Unchecked Exception. The user is not forced to
handle these kinds of exceptions.
43) How can you configure a bean to get
DataSource from JNDI?
1
2
3
4
5
6
|
class="org.springframework.jndi.JndiObjectFactoryBean">
|
44) How can you create a DataSource connection
pool?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class="org.apache.commons.dbcp.BasicDataSource">
|
45) How JDBC can be used more efficiently in
spring framework?
JDBC can be used more efficiently with the help of a template
class provided by spring framework called as JdbcTemplate.
46) How JdbcTemplate can be used?
With use of Spring
JDBC framework the burden of resource management and error handling is reduced
a lot. So it leaves developers to write the statements and queries to get the
data to and from the database.
1
|
JdbcTemplate
template = new JdbcTemplate(myDataSource);
|
A simple DAO class
looks like this.
1
2
3
4
5
6
|
public class StudentDaoJdbc
implements StudentDao {
private JdbcTemplate
jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate
jdbcTemplate) {
this.jdbcTemplate
= jdbcTemplate;
}
more..
}
|
The configuration is
shown below.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
47) How do you write data to backend in spring
using JdbcTemplate?
The JdbcTemplate uses several of these callbacks when writing
data to the database. The usefulness you will find in each of these interfaces
will vary. There are two simple interfaces. One is PreparedStatementCreator and the other interface isBatchPreparedStatementSetter.
48) Explain about PreparedStatementCreator?
PreparedStatementCreator
is one of the most common used interfaces for writing data to database. The
interface has one method createPreparedStatement().
1
2
|
PreparedStatement
createPreparedStatement
(Connection conn)
throws SQLException;
|
When this interface is implemented, we should create and return
a PreparedStatement from the Connection argument, and the exception handling is
automatically taken care off. When this interface is implemented, another
interface SqlProvider is also implemented which has a method called getSql() which is used to provide sql strings to
JdbcTemplate.
49) Explain about
BatchPreparedStatementSetter?
If the user what to update more than one row at a shot then he
can go forBatchPreparedStatementSetter. This interface provides two methods
1
2
|
setValues(PreparedStatement
ps, int i) throws SQLException;
int getBatchSize();
|
The getBatchSize()
tells the JdbcTemplate class how many statements to create. And this also determines
how many times setValues() will be called.
50) Explain about RowCallbackHandler and why
it is used?
In order to navigate through the records we generally go for
ResultSet. But spring provides an interface that handles this entire burden and
leaves the user to decide what to do with each row. The interface provided by
spring is RowCallbackHandler. There is a method processRow() which needs to be implemented
so that it is applicable for each and everyrow.
1
|
void processRow(java.sql.ResultSet
rs);
|
Question1: What is IOC or inversion of control?
Ans: This question is first step towards spring and mostly
interviewer starts from this question. As the name implies inversion of control means now
we have inverted the control of creating the object from our own using new
operator to container or framework
Now it’s the responsibility of container to create object as
required.
We maintain one xml file where we configure our components,
services, all the classes and their property. We just need to mention which
service is needed by which component and container will create the object for
us. This concept is known as dependency
injection because
all object dependency (resources) is injected into it by framework.
Example:
In this example CreateNewStockAccont class contain getter and
setter for newBid and container will instantiate newBid and set the value
automatically when it is used.
Question 2: Explain
Bean-LifeCycle.
Ans: Spring framework is based on IOC so we call it as IOC
container also So Beans reside inside the IOC container beans are nothing but
Plain old java object (POJO).
Following steps explain their lifecycle inside container.
1. Container will look the bean definition inside configuration
file (eg.bean.xml).
2 using reflection container will create the object and if any
property is defined inside the bean definition then it will also be set.
3. If the bean implements the BeanNameAware interface, the factory
calls setBeanName() passing the bean’s ID.
4. If the bean implements the BeanFactoryAware interface, the factory calls setBeanFactory(), passing an instance of itself.
5. If there are any BeanPostProcessors associated with the bean, their post- ProcessBeforeInitialization () methods will be called before the properties for the Bean are set.
4. If the bean implements the BeanFactoryAware interface, the factory calls setBeanFactory(), passing an instance of itself.
5. If there are any BeanPostProcessors associated with the bean, their post- ProcessBeforeInitialization () methods will be called before the properties for the Bean are set.
6. If an init-method is specified for the bean, it will be called.
7. If the Bean class implements the DisposableBean interface, then the method destroy() will be called when the Application no longer needs the bean reference.
7. If the Bean class implements the DisposableBean interface, then the method destroy() will be called when the Application no longer needs the bean reference.
8. If the Bean definition in the Configuration file contains a
'destroy-method' attribute, then the corresponding method definition in the
Bean class will be called.
Question 3: what is Bean Factory, have you used XMLBean factory?
Ans: BeanFactory is factory Pattern which is based on IoC. it is
used to make a clear separation between application configuration and
dependency from actual code.
XmlBeanFactory is one of the implementation of bean Factory which
we have used in our project.
org.springframework.beans.factory.xml.XmlBeanFactory is used to
create bean instance defined in our xml file.
BeanFactory factory = new XmlBeanFactory(new
FileInputStream("beans.xml"));
Or
ClassPathResource resorce = new
ClassPathResource("beans.xml");
XmlBeanFactory factory = new XmlBeanFactory(resorce);
XmlBeanFactory factory = new XmlBeanFactory(resorce);
Question 4: what are the difference between BeanFactory and
ApplicationContext in spring?
Ans: This one is very popular spring interview question and often asks in entry level interview. ApplicationContext is preferred way of using spring
because of functionality provided by it and interviewer wanted to check whether
you are familiar with it or not.
ApplicationContext.
|
BeanFactory
|
Here we can have more than one config files possible
|
In this only one config file or .xml file
|
Application contexts can publish events to beans that are
registered as listeners
|
Doesn’t support.
|
Support internationalization (I18N) messages
|
It’s not
|
Support application lifecycle events, and validation.
|
Doesn’t support.
|
Support many enterprise services such JNDI access, EJB
integration, remoting
|
Doesn’t support.
|
Question 5: What are different modules in spring?
Ans: spring have seven core modules
1. The Core
container module
2. Application
context module
3. AOP
module (Aspect Oriented Programming)
4. JDBC abstraction and DAO module
5. O/R
mapping integration module (Object/Relational)
6. Web
module
7. MVC framework
module
Question 6: What is difference between singleton and prototype
bean?
Ans: This is another popular spring interview questions and an important concept to understand. Basically a bean has
scopes which defines their existence on
the application
Singleton: means
single bean definition to a single object instance per Spring IoC container.
Prototype: means a single bean definition to any number of object instances.
Prototype: means a single bean definition to any number of object instances.
Whatever beans we defined in spring framework are singleton beans.
There is an attribute in bean tag named ‘singleton’ if specified true then bean
becomes singleton and if set to false then the bean becomes a prototype bean.
By default it is set to true. So, all the beans in spring framework are by
default singleton beans.
Question 7: What type of transaction Management spring support?
Ans: This spring interview questions is little difficult as compared to previous questions
just because transaction
management is a
complex concept and not every developer familiar with it. Transaction
management is critical in any applications that will interact with the database. The application has to ensure that the data is
consistent and the integrity of the data is maintained. Two type of
transaction management is supported by spring
1. Programmatic transaction mgt.
2. Declarative transaction mgt.
Question 8: What is AOP?
Ans: The core construct of AOP is the aspect, which encapsulates
behaviors affecting multiple classes into reusable modules.
AOP is a programming technique that allows developer to modularize
crosscutting concerns, that cuts across the typical divisions of
responsibility, such as logging
and transaction management. Spring
AOP, aspects are implemented using regular classes or regular classes annotated
with the @Aspect annotation
Question 9: Explain Advice?
Ans: It’s an implementation of aspect; advice is inserted into an
application at join points. Different types of advice include “around,”
“before” and “after” advice
Question 10: What is joint Point and point cut?
Ans: This is not really a spring interview questions I would say an AOP one. AOP is another popular programming
concept which complements OOPS. Join point is an opportunity within code for
which we can apply an aspect. In Spring AOP, a join point always represents a
method execution.
Pointcut: a predicate that matches join points. A point cut is something
that defines at what joinpoints an advice should be applied
Architectural
benefits of Spring
Before we get down to
specifics, let's look at some of the benefits Spring can bring to a project:
·
Spring can effectively
organize your middle tier objects, whether or not you choose to use EJB. Spring
takes care of plumbing that would be left up to you if you use only Struts or
other frameworks geared to particular J2EE APIs. And while it is perhaps most
valuable in the middle tier, Spring's configuration management services can be
used in any architectural layer, in whatever runtime environment.
·
Spring can eliminate the
proliferation of Singletons seen on many projects. In my experience, this is a
major problem, reducing testability and object orientation.
·
Spring can eliminate the
need to use a variety of custom properties file formats, by handling
configuration in a consistent way throughout applications and projects. Ever
wondered what magic property keys or system properties a particular class looks
for, and had to read the Javadoc or even source code? With Spring you simply
look at the class's JavaBean properties or constructor arguments. The use of Inversion of Control andDependency Injection (discussed below) helps achieve this
simplification.
·
Spring can facilitate
good programming practice by reducing the cost of programming to interfaces,
rather than classes, almost to zero.
·
Spring is designed so
that applications built with it depend on as few of its APIs as possible. Most
business objects in Spring applications have no dependency on Spring.
·
Applications built using
Spring are very easy to unit test.
·
Spring can make the use
of EJB an implementation choice, rather than the determinant of application
architecture. You can choose to implement business interfaces as POJOs or local
EJBs without affecting calling code.
·
Spring helps you solve
many problems without using EJB. Spring can provide an alternative to EJB
that's appropriate for many applications. For example, Spring can use AOP to
deliver declarative transaction management without using an EJB container; even
without a JTA implementation, if you only need to work with a single database.
·
Spring provides a
consistent framework for data access, whether using JDBC or an O/R mapping
product such as TopLink, Hibernate or a JDO implementation.
·
Spring provides a
consistent, simple programming model in many areas, making it an ideal
architectural "glue." You can see this consistency in the Spring
approach to JDBC, JMS, JavaMail, JNDI and many other important APIs.
Spring is essentially a technology dedicated to enabling you to
build applications using POJOs. This desirable goal requires a sophisticated framework, which
conceals much complexity from the developer.
Thus Spring really can
enable you to implement the simplest possible solution to your problems. And
that's worth a lot