Spring Interview Questions - 2
Question: What are the pros or benefits of Spring framework ?
The pros of Spring framework are as follows:
- Spring is an open source framework and free to download.
- Spring has layered architecture. You can select the feature you 
wants, you can have Struts MVC and Springs IOC container in one 
application itself. Eventhough spring has MVC framework if you want you 
can opt out.
- Spring Enables Plain Old Java Object (POJO) Programming. POJO programming enables continuous integration and testability.
- Dependency Injection is really cool stuff, spring 3.0 onwards the 
introduction of component-scan/autowiring and Spring Expression Language
 makes it even spicier.
- spring is lightweight.
 
Question: What is Dependency Injection/Inversion Of Control(IOC) in Spring framework ?
 
The 
basic concept of the Dependency Injection or Inversion of Control is 
that, programmer do not need to create the objects, instead just 
describe how it should be created. No need to directly connect your 
components and services together in program, instead just describe which
 services are needed by which components in a configuration file/xml 
file. The Spring IOC container is then responsible for binding it all 
up.
In other
 words, while applying Inversion Of Control, at the time of object 
creation, objects are given their dependencies by some external entity 
that coordinates each object in the system. That means, dependencies are
 injected into objects at the time of their creation. So, Inversion of 
Control means an inversion of responsibility with regard to how an 
object obtains references to collaborating objects.
Question: What are the different types of Inversion of Control or dependency injection ?
 
There are three different types of Inversion of Control or dependency injection:
- Setter Injection: Dependencies are injected through JavaBeans properties (ex: setter/Getter methods in bean objects).
- Constructor Injection: Dependencies are assigned as constructor parameters.
- Interface Injection: Injection is done through an interface.
Constructor and Setter Injection are the two dependency injection method which Spring supports.
Question: What are the advantages or Pros of IOC (Dependency Injection) ?
Advantages of Dependency Injection/Inversion of Control are as follows:
- Dependency Injection minimizes the amount of code in any application. Dependency is handled by the framework itself.
- Dependency
 Injection makes developers life easier. With Inversion of Control 
containers developers do not need to think about how services are 
created and how to get references to the ones he needs.
- Easily
 scalable applications. It’s very easy to add additional services by 
adding a new constructor or a getter/setter method with a minimal 
configuration. With Spring Framework 3.0, its even easier as 
<context:component-scan base-package=”com.blah.blah”/> will do 
everything for you, you don’t need to add getter and setter method and 
beans for each dependency injection, just autowire the services wherever
 it needed.<Read how spring 3.0 made a developers life easier>
- Dependency
 Injection makes your application more test-friendly by not demanding 
any JNDI lookup mechanisms or singletons in your test cases. IOC 
containers make testing and switching implementations easy by allowing 
you to inject your own objects into the object under test.
- Comparing
 to other options like factory design pattern the IOC container is 
injecting the dependency into requesting piece of code where as the 
factory design pattern is more intrusive and components or services need
 to be requested explicitly.
- IOC containers support eager instantiation and lazy loading of services.
- IOC
 Containers provide support for instantiation of cyclical dependencies, 
managed objects, life cycles management and dependency resolution 
between managed objects etc.
Question: What are the difference between BeanFactory and ApplicationContext in spring?
 
| 
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 life-cycle events, and validation. | 
Doesn’t support. | 
| 
Support  many enterprise services such JNDI access, EJB integration, remoting | 
Doesn’t support. | 
Question: What is difference between singleton and prototype bean?
Ans: 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.
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.
<bean id="createNewStock" class="springexample.stockMarket.CreateNewStockAccont" singleton=”false”> 
     <property name="newBid"/>
</bean>
Question: What is bean wiring?
Ans: 
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.
Question: What are the important beans lifecycle methods?
Ans: 
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.
Question: Explain Bean-LifeCycle.
Ans: Spring framework
 is based on IOC so we call it as IOC container also. So Spring beans 
reside inside the IOCcontainer. Spring beans are nothing but Plain old 
java object (POJO).
Following steps explain their life cycle inside container.
- Container will look the bean definition inside configuration file (e.g. bean.xml).
- 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 before the 
properties for the Bean are set.
- If an init() method is specified for the bean, it will be called.
- If 
the Bean class implements the DisposableBean interface, then the method 
destroy() will be called when the Application no longer needs the 
bean reference.
- 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: How can you override beans default lifecycle methods?
Ans: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.
| 
 
 
 
 | 
<beans> 
  <bean id="bar" class="com.act.Foo" 
     init-method="fooSetup" destroy="fooTeardown"/> 
</beans> 
 | 
Question: 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.
Question: 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.
| 
 
 
 | 
<beans> 
     <bean id="bar" class="com.act.Foo" Autowire="autowire type"/> 
</beans> 
 | 
Question: How do add a bean in spring application?
| 
 
 
 
 
 
 
 | 
<?xml version="1.0" encoding="UTF-8"?> 
  <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
<beans> 
   <bean id="foo" class="com.act.Foo"/> 
        <bean id="bar" class="com.act.Bar"/ 
</beans> | 
In the bean tag the id attribute specifies the bean name and the class attribute specifies the fully qualified class name.
Question: What are different types of Autowire types?
There are four different types by which autowiring can be done.
- byName
- byType
- constructor
- autodetect
Question: 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.
Question: 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.
Question: 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.
Question:  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.
Question: 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.
Question: 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.
Question: 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.
Question: 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.
Question: What are the different points where weaving can be applied?
- Compile Time
- Classload Time
- Runtime
Question: What are the different advice types in spring?
- Around : Intercepts the calls to the target method
- Before : This is called before the target method is invoked
- After : This is called after the target method is returned
- 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
 
Question: Explain about PreparedStatementCreator?
Ans: 
PreparedStatementCreator is one of the most common used interfaces for 
writing data to database. The interface has one method 
createPreparedStatement().
| 
1 
2 | 
PreparedStatement <strong>createPreparedStatement</strong> 
(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.