Java Tutorials


IOC Container

♠ Posted by Java Tutorials

                             Page 1|2|3|4


      IoC Container

  1. IoC Container
  2. Using BeanFactory
  3. Using ApplicationContext
The IoC container is responsible to instantiate, configure and assemble the objects. The IoC container gets informations from the XML file and works accordingly. The main tasks performed by IoC container are:
·         to instantiate the application class
·         to configure the object
·         to assemble the dependencies between the objects
There are two types of IoC containers. They are:
  1. BeanFactory
  2. ApplicationContext

Difference between BeanFactory and the ApplicationContext

                            The org.springframework.beans.factory.BeanFactory and the org.springframework.context.ApplicationContext interfaces acts as the IoC container. The ApplicationContext interface is built on top of the BeanFactory interface. It adds some extra functionality than BeanFactory such as simple integration with Spring's AOP, message resource handling (for I18N), event propagation, application layer specific context (e.g. WebApplicationContext) for web application. So it is better to use ApplicationContext than BeanFactory.

Using BeanFactory

The XmlBeanFactory is the implementation class for the BeanFactory interface. To use the BeanFactory, we need to create the instance of XmlBeanFactory class as given below:
Resource resource=new ClassPathResource("applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(resource);
The constructor of XmlBeanFactory class receives the Resource object so we need to pass the resource object to create the object of BeanFactory.

Using ApplicationContext

The ClassPathXmlApplicationContext class is the implementation class of ApplicationContext interface. We need to instantiate the ClassPathXmlApplicationContext class to use the ApplicationContext as given below:
ApplicationContext context = 
      new ClassPathXmlApplicationContext("applicationContext.xml");
The constructor of ClassPathXmlApplicationContext class receives string, so we can pass the name of the xml file to create the instance of ApplicationContext.

Dependency Injection in Spring

  1. Dependency Injection in Spring
  2. Dependency Lookup
  3. Dependency Injection
Dependency Injection (DI) is a design pattern that removes the dependency from the programming code so that it can be easy to manage and test the application. Dependency Injection makes our programming code loosely coupled. To understand the DI better, Let's understand the Dependency Lookup (DL) first:

Dependency Lookup

The Dependency Lookup is an approach where we get the resource after demand. There can be various ways to get the resource for example:
A obj = new AImpl();
In such way, we get the resource(instance of A class) directly by new keyword. Another way is factory method:
A obj = A.getA();
This way, we get the resource (instance of A class) by calling the static factory method getA().
Alternatively, we can get the resource by JNDI (Java Naming Directory Interface) as:
Context ctx = new InitialContext();
Context environmentCtx = (Context) ctx.lookup("java:comp/env");
A obj = (A)environmentCtx.lookup("A");
There can be various ways to get the resource to obtain the resource. Let's see the problem in this approach.

Problems of Dependency Lookup

There are mainly two problems of dependency lookup.
·         tight coupling The dependency lookup approach makes the code tightly coupled. If resource is changed, we need to perform a lot of modification in the code.
·         Not easy for testing This approach creates a lot of problems while testing the application especially in black box testing.

Dependency Injection

·         The Dependency Injection is a design pattern that removes the dependency of the programs. In such case we provide the information from the external source such as XML file. It makes our code loosely coupled and easier for testing. In such case we write the code as:
class Employee{
Address address;
Employee(Address address){
this.address=address;
}
public void setAddress(Address address){
this.address=address;
}
}
In such case, instance of Address class is provided by external souce such as XML file either by constructor or setter method.

Two ways to perform Dependency Injection in Spring framework

Spring framework provides two ways to inject dependency
  • By Constructor
  • By Setter method

Dependency Injection by Constructor Example

  1. Dependency Injection by constructor
  2. Injecting primitive and string-based values
We can inject the dependency by constructor. The<constructor-arg> subelement of <bean> is used for constructor injection. Here we are going to inject
·         primitive and String-based values
·         Dependent object (contained object)
·         Collection values etc.

Injecting primitive and string-based values

Let's see the simple example to inject primitive and string-based values. We have created three files here:
  • Employee.java
  • applicationContext.xml
  • Test.java
Employee.java
It is a simple class containing two fields id and name. There are four constructors and one method in this class.
package org.sample;
 
public class Employee {
private int id;
private String name;
 
public Employee() {System.out.println("def cons");}
 
public Employee(int id) {this.id = id;}
public Employee(String name) {       
this.name = name;
}
public Employee(int id, String name) {
      this.id = id;
      this.name = name;
}
void show(){
      System.out.println(id+" "+name);
}
  }
 

applicationContext.xml
We are providing the information into the bean by this file. The constructor-arg element invokes the constructor. In such case, parameterized constructor of int type will be invoked. The value attribute of constructor-arg element will assign the specified value. The type attribute specifies that int parameter constructor will be invoked.
<?xml version="1.0" encoding="UTF-8"?>
<beans
      xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
<bean id="e" class="org.sample.Employee">
<constructor-arg value="10" type="int"></constructor-arg></bean></beans>
Test.java
This class gets the bean from the applicationContext.xml file and calls the show method.
package org.sample;
 
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
 
public class Test {
      public static void main(String[] args) {
              Resource r=new ClassPathResource("applicationContext.xml");
              BeanFactory factory=new XmlBeanFactory(r);
              Employee s=(Employee)factory.getBean("e");
              s.show();
              
      }
}
Output:10 null


Injecting string-based values

If you don't specify the type attribute in the constructor-arg element, by default string type constructor will be invoked.
....
<bean id="e" class="org.sample.Employee">
<constructor-arg value="10"></constructor-arg>
</bean>
....
If you change the bean element as given above, string parameter constructor will be invoked and the output will be 0 10.
Output:0 10

You may also pass the string literal as following:
....
<bean id="e" class="org.sample.Employee">
<constructor-arg value="Venkat"></constructor-arg>
</bean>
....
Output:0 Venkat

You may pass integer literal and string both as following
....
<bean id="e" class="org.sample.Employee">
<constructor-arg value="10" type="int" ></constructor-arg>
<constructor-arg value="venkat"></constructor-arg>
</bean>
....
Output:10 venkat
                      

                          Page 1|2|3|4


IOC

♠ Posted by Java Tutorials

                     
                   Page 1|2|3|4

Inversion Of Control (IOC) and Dependency Injection

These are the design patterns that are used to remove dependency from the programming code. They make the code easier to test and maintain. Let's understand this with the following code:
class Employee{
Address address;Employee()
{address=new Address();
}
}
In such case, there is dependency between the Employee and Address (tight coupling). In the Inversion of Control scenario, we do this something like this:
class Employee{
Address address;
Employee(Address address){
this.address=address;
}
}
Thus, IOC makes the code loosely coupled. In such case, there is no need to modify the code if our logic is moved to new environment.
In Spring framework, IOC container is responsible to inject the dependency. We provide metadata to the IOC container either by XML file or annotation.

Advantage of Dependency Injection

·         makes the code loosely coupled so easy to maintain
·         makes the code easy to test


Steps to create spring application

  1. Steps to create spring application
Here, we are going to learn the simple steps to create the first spring application. To run this application, we are not using any IDE. We are simply using the command prompt. Let's see the simple steps to create the spring application
§  create the class
§  create the xml file to provide the values
§  create the test class
§  Load the spring jar files
§  Run the test class

Steps to create spring application

Let's see the 5 steps to create the first spring application.

1) Create Java class

