spring examples

Upload: nivasonweb

Post on 06-Apr-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 Spring Examples

    1/176

    1 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Framework:

    1. Itis a special software that is capable of developing applications based on ceratianarchitecture with the ability to generate common logics of the application.

    2. It is given based on core technologies.

    3. It provides an abstraction layer on core technologies.

    Struts: It is a framework to develop MVC-II architecture based web applications only.Hibernate: Its a ORM Framework which is used only for database operations.Spring: Its a framework software which can be used to develop any kind of Java/J2EE applications.Note: Spring framework provides abstraction layer on:

    1. java & J2EE core technologies2. ORM Tools like:

    1. Hibernate2. JDO3. iBastis etc..,

    3. AOP Framework etc..,

    Spring Info:

    Type: java-j2ee Framework softwareVersion: 2.5[Compatible with jdk1.5+]Vendor: Interface21Creator: Rod JohnsonOpen SourceDownload: www.springframework.orgOnline Tutorials: www.roseindia.netArticles:

    1. www.javabeat.net2. www.onjava.com3. www.precisejava.com4. www.devx.com

    FAQ's: www.forum.springframework.orgReference Books:

    1. Spring Live2. Spring in Action --> Manning Publishers

    Introduction:

    1. Spring framework is developed to simplify the development of enterprise applications in

    Java technologies.2. It is an open source framework begin developed by Interface21.3. The Spring provides light weight IoC Container and AOP framework.4. It provides support for JPA, Hibernate, Web services, Schedulers, Ajax, Struts, JSF and

    many other frameworks.5. The Spring MVC components can be used to develop MVC based web applications.6. The Spring 3.0 framework has been released with major enhancements and support for the

    Java 5 [JDK1.5].7. Spring can be used to configure declarative transaction management, remote access to your

    logic using RMI or web services, mailing facilities and various options in persisting yourdata to a database.

    8. Spring framework can be used in modular fashion, it allows to use in parts and leave theother components which is not required by the application.

    1234

    5

    6789

    1011121314

    15

    16171819202122232425262728293031323334

    3536373839404142434445

    4647

    http://www.springframework.org/http://www.roseindia.net/http://www.javabeat.net/http://www.onjava.com/http://www.precisejava.com/http://www.devx.com/http://www.forum.springframework.org/http://www.roseindia.net/http://www.javabeat.net/http://www.onjava.com/http://www.precisejava.com/http://www.devx.com/http://www.forum.springframework.org/http://www.springframework.org/
  • 8/3/2019 Spring Examples

    2/176

    2 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Spring Architecture: Spring is well-organized architecture consisting of seven modules. Modulesin the Spring framework are:Spring1.x: It has 7 modules. They are:

    1. Core

    2. DAO3. ORM4. JEE/Context5. Web6. MVC7. AOP

    Figure: The Spring framework is composed of several well-defined modules.

    Spring2.x: It has 6 modules only. Because Web & Web MVC modules were clubbed together &

    given as Web MVC module.

    Core Module:1. It is base module for all modules.2. Provides BeanFactory container which makes Spring as a container3. Acts as a base module for other modules4. provides the fundamental functionality of the Spring framework.5. The Core package is the most import component of the Spring Framework.6. This component provides the Dependency Injection [DI] features.

    DAO Module:

    1. It provides abstraction layer on JDBC & allows us to do database operations.2. Using it we can focus only on database operations instead of doing repeated work by writing

    common code again and again.

    48495051

    525354555657

    58

    59

    60

    61626364656667

    68

    697071

  • 8/3/2019 Spring Examples

    3/176

    3 Sathya Technologies Spring Kanakadhar Surapaneni :)

    3. Here we can make use of JdbcTemplate class where we can call methods to do requireddatabase opeartion.

    4. We can connect to database either by manual code same like jdbc or we can do easily byusing JdbcTemplate class.

    5. Using JdbcTemplate class we can retrieve data from database in the form of serializableobjects.

    ORM Module:

    1. It provides an abstraction layer on ORM Framework software's like Hibernate, iBatis, JDOetc..,

    2. Spring doesnt attempt to implement its own ORM solution3. Springs transaction management supports each of these ORM frameworks as well as JDBC.

    JEE/Application Context Module:1. It provides abstraction layer on Java/J2EE technologies like Java Mail, JMS, EJB etc..,

    2. The context module is what makes spring as a framework.3. This module extends the concept of BeanFactory4. Adds support for internationalization (I18N) messages, application life cycle events, and

    validation.5. Supplies many enterprise services such as e-mail, JNDI access, EJB integration, remoting,

    and scheduling.

    AOP [Aspect Oriented Programming] Module:1. One of the key components of Spring is the AOP framework.2. It provides a methodology to configure middleware services or to perform any

    authentication, validations or to perform any pre processing logic or post processing logicon our business logic methods.

    3. Without disturbing any kind of spring resources we can integrate our spring application withany kind of middleware service.

    4. Spring provides a separate layer for middleware configuration.5. This module serves as the basis for developing your own aspects for your Spring-enabled

    application.

    Web MVC Module: It is given for two operations:1. To integrate spring application with any other web based framework like Struts, JSF etc..,

    2. It provides its own web framework anmed as Spring MVC to develop MVC-II architecturebased web applications. It provides the MVC implementations for the web applications.

    Note: We can develop a spring application either by using all modules or only by using fewmodules of spring. We can also integrate our spring module with any kind of ajava application. Sospring is loosely coupled.

    Spring is a open source, light weight, loosely coupled, aspect oriented & dependency injectionbased framework software which can be used to develop any kind of java/j2ee application.

    Open Source: Spring software can be downloaded and used at free of cost. Spring developed

    source code can referred by any one who is interested.

    Container is a special software which can manage complete life cycle of a given resource.

    72737475

    7677

    7879808182

    8384

    858687888990

    919293949596979899

    100

    101102

    103104

    105106107

    108109

    110

    111

    112

  • 8/3/2019 Spring Examples

    4/176

    4 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Loosely Coupled: Need not to inherit any class or interface as we do for our servlet programming.Instead of having "is-a" relationship here we can have "has-a" relationship.

    Lightweight:

    1. Spring is lightweight in terms of both size and overhead.2. The entire Spring framework can be distributed in a single JAR file that weighs in at just

    over 1 MB.3. Spring is nonintrusive: objects in a Spring-enabled application typically have no

    dependencies on Spring specific classes.4. Mainly spring is used for business logic. The same business logic if we try to develop using

    EJB, then its compulsory to have support of any application server like weblogic. But thesame logic can be executed in Spring without help of any web server or application server.Because Spring provides its own containers in the form of pre defined classes.

    Note:Servlet Container & EJB Container are heavy weight because unless we start web server or

    application server we cannot activate either servlet container or EJB Container.

    Inversion of control:

    1. Spring promotes loose coupling through a technique known as inversion of control (IoC).2. When IoC is applied, objects are passively given their dependencies instead of creating or

    looking for dependent objects for themselves.3. The container gives the dependencies to the object at instantiation without waiting to be

    asked.

    Aspect-oriented:

    1. Spring comes with rich support for aspect-oriented programming.2. It enables cohesive development by separating application business logic from system

    services (such as auditing and transaction management).3. Application objects do what theyre supposed to doperform business logicand nothing

    more. They are not responsible for (or even aware of) other system concerns, such aslogging or transactional support.

    Container:

    1. Spring is a container in the sense that it contains and manages the life cycle andconfiguration of application objects.

    2. We can configure how each of our beans should be createdeither create one singleinstance of bean or produce a new instance every time one is needed based on aconfigurable prototype.

    Enterprise Application: Its a large scale appliaiton with complex business logic & configured withmiddleware services like transaction management, security etc.., Eg: Banking Applications.

    Dependency Lookup: This concept is used to find required resource among multiple resources. Ittakes some time to look up waht we need. It performs "PULL" operation to get required values.Eg: Getting JDBC DataSource object from registry server.

    Note: Registry servers are used to provide global visibility [to access from any where through outthe world].Eg: RMI Registry

    113114

    115

    116117118119120121122123124

    125

    126

    127128129130131132

    133134135136137138139

    140141142

    143144145

    146147

    148149150

    151152153

  • 8/3/2019 Spring Examples

    5/176

    5 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Dependency Injection [IOC Inversion Of Control]: Container software will gather all therequired values and injects into resources of application dynamically. Here Dependent values will

    be pushed to resources dynamically by underlying container.Ex: The way how JVM/JRE calls constgructor of a class to assign some values at the time of object

    creation.

    Note: Using spring we can develop any kind of Java/J2EE application. But mostly in industry wecan find spring used for development of Businesss Logic.

    Installation of spring: Download software & extract "Spring-framework-2.5.1-withdependencies.zip" file.

    Spring Jars: To work with any kind of spring applicaiton we need to set the classpath for two jarfiles. They are:

    1. spring.jar [main jar file] [Location: sping-home\dist\spring.jar]

    2. commons-logging.jar [Dependency jar file] [Location:]

    Normal Spring Application:1. Compilation: Set the classpath for main jar file2. Execution: Set the classpath for both main & dependency jar file. Becuase at run time of

    program the control transfers from main jar file to dependency jar file.

    Spring Web Applicaiton:

    1. Compilation: Set the classpath for main jar file2. Execution: Place both main & dependency jar files inside "lib" folder of WEB-INF.

    Note: Spring programs will make use of classes and interfaces resideing inside "spring.jar"file and the classes which are residing inside "spring.jar" file can make use of classes &interfaces which resides in dependency jar file "commons-logging.jar".

    Classpath: So when ever we need to work with a spring applicaiton its compulsory to set theclasspath for all related main jar files and also dependent jar files.

    Process of classpath setting: My Computer icon -> advanced -> environment variables -> systemvariables -> [if classpath variable is existing -> edit, if classpath variable doesn't exist then create anew classpath variable] & specify c;asspath.

    154155156157

    158

    159160

    161162

    163164165

    166

    167168169170

    171172173

    174175176177178

    179180181

  • 8/3/2019 Spring Examples

    6/176

    6 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Note:

    1. When we need set the classpath for multiple jar files, every jar file need to be specified withabsolute path and every jar file path should be separated with semiclon [;]

    2. The classpath what we specify in environmental variables will not be reflected to any ide

    like netbeans or eclipse or myeclipse etc..,3. When we configure the same variable in user variable & system variable then user variables

    will dominate system variable [for path or classpath]4. If any jar file missed in middle of classpath then the rest of classpath will be ignored. So

    always we need to specify our classpath in beginning of the path.

    Features of Spring:

    1. Supports POJO/POJI model programming.2. Provides two light weight containers in the form of pre defined classes.

    1. Bean Factory Container orCore Container orIOC Container-org.springframework.beans.factory.BeanFactory Interface

    2. JEE Container orApplication Context Container.-org.springframework.beans.factory.xml.ApplicationContext interface

    3. Spring containers are activated from server side programs.4. Can be used to develop any kind of java/j2ee applications5. We can develop an applicaition only by sing spring or we can also integrate spring with any

    other framework.6. Provides built in middleware services like connection pooling, transaction management,

    logging etc.,7. Supports to work with third party supplied and web server or application server supplied

    middleware services.8. Supports nested transaction & distributed transaction management.9. Supports AOP framework to integrate with middleware services.10. Provides anootation based mapping as a alternative to xml configuration which increases

    performance of the application.11. Transaction Management:

    1. Spring framework provides a generic abstraction layer for transaction management.2. This allows the developer to add the pluggable transaction managers, and making it easy

    to do transactions without dealing with low-level issues.3. Spring's transaction support is not tied to J2EE environments and it can be also used in

    container less environments.12. JDBC Exception Handling: The JDBC abstraction layer of the Spring offers a meaningful

    exception hierarchy, which simplifies the error handling strategy

    Specific API: API which is used for development of only a particular kind of application. Eg:servlet-api is used only for the purpose of web application development.

    POJO Classes: The classes that are not API dependent are called as POJO [Plain Old Java Object]classes.POJO: [plain old java object] A pojo class is a class which should not extend any predefined class

    belongs to specific API and it should not implement any predefined interface belongs to specificapi.

    182183184185

    186187188189190

    191192193194195

    196197198199200201202203204205206207208209210211212213214215216

    217218

    219220

    221222223224225

  • 8/3/2019 Spring Examples

    7/176

    7 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Following are pojo classes:

    class C1{}

    class C2 extends C1{}class C3 extends java.lang.Thread{}Note: Thread is a predefined class but its not confined for development of any particular kind ofapplication. In another words Thread class can be used for any kind of java application. So our classC3 is a pojo class.

    class C4 implements java.lang.Runnable

    {}Note: Runnable is an interface which can be used to create a thread. So it can be used fordevelopment of any kind of java application.

    class C5 implements java.io.Serializable{}Note: Serializable interface implementation class objects will become serializable objects. So thatwe can transfer from one location to another location over the network.Following are not POJO classes:

    class C6 extends GenericServlet{}Note: GenericServlet class is used only for the purpose of web application development. So ourclass is not a pojo class.

    class C7 implements Servlet{}Note: Our class is implementing Servlet interface which is confined for development of web

    applications.class C8 implements java.rmi.Remote{}Note: Remote interface is used only for development of Distributed Applications. So the aboveclass is not a pojo class.

    POJI Interfaces: The interfaces that are not API dependent are called as POJI [Plain Old JavaInterface]

    POJI: [Plain Old Java Interface] Poji is an interface which should not extend any predefined

    interface which belongs to specific API.

    226227228229

    230231232233234235236237238

    239

    240241242243

    244245246247248249250251252253254

    255256257258

    259260261262263264

    265266

    267

    268

  • 8/3/2019 Spring Examples

    8/176

    8 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Examples of POJI are:

    interface I1{}

    interface I2 extends I1{}interface I3 extends Runnable{}interface I4 extends Serializable{}Examples of non POJI are:

    interface I5 extends Remote

    {}interface I6 extends Servlet{}Note: The above interfaces are non poji because they are extending interfaces which are apispecific.Server: A program which is providing service is called as server.Client: A program which is giving request to get some service is called as client program.Local Client:If server and client both are executing under same JVM [Java Virtual Machine] thenthat client program can be called as a Local Client and server can be called as Local Server.Remote Client: If server and client both are executing under different JVM's then we can considerclient as Remote client to server and server as Remote Server to client program.

    Spring Containers:

    1. Core container or IOC container or BeanFactroy container

    1. Its an implementation class of an interface BeanFactory2. It supports lazy loading.

    1. It means container will not create objects of cofigured pojo classes immediately.2. It waits till it recieves the first request.3. Once the object is created the same object will be maintained till end of the

    application.

    3. By default it considers all the configured classes as singleton classes.4. So that the same object will be given to all requests which belongs to same class.5. We cannot change singleton scope for core container.6. provides the fundamental functionality of the Spring framework.7. BeanFactory, the heart of any Spring-based application.

    2. Advanced container or ApplicationContext container

    1. It is advanced container.

    2. By default it supports early loading.1. It means without recieving any request from client program immediately it will

    create object for every singleton scoped class.

    269270271272

    273274275276277278279280281282283

    284285286287288289290291292293294295296

    297298299300301302303

    304

    305306307308309

    310

    311

    312313314

  • 8/3/2019 Spring Examples

    9/176

    9 Sathya Technologies Spring Kanakadhar Surapaneni :)

    2. When ever the container gets acivated immediately it creates objects of all singletonclasses.

    3. Has many advantages over core container.

    Execution of java program using Edit Plus editor: Once we configure Edit Plus we can compileand execute java programs just by using short cut keys. So it provides a great flexibility to develop

    java programs.Configure Compilation process: Tools [menu bar] configure user tools add tool program

    give menu text as javac/compile [which ever is comfortable to you] for command click on button with 3 dots [browse button] and locatejavac from bin folder of JDK software.

    Argument File Name Initial Directory File DirectorySelect check box of capture output Apply ok. Configure Execution process:

    give menu text as java/Execute [which ever is comfortable to you] for command click on button with 3 dots [browse button] and locatejava from bin folder of JDK software.

    Argument File Name Without Extension Initial Directory File DirectorySelect check box of capture output Apply ok. Note: Click on tools it shows you short cut keys to execute our java programs.

    315316317

    318319320321322323

    324325326327328329

    330331332333

  • 8/3/2019 Spring Examples

    10/176

    10 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Resources of spring core module application:

    1. Interface [POJI]

    1. It is optional in all applications except distributed applications.2. It can contain prototype of our business logic methods.

    2. Spring Bean class [POJO class]1. It can be implementation class of our interfacc2. It contains definition for business logic methods3. It can have properties and values can be injected by spring container through DI

    [Dependency Injection].4. It can have setters methods or constructors to support dependency injection.5. It can have user defined methods which can act as life cycle methods.6. Along with business logic methods we can also have helper methods.

    3. Spring Configuration file [*.xml file]

    1. We can give any name for this xml file

    2. standard name is to give as "applicationContext.xml"3. Initially we need to specify eitherDTD (Document Type Definition) orXSD (XML

    Schema Definition)

    4. Xml file can be validated based up on either XSD or DTD.5. Its compulsory to specify either DTD or XSD. [DTD is traditional & XSD is advanced]6. We can configure all bean classes [business logic classes] here.7. We can configure user dfined classes & also predefined classes.8. Every class can have a unique identification name.9. We can also configure bean class properties here. Through this we can pass instructions

    to spring container to inject values with dependency injection.10. Spring container works based up on the instructions what we have given in spring

    configuration file.4. Client Program [*.java]

    1. Locates spring configuration file1. To locate spring configuration file regulary we will be using either

    ClasPathResource orFileSystemResource2. Resource is interface3. ClasPathResource & FileSystemResource both are implementation classes or

    Resource interface.4. If client program & spring configuration file both resides in same folder then we can

    use any implementation class without any problem.

    5. FileSystemResource:1. If it is required to specify eitherabosolute path [Eg: c:\folder-name\file-name.xml] orrelative path [Eg: sub-folder-name\file-name.xml] in thosecases we need to use FileSystemResource class.

    2. Drawback: If we modify location of spring configuration file then again weneed to modify either aboslute path or relative path in our program.

    6. ClasPathResource:

    1. We can create a jar file containing our spring configuration file and we can placeit in our classpath.

    2. So that the spring configuration file can be any where. But still our clientprogram can access it.

    3. Drawback: If we change our spring configuration file then again we need tocreate a jar file freshly.

    2. Activates spring container

    334335336337

    338339340341342343344345

    346347

    348349350351352353354355356357358359360361362363364365366367368

    369370371372373374375376377378379

    380381382

  • 8/3/2019 Spring Examples

    11/176

    11 Sathya Technologies Spring Kanakadhar Surapaneni :)

    1. Here we can use BeanFactory interface and allocate memory of XmlBeanFactoryclass which is an implementation class of BeanFactory interface.

    3. Reads spring configuration file: Once the container is activated automatically it readsspring configuration file.

    4. Requests spring container to give object of any bean class by using identification nameof the bean class.

    5. By using bean class object we can call business logic methods.

    Example: Simple Spring Application.

    //interface program

    //DemoInter.java

    public interface DemoInter{

    public String wish(String uname);}

    //Implementation class

    //DemoInterImpl.java

    public class DemoInterImpl implements DemoInter{

    private String message;

    public DemoInterImpl(){

    System.out.println("Constructor executed");}

    public void setMessage(String message){

    System.out.println("setter method executed");this.message=message;

    }

    public String wish(String uname){

    return message+" "+uname+" Have a great day";

    }}

    Note: We can copy paste DTD or XSD int ospring configuration file by searching xml filesprovided by our spring software.

    Spring Configuration file

    //spring.cfg.xml

    //Here we are specifying DTD (Document Type Definition)

    383384385386

    387388389

    390391392393394395396

    397398399400401

    402403404405

    406407408409410

    411412413

    414415

    416417

    418419420

    421422423

  • 8/3/2019 Spring Examples

    12/176

    12 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Hello

    (or)

    //Here we are specifying XSD (XML Schema Definition)

    Hello

    //Client Program

    //DemoClient.java

    import org.springframework.core.io.Resource;import org.springframework.core.io.ClassPathResource;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;

    public class DemoClient{

    public static void main(String args[]){

    //location of spring configuration fileResource res=new ClassPathResource("spring.cfg.xml");

    //activation of spring container & then it reads spring configuration file

    BeanFactory factory=new XmlBeanFactory(res);

    //requesting object of a bean class by using its identification name

    DemoInter d=(DemoInter)factory.getBean("ic");

    //calling business logic method

    System.out.println(d.wish("Sai"));

    }}Note: To execute any spring program basically we need to have the following jar files in classpath.

    424425426427

    428429430

    431

    432433434435

    436437

    438439440441442443

    444445

    446447448449450451452453

    454455

    456457

    458459

    460461

    462463464

  • 8/3/2019 Spring Examples

    13/176

    13 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Main Jar file: spring-framework-2.5.1\dist\spring.jar

    Dependency Jar file:

    spring-framework-2.5.1\lib\jakarta-commons\commons-logging.jar

    Singleton Demo:

    Note: All resources are same as above program. Only change in client program.

    import org.springframework.core.io.Resource;import org.springframework.core.io.ClassPathResource;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;

    public class DemoClient{

    public static void main(String args[]){

    Resource res=new ClassPathResource("Demo.xml");BeanFactory factory=new XmlBeanFactory(res);

    DemoInter d1=(DemoInter)factory.getBean("ic");

    DemoInterImpl d2=(DemoInterImpl)factory.getBean("ic");

    DemoInter d3=(DemoInter)factory.getBean("ic");

    System.out.println(d1.wish("Sai"));}

    }

    Note:1. getBean() is a method which returns us super class Object. So we can classcast it to either

    our interface or implementation class.2. We have requested the same class object for 3 times. But container creates only one object &

    the3 same object will be given for every request.3. We can have any number of business logic methods inside the same class.

    Example: Configuring a predefined class object as property of pojo class.//spring.cfg.xml

    85

    465

    466

    467

    468469

    470471472473474475

    476477

    478479

    480481482

    483484485

    486487488489490491

    492493

    494495496

    497

    498499

    500501

  • 8/3/2019 Spring Examples

    14/176

    14 Sathya Technologies Spring Kanakadhar Surapaneni :)

    10

    19

    Njoy Spring Programming :)

    //DemoInter.java

    public interface DemoInter{

    public void show();}

    //DemoInterImpl.java

    import java.util.Date;

    public class DemoInterImpl implements DemoInter{

    private String message;private Date dt = null;

    public DemoInterImpl(){

    System.out.println("DemoInterImpl zero argument constructor");}

    public void setMessage(String s){

    System.out.println("setMessage() of DemoInterImpl class");message=s;

    }

    public void setDt(Date dt){

    System.out.println("setDt() of DemoInterImpl class");this.dt = dt;

    }

    502503504

    505506507508

    509510511512

    513

    514515516517

    518519520521522

    523524

    525526527528

    529530

    531532

    533534535536537

    538539

    540541542

  • 8/3/2019 Spring Examples

    15/176

    15 Sathya Technologies Spring Kanakadhar Surapaneni :)

    public void show(){

    System.out.println("Mesage is: "+message);System.out.println("Date is: "+dt);

    }}

    Client.java

    import org.springframework.core.io.Resource;import org.springframework.core.io.ClassPathResource;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;

    public class DemoClient{

    public static void main(String args[])

    {Resource res=new ClassPathResource("spring.cfg.xml");BeanFactory factory=new XmlBeanFactory(res);DemoInter d1=(DemoInter)factory.getBean("demo");d1.show();

    }}

    //Example: Configuring a user defined class object as property of pojo class.//DemoInter.java

    public interface DemoInter{

    public void show();}DemoInterImpl.java

    import java.util.Date; public class DemoInterImpl implements DemoInter{

    private int age;private Date dt = null; //pre defined class

    private TestBean tb = null; //user defined class

    public DemoInterImpl(){System.out.println("DemoInterImpl zero argument constructor");

    }public void setAge(int age){

    this.age = age;}

    public void setDt(Date dt){

    this.dt = dt;

    }

    543544545546

    547548

    549550551552553554555556

    557558559560561562563

    564565566567568569570571572573574575576

    577578579580581582583584585586587

    588

  • 8/3/2019 Spring Examples

    16/176

    16 Sathya Technologies Spring Kanakadhar Surapaneni :)

    public void setTb(TestBean tb){

    this.tb = tb;}

    public void show(){

    System.out.println("Age is: "+age);System.out.println("Date is: "+dt);System.out.println("Message is: "+tb);

    }}

    //spring.cfg.xml

    85

    10

    19

    Hello friends.... Njoy this beautiful n gifted life :)

    25

    //DemoClient.java

    public class DemoClient

    {public static void main(String args[]){

    589590591592

    593594595596597598599

    600601602

    603604605606607608609610611612613614615616617618619620621622623

    624625626627628629630631632633634

    635636637

  • 8/3/2019 Spring Examples

    17/176

    17 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Resource res=new ClassPathResource("spring.cfg.xml");BeanFactory factory=new XmlBeanFactory(res);DemoInter d1=(DemoInter)factory.getBean("demo");d1.show();

    }}//Example: Different Bean Property Types

    Note: In a bean class we can have any type of properties. For the following properties we havecorresponding tags to be onfigured in our spring configuration file.

    Bean Property type Tag in spring configuration file

    Primitive (or) java.lang.String

    Other bean type [class/interface type]

    Java.util.List type [stack, linkedlist]

    Java.util.Set Java.util.Map

    Java.util.Property

    Java.util.Array or arrays

    //DemoInter.java

    public interface DemoInter {public String sayHello();

    }//DemoImple.java

    import java.util.Date;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.Set;

    public class DemoImple implements DemoInter{private float salary;

    private TestBean tb = null;

    private Date dt = null;

    private List fruits = null;

    private List veg = null;

    private Set phone_nos = null;private Set emails = null;

    private Map perDetails = null;

    private Map capitals = null;

    private Properties faculties = null;

    private String courses[];

    private int runs[];

    public String sayHello() {return "Hello Friends... Gmg. :) "+" salary = "+salary+" tb = "+tb.toString()+

    " dt = "+dt.toString()+" fruits = "+fruits.toString()+" veg = "+veg.toString()+

    638639640641

    642643644645646

    647648649650651

    652653654655656657658659660661662

    663664665666667668669670671672673

    674675676

  • 8/3/2019 Spring Examples

    18/176

    18 Sathya Technologies Spring Kanakadhar Surapaneni :)

    " phones = "+phone_nos.toString()+" emails = "+emails.toString()+" perDetails = "+perDetails.toString()+" capitals = "+capitals.toString()+

    " faculties = "+faculties.toString()+" courses = {"+courses[0]+" "+courses[1]+"}"+" runs = {" + runs[0]+" "+runs[1]+"}";

    }public void setSalary(float salary) {

    this.salary = salary;}

    public void setTb(TestBean tb) {this.tb = tb;

    }public void setDt(Date dt) {

    this.dt = dt;}

    public void setFruits(List fruits) {this.fruits = fruits;

    }public void setVeg(List veg) {

    this.veg = veg;}

    public void setPhone_nos(Set phone_nos) {this.phone_nos = phone_nos;

    }public void setEmails(Set emails) {

    this.emails = emails;}

    public void setPerDetails(Map perDetails) {this.perDetails = perDetails;

    }public void setCapitals(Map capitals) {

    this.capitals = capitals;}

    public void setFaculties(Properties faculties) {

    this.faculties = faculties;}public void setCourses(String[] courses) {

    this.courses = courses;}

    public void setRuns(int[] runs) {this.runs = runs;

    }}

    //Note: Set doesn't allows duplicates but List allows

    677678679680

    681682683684685686687688689690691

    692693694695696697698699700701702703704705706707708709710711712

    713714715716717718719720721

    722

  • 8/3/2019 Spring Examples

    19/176

    19 Sathya Technologies Spring Kanakadhar Surapaneni :)

    //spring.cfg.xml

    Hello

    5000

    Apple

    Banana

    Orange

    CarrotPotatoMushrooms

    Tomato

    7569670669

    9502166767

    723724725726

    727728729730731732733734735736737

    738739740741742743744745746747748749750751752753754755756757758

    759760761762763764765766767768769

  • 8/3/2019 Spring Examples

    20/176

    20 Sathya Technologies Spring Kanakadhar Surapaneni :)

    [email protected]@yahoo.co.in

    Sai

    Universal King

    Kanakadhar

    Service Provider

    Sathya

    Boon for learners

    Java Faculty

    .net Faculty

    770771772773

    774775776777778779780781

    782783

    784785786787788789790791792793794795796797

    798799

    800801

    802803

    804805806807808809810811

    812813

  • 8/3/2019 Spring Examples

    21/176

    21 Sathya Technologies Spring Kanakadhar Surapaneni :)

  • 8/3/2019 Spring Examples

    22/176

    22 Sathya Technologies Spring Kanakadhar Surapaneni :)

    3. If properties of bean class [few or all properties] are configured for constructor injectionthen spring bean container creates spring bean class object by using parameterisedconstructor.

    4. If all properties of spring bean class are configured only for setter injection then springcontainer creates spring bean class object by using zero parameterized constructor.

    5. Using tag in spring configuration file the container performs constructorinjection on bean properties.

    6. While configuring bean properteis for constructor injection we must configure them inspring configuration file in the same order or sequence as they are placed in the constructor

    parameters.

    7. On the same bean property of bean class if we configure both setter and constructorinjection then the value injected through setter injection gets activated because settermethods gets executed after execution of constructor. So that the values of constructor

    injection gets overridden with values of setter injection.8. We can configure constructor argument values in 4 ways:

    1. Sequentially as specified in order of constructor

    2. By specifying dataype [here no two arguments should contain same data type]

    3. Using index of constructor arguments. [index of arguments starts from 0 [zero]].

    4. Combination of above 3.

    9. Based on no. of tags specified in the bean class the same no. ofparameterised constructor will be called by spring container.

    Eg:- If tag is placed for three times then three parameterised constructorgets executed.

    10. Constructor injection is quick than setter injection. Because constructor gets executed at thetime of object creation and setter methods gets executed after object creation.

    Constructor vs. Setter injection: Use constructor injection when you have to inject one or fewproperties and prefer setter injection when you have to inject more proeprties.

    Note:

    1. Its not mandatory that all the bean class properties to be configured for dependencyinjection.

    2. Maximum predefined classes supplied by spring are designed to support Setter injection.

    //Example:Constructor Injection

    //Demo.java

    public class Demo{

    private String message;public Demo() {} //dummy constructorpublic Demo(String message) //one parameterised constructor{

    this.message = message;}

    859860861

    862863

    864865

    866867868

    869870871

    872873

    874

    875

    876

    877

    878879

    880881

    882883

    884885

    886

    887888

    889

    890891892893894895896897

    898899

  • 8/3/2019 Spring Examples

    23/176

    23 Sathya Technologies Spring Kanakadhar Surapaneni :)

    public String toString(){

    return message;}

    }spring.cfg.xml

    Hello

    Note:

    1. Here all the tags like , . , , , will remain same. Butinstead of using tag we are making use of tag.

    2. Client program is as usual.3. As we are passing only one constructor argument in tag it invokes one

    parameterized constructor.

    //Exmple: Invoking Multiple Parametersized constructor

    public class Bean{

    private int a;private float b;private String c;

    public Bean(){}

    public Bean(int a, float b, String c){

    this.a = a;this.b = b;this.c = c;

    }

    public String toString()

    { return a +" "+b+" "+c;}

    }//spring.cfg.xml

    //arguments in sequence

    1

    1.1

    900901902903

    904905

    906907908909910911912913

    914915916

    917918919920921922

    923

    924925926927928929

    930

    931932933934935936

    937938939940

    941942943

  • 8/3/2019 Spring Examples

    24/176

    24 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Gmg

    //Note:

    1. In above style we have passed all the values in the form of sequence.2. It means first value "1" will be given to first paramter of constructor.3. second value "1.1" will be given to second paramter of constructor.4. third value "Gmg" will be given to third paramter of constructor.

    //spring.cfg.xml

    //constructor arguments by using data type

    1.1

    Gmg

    1

    Note:

    1. First argument of "float" data type will be given to float parameter of constructor2. Scond argument of "java.lang.String" type will be given to String parameter of constructor3. Third argument of "int" type will be given to int parameter of constructor.4. But if the constructor has more than one parameter with same data type it will create error

    message due to ambiguity [confusion].

    //spring.cfg.xml

    //constructor arguments by using index

    1.1

    Gmg

    1

    944945946

    947

    948949950951952

    953954955

    956957958

    959960961

    962963964965966967968969970971

    972

    973974975976977

    978979980

    981

    982983984

  • 8/3/2019 Spring Examples

    25/176

  • 8/3/2019 Spring Examples

    26/176

  • 8/3/2019 Spring Examples

    27/176

    27 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Hello

    99.9

    Apple

    Banana

    Orange

    CarrotPotatoMushrooms

    Tomato

    7569670669

    9502166767

    [email protected]@yahoo.co.in

    1075

    10761077

    10781079108010811082108310841085108610871088

    10891090109110921093109410951096109710981099110011011102110311041105

    110611071108

    11091110111111121113111411151116111711181119

    1120

  • 8/3/2019 Spring Examples

    28/176

    28 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Sai

    Universal King

    Kanakadhar

    Service Provider

    Sathya

    Boon for learners

    Java Faculty

    .net Faculty

    Java

    .net

    Oracle

    1121112211231124

    11251126

    11271128

    11291130113111321133

    113411351136113711381139114011411142

    11431144

    1145114611471148

    114911501151

    11521153115411551156115711581159116011611162

    116311641165

  • 8/3/2019 Spring Examples

    29/176

    29 Sathya Technologies Spring Kanakadhar Surapaneni :)

    3040

    Note: Client program is asusual.

    Factory method: A method of a java class which is capable of constructing and returns its ownclass object.

    When spring bean class has private constructor we cannot create its object from outside. Then wecan give instructions to spring container to create the object of bean class by using factory method.

    Note:

    1. Factory methods can be of static or not static [instance method]

    2. Factory method internally calls constructor at the time of object creation. No problem willbe there even with private constructors. Because private constructors can be accessed frominside the class.

    3. Factory methods should be public methods. So that can be accessed from outside the class.

    Eg of static factory methods:

    1. Class c = Class.forName(ClassName);

    2. Thread t = Thread.currentThread();3. Calendar cl = Calendar.getInstance();

    Eg. on not static factory method [insanmce method]

    String s = new String(OK);

    String s1 = s.concat(Hello); //instance factory method.

    Instructions to spring container to call factory method:

    1. We should use factory-method attribute of tag to configure the factory method to becalled to create the object.

    2. If factory method expects any arguments then pass required arguments using tag.

    Factory Class: A class method which can return you another class object is called as Factory Class.

    Eg:

    Intege i1 = new Integer(100);

    String s1= i1.toString();

    Note: Here by using toString() of java.lang.Integer class we are getting java.lang.String. It is

    returning this object by creating immediately. So we can call Integer class as factory class.

    1166116711681169

    11701171117211731174

    11751176

    11771178

    1179

    1180

    118111821183

    1184

    1185

    1186

    11871188

    1189

    1190

    1191

    1192

    11931194

    11951196

    1197

    1198

    1199

    1200

    1201

    1202

  • 8/3/2019 Spring Examples

    30/176

  • 8/3/2019 Spring Examples

    31/176

    31 Sathya Technologies Spring Kanakadhar Surapaneni :)

    //static factory methodpublic static TestBean getTestBean(String msg){

    System.out.println("static factory method invoked");

    return new TestBean(msg);}

    public String toString() //to dispaly results{

    return msg;}

    }//spring.cfg.xml

    Gmg. my dear friends...

    //DemoClient.java

    public class DemoClient {

    public static void main(String[] args) {ClassPathResource res = new ClassPathResource("spring.cfg.xml");XmlBeanFactory factory = new XmlBeanFactory(res);DemoBean d1 = (DemoBean) factory.getBean("db");

    System.out.print(d1.sayHello());}

    }

    1238123912401241

    12421243

    1244124512461247124812491250

    12511252125312541255

    1256

    12571258125912601261

    1262126312641265

    12661267

    12681269

    127012711272

    1273127412751276

    127712781279

  • 8/3/2019 Spring Examples

    32/176

    32 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Note:

    1. The spring container uses factory method getInstance() to create bean class object forjava.util.Calendar.

    2. Spring container uses "getTestBean(String)" as factory method to create test bean class

    object.3. Spring container uses zero parameterised constructor to create DemoBean class object.

    //Example: Instance Factory Method

    //DemoInter .java

    public interface DemoInter {public String sayHello();

    }

    // DemoBean.java

    public class DemoBean implements DemoInter{

    private TestBean tb = null;

    public DemoBean() {System.out.println("zero parametrized constructor of DemoBean class");

    }

    public void setTb(TestBean tb) {this.tb = tb;

    }

    public String sayHello() {

    return "tb = "+tb.toString();}

    //instance factory methodpublic TestBean getTestBean(String msg)

    {

    System.out.println("demo bean factory method of DemoBean class");

    return new TestBean(msg);}

    }

    //TestBean.java

    public class TestBean {String msg;

    public TestBean() {} //dummy constructor

    TestBean(String msg) {

    this.msg = msg;System.out.println("Constructor of TestBean class invoked");

    }

    1280128112821283

    12841285

    1286

    1287128812891290

    1291

    1292

    1293

    129412951296

    129712981299

    1300

    13011302

    1303130413051306

    130713081309

    131013111312

    1313

    1314

    131513161317

  • 8/3/2019 Spring Examples

    33/176

    33 Sathya Technologies Spring Kanakadhar Surapaneni :)

    public String toString() //to dispaly results{

    return msg;}

    }

    //spring.cfg.xml

    Gmg. my dear friends...

    //DemoClient .java

    public class DemoClient {public static void main(String[] args) {

    ClassPathResource res = new ClassPathResource("spring.cfg.xml");XmlBeanFactory factory = new XmlBeanFactory(res);DemoBean d1 = (DemoBean) factory.getBean("db");System.out.print(d1.sayHello());

    }}

    Note:1. Making spring container to create spring bean class object through non static methods[instance methods].

    2. While configuring spring bean class if class attribute is not there and factory-bean, factory-method attributes are there then spring container uses instance factory method of specifiedfactory bean class to create spring bean class object.

    Application Context container is enhancement of bean factory container with some advantages.Its features are as follows:

    1. Pre initialization of beans by default. [Early loading]. It means in our spring configurationfile we may have any no. of bean tags. Objects will be created sequentially for each and

    every bean class as specified in the sequence of tags in xml file.

    2. Ability to read values of bean properties from properties file.

    1318131913201321

    1322

    1323132413251326132713281329

    1330

    1331133213331334

    133513361337133813391340134113421343134413451346134713481349

    135013511352135313541355

    13561357

    13581359

    1360

    1361

  • 8/3/2019 Spring Examples

    34/176

    34 Sathya Technologies Spring Kanakadhar Surapaneni :)

    3. supports Internationalization (I18n)

    4. Gives the ability to work with events & listeners.

    5. org.springframework.context.ApplicationContext interface is the sub interface of

    org.springframework.beans.factory.BeanFactory interface.6. Activating application context interface is nothing but creating object of a class that

    implements org.springframework.context.ApplicationContext interface.

    7. There are three regularly used implementation classes of application context interface. Bycreating object for any of these three classes we can activate ApplicationContext container.

    8. This container is available in JEE module.

    9. org.springframework.context.support.FileSystemXmlApplicationContext: It activatesapplication context container by locating given spring configuration file in the specified

    path.

    Ex: FileSystemXmlApplicationContext ctx = newFileSystemXmlApplicationContext(c:\f1\spriong.cfg.xml)

    10.org.springframework.context.support.ClassPathXmlApplicationContext: It activatesapplication context container by locating spring configuration file in the same workingdirectory or from jar files added in the classpath.

    Ex: ClassPathXmlApplicationContext ctx = newClassPathXmlApplicationContext(spring.cfg.xml);

    11.org.springframework.context.support.XmlWebApplicationContext: this class activatesapplication context container by locating spring configuration file in deployment directory

    structure of web application by default in WEB-INF folder.Ex: XmlWebApplicationContext ctx = new XmlWebApplicationContext(spring.cfg.xml);

    12.In real time applications we can find regularly working with Application Context containerrather than working with Bean Factory container.

    13.Application context container can perform all modes of dependency injection like beanfactory container.

    14.Application context container performs pre instantiation on all singleton scoped on springbean classes of spring configuration file at the moment of application context container getsactivated.

    15.Pre-instantiation means creating spring bean class objects immediately after the applicationcontext container activation.

    16.BeanFactory cannot perform this pre instantiation on spring bean classes.

    17.when we call factory.getBean(_) then bean factory container immediately creates the objectand uses the same for further requests on same id-value.

    18.When we call ctx.getBean(_) then application context container gives access to bean idrelated spring bean class object which is created at pre-instantiation process.

    19.Application context container can perform pre-instantiation only on singleton scoped springbean classes that are configured in spring configuration file.

    20.If we give scope value as prototype then object will not be created for bean at the time ofpre-instantiation.

    1362

    1363

    1364

    136513661367

    13681369

    1370

    137113721373

    13741375

    137613771378

    13791380

    13811382

    13831384

    13851386

    13871388

    138913901391

    13921393

    1394

    13951396

    13971398

    13991400

    14011402

  • 8/3/2019 Spring Examples

    35/176

    35 Sathya Technologies Spring Kanakadhar Surapaneni :)

    21.If the object is not created at pre-instantiation then it will be created after receiving the callalong with its dependent objects.

    22.If singleton scope bean class property has prototype scoped bean class object as dependentvalue then the application context container also creates prototype scoped spring bean classobject during pre instantiation process along with singleton scope bean class object.

    23.It happens to satisfy dependency injection needs done on singleton scope bean classproperties.

    Example: Creation of our own singleton java class.

    //Designing our own singleton java class

    //Test.java

    public class Test

    {

    private static Test t = null;

    //private constructor-so no one can create object from outside the class

    private Test()

    {

    System.out.println("Private constructor of Test class invoked");

    }//static factory method

    public static Test getTest()

    {

    //singleton logic

    if(t == null)

    t = new Test();

    return t;

    }

    }

    Note: Also override clone() method of super class Object and throw CloneNotSupportedException.

    //Client.java

    class Client

    {

    public static void main(String[] args)

    {Test t1 = Test.getTest();

    14031404

    140514061407

    14081409

    1410

    1411

    1412

    1413

    1414

    1415

    1416

    1417

    1418

    1419

    14201421

    1422

    1423

    1424

    1425

    1426

    1427

    1428

    1429

    1430

    1431

    1432

    1433

    1434

    14351436

  • 8/3/2019 Spring Examples

    36/176

    36 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Test t2 = Test.getTest();

    Test t3 = Test.getTest();

    System.out.println(t1);

    System.out.println(t2);

    System.out.println(t3);

    }

    }

    Note: We have requested the same class object 3 times. But only one object gets created & the sameobject will be given for all 3 times.

    Scopes of Bean class objects under ApplicationContext container:

    We can make spring container to keep the created spring bean objects in different scopes. They are:

    1. singleton [default scope]

    2. prototype

    3. request

    4. session

    5. global session

    singleton: container makes spring bean class object as shared object for multiple calls given tofactory.getBean() with bean id.

    Eg:

    The client application may call factory.getBean(bd) for multiple times. Still the spring containercreates and returns only one DemoBean class object.

    Singleton java class means the java class that allows to create only one object per jvm. It means theclass has restriction related logic.

    Note: In the above example BeanDemo class need not to be designed as singleton java class. Butcontainer creates only one object for DemoBean class. Here its the responsibility of spring

    container.When spring bean scope is singleton the spring container never makes spring bean class assingleton java class but spring container restricts itself and creates only one object for spring beanclass though factory.getBean(id) is called for multiple times.

    Prototype: It gives an independent spring bean class object for each call to factory.getBean(id); Eg:

    request, session, global session are used for web applications.

    request: Only one object will be used from beginning to end of the same request.

    session: from beginning to expiry of same session single object will be used.

    global session: Its commonly shared by the entire web application.

    Note: When we give setter injection we should not give only parameterized constructor in the class.

    1437

    1438

    1439

    1440

    1441

    1442

    1443

    14441445

    1446

    1447

    1448

    1449

    1450

    1451

    1452

    14531454

    1455

    1456

    14571458

    14591460

    14611462

    1463146414651466

    14671468

    1469

    1470

    1471

    1472

    1473

  • 8/3/2019 Spring Examples

    37/176

    37 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Because when no tags are available in spring configuration file then springcontainer tries to create object by using default [zero parameterized] constructor. If its not availablethen immediately error arises. When no constructors (zero or parameterized) are available in theclass then automatically compiler creates a default and zero parameterized constructor.

    //Example: First application with ApplicationContext or JEE or Advanced Container

    //Client steps:

    1. Locate Spring-Configuration file + Activate ApplicationContext Container + Read Spring-Configuration file

    2. Request object of business-logic class.

    3. Call business-logic methods.

    4. Close container

    //DemoInter.java

    public interface DemoInter

    {

    public String wish(String uname);

    }

    //DemoInterImpl.java

    public class DemoInterImpl implements DemoInter

    { private String message;

    public DemoInterImpl()

    {

    System.out.println("Constructor executed");

    }

    public void setMessag(String s)

    {

    message=s;

    }

    public String wish(String uname)

    {

    return message+" "+uname+" Have a great day";

    }

    }

    1474147514761477

    1478

    1479

    14801481

    1482

    1483

    1484

    1485

    1486

    1487

    1488

    1489

    1490

    1491

    14921493

    1494

    1495

    1496

    1497

    1498

    1499

    1500

    1501

    1502

    1503

    1504

    1505

    1506

  • 8/3/2019 Spring Examples

    38/176

    38 Sathya Technologies Spring Kanakadhar Surapaneni :)

    //spring.cfg.xml

    Hello

    //DemoClient.java

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class DemoClient

    {

    public static void main(String args[]){

    ClassPathXmlApplicationContext ctx = newClassPathXmlApplicationContext("spring.cfg.xml");

    DemoInter d1=(DemoInter)ctx.getBean("demo");

    DemoInterImpl d2=(DemoInterImpl)ctx.getBean("demo");

    System.out.println(d1.wish("Sai"));

    ctx.close();

    }

    }

    Note: We are requesting the same class object twice. But container creates only one object & givesthe same object for every request.

    Example: Prototype scope

    Note:

    1. Same as above example. We are giving a new attribute for our tag as shown belowin spring configuration file.

    2. If we donot specify any scope by default the scope will be singleton.3. If the scope is prototype:

    1507

    1508

    1509

    1510

    1511

    15121513

    1514

    1515

    1516

    1517

    1518

    1519

    1520

    1521

    1522

    1523

    15241525

    15261527

    1528

    1529

    1530

    1531

    1532

    1533

    15341535

    1536

    1537

    15381539

    15401541

  • 8/3/2019 Spring Examples

    39/176

    39 Sathya Technologies Spring Kanakadhar Surapaneni :)

    1. for every request a separate object will be created.

    2. Without recieving the request object will not be created by container.

    Hello friends... Gmg. :)

    Interface Injection:

    1. If sring container performs dependency injection on bean properties by implementing theXxxAware interfaces then it is called as interface injection.

    2. All these XxxAware interfaces are predefined interfaces supplied by spring api on one bean

    spring bean class property.

    3. We can perform all 3 types of dependency injection.

    4. We cant use interface injection to inject our own values.

    5. Interface injection can perform special values injection given by spring container.

    Predfined interfaces used for dependency injection:

    1. org.springframework.beans.factory.BeanNameAware interface makes spring bean classgetting its bean id given in spring configuration file through interface injection.

    2. org.springframework.beans.factory.BeanFactoryAware interface injects the current

    underlying bean factory container to spring bean class through interface injection.3. org.springframework.context.ApplicationContextAware injects the current underlying

    application context container to spring bean class.

    Note:

    1. While performing interface injection on spring bean class the spring bean class cant act aspojo class.

    2. Interface injection is useful to make spring bean to know about itself and other spring beansmanaged by the container.

    Example: Interface Injection

    //Demo.java

    public interface Demo {

    String hi();

    }

    //DemoBean.java

    import org.springframework.beans.BeansException;

    import org.springframework.beans.factory.BeanNameAware;

    import org.springframework.context.ApplicationContext;

    import org.springframework.context.ApplicationContextAware;

    1542

    1543

    1544

    1545

    1546

    1547

    1548

    1549

    15501551

    1552

    1553

    1554

    1555

    1556

    1557

    15581559

    1560

    156115621563

    1564

    15651566

    15671568

    1569

    1570

    1571

    1572

    1573

    1574

    1575

    1576

    1577

    1578

  • 8/3/2019 Spring Examples

    40/176

    40 Sathya Technologies Spring Kanakadhar Surapaneni :)

    public class DemoBean implements Demo, BeanNameAware, ApplicationContextAware{

    String msg, bname;

    ApplicationContext ctx = null;

    public void setMsg(String msg) {

    this.msg = msg;

    }

    public void setApplicationContext(ApplicationContext ctx)

    throws BeansException {

    this.ctx = ctx;

    }

    public void setBeanName(String bname) {

    this.bname = bname;

    }

    public String hi() {

    System.out.println("Logical current bean name is: "+bname);

    System.out.println("No. of beans managed by underlying container is:"+ctx.getBeanDefinitionCount());

    System.out.println("Current bean is singleton: "+ctx.isSingleton(bname));

    System.out.println("Current bean is proptotype bean: "+ctx.isPrototype(bname));return msg;

    }

    }

    // applicationContext.xml

    Hi Friends... Gmg. Njoy Spring concepts n coding. :)

    1579

    1580

    1581

    1582

    1583

    1584

    1585

    1586

    1587

    1588

    1589

    1590

    1591

    1592

    1593

    15941595

    1596

    15971598

    1599

    1600

    1601

    1602

    1603

    1604

    16051606

    1607

    1608

    1609

    1610

    1611

    1612

    1613

    1614

  • 8/3/2019 Spring Examples

    41/176

    41 Sathya Technologies Spring Kanakadhar Surapaneni :)

    //DemoClient.java

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import java.util.Date;

    public class DemoClient

    {

    public static void main(String args[])

    {

    ClassPathXmlApplicationContext ctx = newClassPathXmlApplicationContext("applicationContext.xml");

    Demo d1=(Demo)ctx.getBean("db");

    Date d2=(Date)ctx.getBean("dt");

    //DemoImpl d2=(DemoImpl)ctx.getBean("db");

    System.out.println(d1.hi());

    System.out.println(d2);

    }

    }

    Reading Properties File: Place holder represents bean property value that should be collected fromproperties file based on the given key name dynamically at runtime of the program.

    Purpose of properties file in spring application:properties files and xml files are given to makejava application code as flexible by passing input values of application from outside the application.

    Note:

    1. Work with properties files only when our spring application is forced to work with existingproperties file. Dont create new properties files because the same flexibility can beachieved with xml file (spring configuration file) also.

    2. The standard principle of s/w industry is dont hard code any values that can be modified infuture or changed for regular intervals.

    Eg:jdbc driver class name, url, username, password etc..,Example: Reading a values from properties file & writing to spring configuration file.

    1615

    1616

    1617

    1618

    1619

    1620

    1621

    16221623

    1624

    1625

    1626

    1627

    1628

    1629

    1630

    16311632

    16331634

    1635

    163616371638

    16391640

    16411642

  • 8/3/2019 Spring Examples

    42/176

    42 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Note: In properties file we can specify comments by using # or !//data.properties

    #demo.properties

    our.name = Dharani

    our.age = 25

    our.address = Hyd

    our.email = [email protected]

    //DemoBean.java

    public class DemoBean {

    String name, email, address;

    int age;

    public void setName(String name) {

    this.name = name;

    }public void setEmail(String email) {

    this.email = email;

    }

    public void setAddress(String address) {

    this.address = address;

    }

    public void setAge(int age) {

    this.age = age;

    }

    16431644

    1645

    1646

    1647

    1648

    1649

    1650

    1651

    1652

    1653

    1654

    1655

    16561657

    1658

    1659

    1660

    1661

    1662

    1663

    1664

    1665

  • 8/3/2019 Spring Examples

    43/176

    43 Sathya Technologies Spring Kanakadhar Surapaneni :)

    public String hi()

    {

    return name+" "+age+" "+email+" "+address;

    }

    }

    //applicationContext.xml

    ${our.name}

    ${our.email}

    ${our.address}

    ${our.age}

    1666

    1667

    1668

    1669

    1670

    1671

    1672

    1673

    1674

    1675

    16761677

    16781679

    1680

    1681

    1682

    1683

    1684

    1685

    1686

    1687

    1688

    1689

    1690

    1691

    1692

    1693

    1694

    1695

    1696

    1697

    1698

  • 8/3/2019 Spring Examples

    44/176

  • 8/3/2019 Spring Examples

    45/176

    45 Sathya Technologies Spring Kanakadhar Surapaneni :)

    ${name}

    ${email}

    ${address}

    ${age}

    Example: Reading multiple configuration files

    //applicationContext1.xml

    Hello friends Gmg.

    //applicationContext2.xml

    Note: "applicationContext2.xml" is reading identification name of "applicationContext1.xml" file.It means we may have any number of configuration files for the purpose of easy organization, still

    programaticdally we can consider them as a single file.

    1733

    1734

    1735

    1736

    1737

    1738

    1739

    1740

    1741

    1742

    1743

    1744

    1745

    1746

    1747

    1748

    1749

    1750

    1751

    1752

    1753

    1754

    1755

    1756

    1757

    1758

    1759

    1760

    1761

    1762

    1763

    176417651766

  • 8/3/2019 Spring Examples

    46/176

    46 Sathya Technologies Spring Kanakadhar Surapaneni :)

    //DemoBean.java

    public class DemoBean {

    TestBean tb = null;

    public void setTb(TestBean tb) {

    this.tb = tb;

    }

    public String toString()

    {

    return tb.msg;

    }

    }

    // TestBean.java

    public class TestBean {

    String msg;

    public void setMsg(String msg) {

    this.msg = msg;

    }

    public String toString()

    {

    return msg;

    }

    }

    //DemoClient.java

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class DemoClient

    {

    public static void main(String args[])

    {

    String cfg[] = {"applicationContext2.xml", "applicationContext1.xml"};

    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(cfg);

    DemoBean d = (DemoBean) ctx.getBean("d1");

    System.out.println(d);

    }

    }

    1767

    1768

    1769

    1770

    1771

    1772

    1773

    1774

    1775

    1776

    1777

    1778

    1779

    1780

    1781

    1782

    1783

    1784

    1785

    1786

    1787

    1788

    1789

    1790

    1791

    1792

    1793

    1794

    1795

    1796

    1797

    1798

    1799

    1800

  • 8/3/2019 Spring Examples

    47/176

    47 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Internationalization (I18n):

    1. Making our application projects working for multiple locales with flexibility in presentationlogic to pass display labels of input fields or any information from outside the application iscalled applying I18n on the project.

    2. The project i.e., enabled with I18n can give service to multiple client organizations whichmay belong to multiple communities without changing source code.

    Locale = language + country

    Examples for Language code & country code:

    En-us [English United States]

    En-au [English Australia]

    En-ca [English Canada]

    En-ie [English Ireland]

    En-nz [English new zealand]

    En-zw [English Zimbabwe]

    En-gb [English United Kingdom]

    Fr-be [French Belgium]

    Fr-ca [French Canada]

    Fr [French france]

    Fr-ch [French Switzerland]

    3. All the above locales codes are given by ISO we can collect them from IE [Internetexplorer] browser window settings as follows: Tools Internet options languages Add [itshows you multiple countries with multiple languages. So we can choose what we need forour applications]

    4. Here we write a separate properties file for each language and we furnish all the labels in itfor display of labels based on internet options of browser.

    5. In java application we use Locale class & ResourceBundle class of java.util package toapply the effect of I18n.

    6. While preparing multiple locale specific properties files the base file must be there becausewhen no matching file is available then values will be taken from this base file.

    7. Org.springframework.conext.support.ResouceBundleMessageSource class makes theunderlying application context container recognizing multiple locale properties files on I18nthat are given to the application.

    8. In order to make the container to get message from properties file we need to callgetMessage() method on the container object.

    9. For getMessage() method we have to pass 4 argumetns. They are:

    1. key in properties file

    2. java.lang.Object class array to pass argument values to place holders available inproperty values. If place holders are not there then we can pass null.as a value.

    1801

    180218031804

    18051806

    1807

    1808

    1809

    1810

    1811

    1812

    1813

    1814

    1815

    1816

    1817

    1818

    18191820182118221823

    18241825

    18261827

    18281829

    183018311832

    18331834

    1835

    1836

    18371838

  • 8/3/2019 Spring Examples

    48/176

    48 Sathya Technologies Spring Kanakadhar Surapaneni :)

    3. Default message: when message from given key is not collectable default message willbe displayed.

    4. java.util.Locale class object with language and country code.

    Example: Spring Internationalization#app.preoperties [base file]

    str1 = save - {0}english {1}

    str2 = clear - english

    str3 = delete - english

    str4 = cancel - english

    Note:

    1. "Str1" property has two place holders.

    2. Every poperty value can have place holders

    3. Always place holders starts with zero.

    4. For every property value place holder values can be supplied through string array variable.

    #app_en_ca.preoperties [english canada]

    str1 = save - {0} english {1} canada

    str2 = clear - english canada

    str3 = delete - english canada

    str4 = cancel - english canada#app_en_gh.preoperties [uk]

    str1 = save -{0} english {1} uk

    str2 = clear - english uk

    str3 = delete - english uk

    str4 = cancel - english uk

    #app.preoperties [french belgium]

    str1 = save - {0} french {1} belgium

    str2 = clear - french belgium

    str3 = delete - french belgium

    str4 = cancel - french belgium

    //applicationContext.xml

    18391840

    1841

    18421843

    1844

    1845

    1846

    1847

    1848

    1849

    1850

    1851

    1852

    1853

    1854

    1855

    1856

    18571858

    1859

    1860

    1861

    1862

    1863

    1864

    1865

    1866

    1867

    1868

    1869

    1870

    1871

    187218731874

  • 8/3/2019 Spring Examples

    49/176

    49 Sathya Technologies Spring Kanakadhar Surapaneni :)

    app

    //I18nApp.java

    import java.util.Locale;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class I18nApp {

    public static void main(String args[])throws Exception

    {

    Locale l = new Locale(args[0], args[1]);

    ClassPathXmlApplicationContext ctx = newClassPathXmlApplicationContext("applicationContext.xml");

    String msg = ctx.getMessage("str1", new String[]{"hi", "Sai"}, "default msg", l);

    msg +=" "+ ctx.getMessage("str2", null, "default msg", l);

    msg +=" "+ ctx.getMessage("str3", null, "default msg", l);

    msg +=" "+ ctx.getMessage("str4", null, "default msg", l);

    System.out.println("Message is: "+msg);

    }

    }

    Event Handling: Event is specific action performed on the component or object. To handle eventsand execute same logic every time we can depend upon listeners. These listeners provide eventhandling methods to handle the events.

    All events are objects and all listeners are interfaces in java environment

    In order to perform event handling four details are required:

    1. Source object [Eg: Button component]

    2. Event [Eg: ActionEvent]

    3. Listener [Eg: ActionListener]

    4. Event handling methods [Eg: public void actionPerform()]

    In spring environment event handling is given to notify when the spring container is activated ordeactivated in spring based applications or other java applications where spring is also used.

    This event handling helps the programmer to notice how much time the spring related businesslogic is executed in the project.

    To perform event handling on spring application we need the following details:

    18751876

    1877

    18781879

    1880

    1881

    1882

    1883

    1884

    1885

    1886

    1887

    1888

    18891890

    1891

    1892

    1893

    1894

    1895

    1896

    1897

    189818991900

    1901

    1902

    1903

    1904

    1905

    1906

    19071908

    19091910

    1911

  • 8/3/2019 Spring Examples

    50/176

    50 Sathya Technologies Spring Kanakadhar Surapaneni :)

    1.source object [application context container]

    2.event [application event]

    3. listener [application listener]

    4.event handling methods on application event

    ApplicationContext container supports 3 events:

    1. ContextRefreshedEvent

    2. RequestHandledEvent[Supported only in web applications. It gets activated for everyrequest]

    3. ContextClosedEvent

    Note:

    1. Event handling on spring container can be performed without touching existing java source

    code of application.

    2. For more information on this refer 3.8.3 Events topic of spring PDF file.

    Example: Event Handling

    public interface DemoInter

    {

    public String wish(String uname);

    }

    public class DemoInterImpl implements DemoInter

    {

    private String message;

    public DemoInterImpl()

    {

    System.out.println("Constructor executed");

    }

    public void setMessag(String s)

    {

    message=s;

    }

    public String wish(String uname)

    {

    return message+" "+uname+" Have a great day";

    }

    }

    1912

    1913

    1914

    1915

    1916

    1917

    19181919

    1920

    1921

    1922

    1923

    1924

    1925

    1926

    1927

    1928

    1929

    1930

    1931

    1932

    1933

    1934

    1935

    1936

    1937

    1938

    1939

    1940

    1941

    1942

    1943

    1944

    1945

  • 8/3/2019 Spring Examples

    51/176

    51 Sathya Technologies Spring Kanakadhar Surapaneni :)

    // Helper.java

    import java.util.Date;

    import org.springframework.context.ApplicationEvent;

    import org.springframework.context.ApplicationListener;

    public class Helper implements ApplicationListener {

    long startTime, endTime;

    public void onApplicationEvent(ApplicationEvent ae)

    {

    System.out.println("control in onApplicationEvent method");

    System.out.println(ae.toString());

    int index = ae.toString().indexOf("ContextRefreshedEvent");

    System.out.println("Index is: "+index);

    if(index != -1)

    {

    startTime = System.currentTimeMillis();

    System.out.println("Container started at "+new Date().toString());

    }

    else if(ae.toString().indexOf("ContextClosedEvent") != -1)

    {

    endTime = System.currentTimeMillis();

    System.out.println("Container is Closed at "+new Date().toString());

    System.out.println("Container is in activated mode for "+(endTime -startTime)+" milli seconds");

    }

    }

    }

    //spring.cfg.xml

    1946

    1947

    1948

    1949

    1950

    1951

    1952

    1953

    1954

    1955

    1956

    1957

    1958

    1959

    1960

    1961

    1962

    1963

    1964

    1965

    1966

    19671968

    1969

    1970

    1971

    1972

    1973

    1974

    1975

    1976

    19771978

    1979

    1980

    1981

  • 8/3/2019 Spring Examples

    52/176

  • 8/3/2019 Spring Examples

    53/176

    53 Sathya Technologies Spring Kanakadhar Surapaneni :)

    As these life cycle methods are user defined methods their names should be configured duringspring bean class configuration in spring configuration file by using init-method and destroy-method attributes of tag.

    Note: We can give any names for these life cycle methods. But init & destroy are standard names.Any way what ever the name it is, its mandatory to configure them in configuration file.

    Init() method is useful to check whether appropriate values were injected to spring bean propertiesare not through dependency injection.

    destroy() life cycle method is useful to nullify bean properties and to release non java resourcesassociated with bean properties when spring bean class object is about to destroy.

    Example: Programmatic initialization method

    import org.springframework.beans.factory.InitializingBean;

    public class Init implements InitializingBean{

    int p1;

    public Init()

    {

    System.out.println("In constructor");

    }

    public void setP1(int p1)

    {

    System.out.println("Insetter method");

    this.p1 = p1;

    }

    public void afterPropertiesSet() throws Exception

    {

    System.out.println("in after proeprties set "+p1);

    }

    }

    //applicationContext.xml

    //DemoClient.java

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class DemoClient {

    public static void main(String[] args) {

    201720182019

    20202021

    20222023

    20242025

    2026

    2027

    2028

    2029

    2030

    2031

    2032

    2033

    2034

    2035

    2036

    2037

    2038

    2039

    2040

    2041

    2042

    2043

    2044

    2045

    2046

    2047

    2048

    2049

    2050

    2051

    2052

    2053

  • 8/3/2019 Spring Examples

    54/176

    54 Sathya Technologies Spring Kanakadhar Surapaneni :)

    ClassPathXmlApplicationContext ctx = newClassPathXmlApplicationContext("applicationContext.xml");

    Init i1 = (Init) ctx.getBean("in");

    System.out.print(i1);}

    }

    Example: Programmatic destroy method

    import org.springframework.beans.factory.DisposableBean;

    public class Destroy implements DisposableBean{

    int p1;

    public Destroy() {

    System.out.println("In constructor of Destroy class");

    }

    public void setP1(int p1) {

    System.out.println("Insetter method");

    this.p1 = p1;

    }

    public void destroy() throws Exception {

    System.out.println("In destructor of Destroy class");}

    }

    //applicationContext.xml

    //DemoClient.java

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class DemoClient {

    public static void main(String[] args) {

    ClassPathXmlApplicationContext ctx = newClassPathXmlApplicationContext("applicationContext.xml");

    Destroy d = (Destroy) ctx.getBean("de");

    System.out.print(d);

    ctx.close();

    20542055

    2056

    20572058

    2059

    2060

    2061

    2062

    2063

    2064

    2065

    2066

    2067

    2068

    2069

    2070

    2071

    20722073

    2074

    2075

    2076

    2077

    2078

    2079

    2080

    2081

    2082

    2083

    2084

    20852086

    2087

    2088

    2089

  • 8/3/2019 Spring Examples

    55/176

    55 Sathya Technologies Spring Kanakadhar Surapaneni :)

    }

    }

    //Example: Declarative init() method

    Note:

    1. By using declarative statements we can configure any method as a init() method.

    2. Need not to implement any interface in case of declarative approach.

    //Init.java

    public class Init{

    int p1;

    public Init() {

    super();

    System.out.println("In constructor");

    }

    public void setP1(int p1) {

    System.out.println("In setter method");

    this.p1 = p1;

    }

    public void init(){

    System.out.println("in user defined call back method");

    }

    }

    //applicationContext.xml

    // DemoClient.java

    import org.springframework.beans.factory.xml.XmlBeanFactory;

    import org.springframework.core.io.ClassPathResource;

    public class DemoClient {

    public static void main(String[] args) {ClassPathResource res = new ClassPathResource("applicationContext.xml");

    2090

    2091

    2092

    2093

    2094

    2095

    2096

    2097

    2098

    2099

    2100

    2101

    2102

    2103

    2104

    2105

    2106

    21072108

    2109

    2110

    2111

    2112

    2113

    2114

    2115

    2116

    2117

    2118

    2119

    2120

    2121

    21222123

  • 8/3/2019 Spring Examples

    56/176

  • 8/3/2019 Spring Examples

    57/176

    57 Sathya Technologies Spring Kanakadhar Surapaneni :)

    Example:

    public class First {

    int a;

    int b;

    public void setA(int a) {

    this.a = a;

    }

    public void setB(int b) {

    this.b = b;

    }

    @Override

    public String toString() {

    return a+" "+b;

    }

    }

    public class Second {

    First f;

    public void setF(First f) {

    this.f = f;

    }

    @Override

    public String toString() {

    return f.toString();

    }

    }

    //applicationContext.xml

    10

    20

    2160

    2161

    2162

    2163

    2164

    2165

    2166

    2167

    2168

    2169

    2170

    2171

    2172

    2173

    2174

    2175

    2176

    2177

    2178

    2179

    2180

    2181

    2182

    2183

    2184

    2185

    2186

    2187

    2188

    2189

    2190

    2191

    2192

    2193

    2194

  • 8/3/2019 Spring Examples

    58/176

  • 8/3/2019 Spring Examples

    59/176

    59 Sathya Technologies Spring Kanakadhar Surapaneni :)

    // applicationContext.xml

    Sai

    1

    Kanakadhar

    //Client.java

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public final class Client {

    public Client() {}

    public static void main(String[] args) {

    ClassPathXmlApplicationContext ctx = newClassPathXmlApplicationContext("applicationContext.xml");

    Bean b1 = (Bean) ctx.getBean("one"); //calls one parameter constructor

    Bean b2 = (Bean) ctx.getBean("two");//calls two parameterized constructor

    System.out.println(b1);

    System.out.println(b2);

    }

    }

    FactoryBean:BeanFactory:

    1. A special bean class that can return other class object instead of its own object is called asFactoryBean.

    2. In our regular programming we will come across many predefined FactoryBean classes.

    3. When factory bean configuration bean id is configured as dependent value to our bean class

    property will not be injected with factory bean class object. It will be injected with someother class object returned by factory bean class.

    2231

    2232

    2233

    2234

    2235

    2236

    2237

    2238

    2239

    2240

    2241

    2242

    2243

    2244

    2245

    2246

    2247

    2248

    2249

    2250

    2251

    22522253

    2254

    2255

    2256

    2257

    2258

    2259

    2260

    22612262

    2263

    2264

    22652266

  • 8/3/2019 Spring Examples

    60/176

    60 Sathya Technologies Spring Kanakadhar Surapaneni :)

    4. To make spring bean class as factory bean class make that bean class to implementorg.springframework.beans.factory.FactoryBean interface.

    Example: To create our own FactoryBean class.

    //Demo.javapublic interface Demo {

    String hi();

    }

    //DemoBean.java

    import java.util.Calendar;

    import java.util.Date;

    public class DemoBean implements Demo{

    private Date dt;

    private Calendar cl;

    public void setDt(Date dt)

    {

    this.dt = dt;

    }

    public void setCl(Calendar cl)

    {this.cl = cl;

    }

    public String hi()

    {

    return "date: "+dt+" cl = "+cl;

    }

    }

    //TestBean.java [FactoryBean class]

    import java.util.Calendar;

    import org.springframework.beans.factory.FactoryBean;

    public class TestBean implements FactoryBean{

    public Object getObject() throws Exception {

    System.out.println("getObject()");

    Calendar cl = Calendar.getInstance();

    return cl;}

    22672268

    2269

    22702271

    2272

    2273

    2274

    2275

    2276

    2277

    2278

    2279

    2280

    2281

    2282

    2283

    2284

    22852286

    2287

    2288

    2289

    2290

    2291

    2292

    2293

    2294

    2295

    2296

    2297

    2298

    2299

    23002301

  • 8/3/2019 Spring Examples

    61/176

    61 Sathya Technologies Spring Kanakadhar Surapaneni :)

    public Class getObjectType() {

    System.out.println("getObjectType()");

    return Calendar.class;

    }

    public boolean isSingleton() {

    System.out.println("isSingleton()");

    return true;

    }

    }

    Note:TestBean class returns object of Calendar class.

    // applicationContext.xml

    //DemoClient.java

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class DemoClient

    {

    public static void main(String args[])

    {

    ClassPathXmlApplicationContext ctx = newClassPathXmlApplicationContext("applicationContext.xml");

    DemoBean d = (DemoBean) ctx.getBean("db");

    System.out.println(d.hi());}

    2302

    2303

    2304

    2305

    2306

    2307

    2308

    2309

    2310

    2311

    2312

    2313

    2314

    2315

    2316

    2317

    2318

    2319

    2320

    2321

    2322

    2323

    2324

    2325

    2326

    2327

    2328

    2329

    2330

    23312332

    2333

    23342335

  • 8/3/2019 Spring Examples

    62/176

    62 Sathya Technologies Spring Kanakadhar Surapaneni :)

    }

    Wiring: The process of configuring bean properties and performing dependency injection on beanis called as wiring operation.

    There are two types of wiring operations:1. Explicit wiring

    2. Auto wiring

    If spring bean properties are configured explicitly in spring configuration file for dependencyinjection is called as explicit wiring.

    The dependency injection configurations that we have done so far in our programming come underexplicit wiring.

    If container is detecting dependant values to bean properties automatically without anyconfigurati