This is the simple java bean class containing the name property only.
package org.sample;
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
            this.name = name;
}
public void displayInfo(){
            System.out.println("Hello: "+name);
}
}

This is simple bean class, containing only one property name with its getters and setters method. This class contains one extra method named displayInfo() that prints the student name by the hello message.

2) Create the xml file

In case of myeclipse IDE, you don't need to create the xml file as myeclipse does this for yourselves. Open the applicationContext.xml file, and write the following code:
<?xml version="1.0" encoding="UTF-8"?>
<beans
                 xmlns="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:p="http://www.springframework.org/schema/p"
                 xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
<bean id="studentbean" class="org.sample.Student">
<property name="name" value="Venkata"></property>
</bean>
 
</beans>
The bean element is used to define the bean for the given class. The property subelement of bean specifies the property of the Student class named name. The value specified in the property element will be set in the Student class object by the IOC container.

3) Create the test class

Create the java class e.g. Test. Here we are getting the object of Student class from the IOC container using the getBean() method of BeanFactory. Let's see the code of test class.
package org.sample;
 
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
 
public class Test {
public static void main(String[] args) {
                 Resource resource=new ClassPathResource("applicationContext.xml");
                 BeanFactory factory=new XmlBeanFactory(resource);
                 
                 Student student=(Student)factory.getBean("studentbean");
                 student.displayInfo();
}
}
 
The Resource object represents the information of applicationContext.xml file. The Resource is the interface and the ClassPathResource is the implementation class of the Reource interface. TheBeanFactory is responsible to return the bean. The XmlBeanFactory is the implementation class of the BeanFactory. There are many methods in the BeanFactory interface. One method is getBean(), which returns the object of the associated class.

4) Load the jar files required for spring framework

There are mainly three jar files required to run this application.
·         org.springframework.core-3.0.1.RELEASE-A
·         com.springsource.org.apache.commons.logging-1.1.1
·         org.springframework.beans-3.0.1.RELEASE-A
For the future use, You can download the required jar files for spring core application.
To run this example, you need to load only spring core jar files.


                    Page 1|2|3|4

Spring FrameWork and Modules

♠ Posted by Java Tutorials

Page 1|2|3|4

Spring Framework

                                       Spring is a lightweight framework. It can be thought of as a framework of frameworks because it provides support to various frameworks such as Struts, Hibernate, Tapestry, EJB, JSF etc. The framework, in broader sense, can be defined as a structure where we find solution of the various technical problems.
                                       The spring framework comprises several modules such as IOC, AOP, DAO, Context, ORM, WEB MVC etc. We will learn these modules in next page. Let's understand the IOC and Dependency Injection first.

Advantages of Spring Framework

There are many advantages of Spring Framework. They are as follows:
1) Lightweight: Spring framework is lightweight because of its POJO implementation. The Spring Framework doesn't force the programmer to inherit any class or implement any interface. That is why it is said non-invasive.
2) Easy to develop JavaEE application: The Dependency Injection feature of Spring Framework and it support to various frameworks makes the easy development of JavaEE application.
3) Easy to test: The Dependency Injection makes easier to test the application. The EJB or Struts application require server to run the application but Spring framework doesn't require server.
4) Loose Coupling: The Spring applications are loosely coupled because of dependency injection.
5) Powerful abstraction: It provides powerful abstraction to JavaEE specifications such as JMS, JDBC, JPA and JTA.
6) Declarative support: It provides declarative support for caching, validation, transactions and formatting.

Spring Modules

  1. Spring Modules
  2. Test
  3. Spring Core Container
  4. AOP, Aspects and Instrumentation
  5. Data Access / Integration
  6. Web
The Spring framework comprises of many modules such as core, beans, context, expression language, AOP, Aspects, Instrumentation, JDBC, ORM, OXM, JMS, Transaction, Web, Servlet, Struts etc. These modules are grouped into Test, Core Container, AOP, Aspects, Instrumentation, Data Access / Integration, Web (MVC / Remoting) as displayed in the following diagram.

Test

This layer provides support of testing with JUnit and TestNG.

Spring Core Container

The Spring Core container contains core, beans, context and expression language (EL) modules.

Core and Beans

These modules provide IOC and Dependency Injection features.


Context

This module supports internationalization (I18N), EJB, JMS, Basic Remoting.


Expression Language

It is an extension to the EL defined in JSP. It provides support to setting and getting property values, method invocation, accessing collections and indexers, named variables, logical and arithmetic operators, retrieval of objects by name etc.

AOP, Aspects and Instrumentation

These modules support aspect oriented programming implementation where you can use Advices, Pointcuts etc. to decouple the code. The aspects module provides support to integration with AspectJ.The instrumentation module provides support to class instrumentation and classloader implementations.

Data Access / Integration

This group comprises of JDBC, ORM, OXM, JMS and Transaction modules. These modules basically provide support to interact with the database.

Web

This group comprises of Web, Web-Servlet, Web-Struts and Web-Portlet. These modules provide support to create web application.

                                                        Page 1|2|3|4


RESTful WebService

♠ Posted by Java Tutorials

REST is an architectural style which was brought in by Roy Fielding in 2000 in his doctoral thesis.

In the web services terms, Representational State Transfer (REST) is  a stateless client-server architecture in which the web services are viewed as resources and can be identified by their URIs. Web service clients that want to use these resources access via globally defined set of remote methods that describe the action to be performed on the resource.

It consists of two components REST server which provides access to the resources and a REST client which accesses and modify the REST resources.

In the REST architecture style, clients and servers exchange representations of resources by using a standardized interface and protocol.REST isn't protocol specific, but when people talk about REST they usually mean REST over HTTP.

The response from server is considered as the representation of the resources. This representation can be generated from one resource or more number of resources.


REST allows that resources have different representations, e.g.xml, json etc. The rest client can ask for specific representation via the HTTP protocol. 


1.    HTTP methods : 

RESTful web services use HTTP protocol methods for the operations they perform.Methods are:

·         GET:It defines a reading access of the resource without side-effects.This operation is idempotent i.e.they can be applied multiple times without changing the result
·         PUT :  It creates a new resource.It must also be idempotent.
·         DELETE : It removes the resources. The operations are idempotent i.e. they can get repeated without leading to different results.
·         POST : It updates an existing resource or creates a new resource.

2.    Features of RESTful web services:

Resource identification through URI:Resources are identified by their URIs (typically links on internet). So, a client can directly access a RESTful Web Services using the URIs of the resources (same as you put a website address in the browser’s address bar and get some representation as response).
Uniform interface: Resources are manipulated using a fixed set of four create, read, update, delete operations: PUT, GET, POST, and DELETE.
Client-Server: A clear separation concerns is the reason behind this constraint. Separating concerns between the Client and Server helps improve portability in the Client and Scalability of the server components.


Stateless: each request from client to server must contain all the information necessary to understand the request, and cannot take advantage of any stored context on the server.

Cache: to improve network efficiency responses must be capable of being labeled as cacheable or non-cacheable.

Named resources : the system is comprised of resources which are named using a URL.

Interconnected resource representations : the representations of the resources are interconnected using URLs, thereby enabling a client to progress from one state to another.

Layered components - intermediaries, such as proxy servers, cache servers, gateways, etc, can be inserted between clients and resources to support performance, security, etc.

Self-descriptive messages: Resources are decoupled from their representation so that their content can be accessed in a variety of formats, such as HTML, XML, plain text, PDF, JPEG, JSON, and others.