Spring 2.5 Aspect Oriented Programming - Massimiliano Dessì - E-Book

Spring 2.5 Aspect Oriented Programming E-Book

Massimiliano Dessì

0,0
31,19 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.

Mehr erfahren.
Beschreibung

Developing powerful web applications with clean, manageable code makes the maintenance process much easier. Aspect-Oriented Programming (AOP) is the easiest and quickest way to achieve such results. Spring is the only Java framework to offer AOP features. The combined power of Spring and AOP gives a powerful and flexible platform to develop and maintain feature-rich web applications quickly.
This book will help you to write clean, manageable code for your Java applications quickly, utilizing the combined power of Spring and AOP. You will master the concepts of AOP by developing several real-life AOP-based applications with the Spring Framework, implementing the basic components of Spring AOP: Advice, Joinpoint, Pointcut, and Advisor.
This book will teach you everything you need to know to use AOP with Spring. It starts by explaining the AOP features of Spring and then moves ahead with configuring Spring AOP and using its core classes, with lot of examples. It moves on to explain the AspectJ support in Spring. Then you will develop a three-layered example web application designed with Domain-Driven Design (DDD) and built with Test-Driven Development methodology using the full potential of AOP for security, concurrency, caching, and transactions.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB

Seitenzahl: 204

Veröffentlichungsjahr: 2009

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Table of Contents

Spring 2.5 Aspect-Oriented Programming
Credits
About the Author
About the Reviewer
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code for the book
Errata
Piracy
Questions
1. Understanding AOP Concepts
Limits of object-oriented programming
Code scattering
Code tangling
The AOP solution
What Spring provides in terms of AOP
Programmatic way
Before advice
After returning advice
Around advice
After throwing advice
The old Spring XML way
AOP with IoC in Spring 2.5
AspectJ annotations
Before advice
After returning advice
Around advice
After (finally) advice
After throwing advice
Schema-based configuration
Before advice
After advice
After returning advice
After throwing advice
Around advice
Summary
2. Spring AOP Components
Aspect
Pointcut
Pointcut and its components
NameMatchMethodPointcut
RegexpMethodPointcut
StaticMethodMatcherPointcut
DynamicMethodMatcherPointcut
Operations on Pointcut
ComposablePointcut
ControlFlowPointcut
Pointcut constants
Joinpoint
Advice
Before advice
After returning advice
After throwing advice
Advisor
Introductions
Summary
3. Spring AOP Proxies
Proxy
JDK proxy
CGLIB proxy
Creating proxies programmatically
ClassicProxy
AspectJProxy
ProxyFactoryBean
ProxyFactoryBean and proxies
ProxyFactoryBean in action
Advised objects
Autoproxy
Autoproxy with classic Spring
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
AbstractAdvisorAutoProxyCreator
AutoProxyCreator with metadata
Autoproxy with AspectJ
Autoproxy with annotation
Autoproxy with XML Schema
Target sources
Hot swappable target sources
Pooling target sources
Prototype target sources
ThreadLocal target source
Summary
4. AspectJ Support
AspectJ annotations
Aspect
Pointcut
execution
within
this
target
args
@target
@args
@ within
@ annotation
bean
Selection on methods' names
Selection on types of argument
Selection on type of return
Selection on declared exceptions
Selection on hierarchy
Selection on annotations
Binding advice arguments
JoinPoint
Binding arguments
Binding of return values
Exception binding
Annotation binding
Advice
@Before
@AfterReturning
@AfterThrowing
@After
@Around
Introduction
XML Schema-based configuration
Aspect
Pointcut
Advice
Before advice
After returning advice
After throwing advice
After (finally) advice
Around advice
Introduction
Advisors
Recipes
Dependency injection in domain objects
Advice ordering
Configuration mixin
Aspect instantiation model
AspectJ weaving in Spring
Load-time weaving with Spring
Load-time weaving with AspectJ
AOP strategy considerations
Summary
5. Design with AOP
Concurrency with AOP
Transparent caching with AOP
Security with AOP
Securing methods with security interceptors
Securing methods with pointcuts
Securing methods with annotations
Summary
6. Three-tier Spring Application, Domain-Driven Design
Domain-Driven Design
Roles and responsibilities
Entities
Aggregates
Modules
Value objects
Factories
Repositories
Services
Architecture
User interface
Application layer
Domain layer
Infrastructure layer
Sample application
Design
Services
Factories
Repositories
Summary
7. Three-tier Spring Application, Tests and AOP
Application layer and user interface
Test
AOP
Cache
Concurrent
TimeExecutionManagedAspect
Transactions
Security
Summary
8. Develop with AOP Tools
Java Development Kit
Spring
Eclipse
Eclipse plug-ins (Linux, MacOSX, and Windows)
SpringIDE
AJDT
Apache Tomcat
Ubuntu Linux
MacOSX
Microsoft Windows
Common steps for Linux, MacOSX, and Windows
PostgreSQL
Ubuntu Linux
MacOSX
Microsoft Windows
Common steps for Linux, Apple MacOSX, and Microsoft Windows
JDBC Driver
Summary
Index

Spring 2.5 Aspect-Oriented Programming

Massimiliano Dessì

Spring 2.5 Aspect-Oriented Programming

Copyright © 2009 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, Packt Publishing, nor its dealers or distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.

First published: February 2009

Production Reference: 1170209

Published by Packt Publishing Ltd.

32 Lincoln Road

Olton

Birmingham, B27 6PA, UK.

ISBN 978-1-847194-02-2

www.packtpub.com

Cover Image by Parag Kadam (<[email protected]> )

Credits

Author

Massimiliano Dessì

Reviewer

Stefano Sanna

Acquisition Editor

Rashmi Phadnis

Development Editor

Dhiraj Chandiramani

Technical Editor

Abhinav Prasoon

Copy Editor

Sneha Kulkarni

Editorial Team Leader

Akshara Aware

Project Manager

Abhijeet Deobhakta

Project Coordinator

Neelkanth Mehta

Indexer

Rekha Nair

Proofreader

Chris Smith

Production Coordinator

Aparna Bhagat

Cover Designer

Aparna Bhagat

About the Author

Massimiliano Dessì is an experienced Java developer who started developing JEE applications in 2000. In 2004 he discovered the Spring Framework 1.0, and since then he has been one of its most enthusiastic users.

Massimiliano is specialized in design and development of enterprise Web-based applications, such as portals, content management systems and banking applications. JEE technology and applied agile methodologies like eXtreme Programming are his core skills. He currently works as a Software Architect and Engineer for Sourcesense (www.sourcesense.com), one of the leading European Open Source System Integrators. He have a strong background as a community supporter and open-source software contributor. He's also an active technical writer, author of various articles, publications, and reviews availables on http://www.jugsardegna.org/vqwiki/jsp/Wiki?MassimilianoDessi and on http://wiki.java.net/bin/view/People/MassimilianoDessi.

Massimiliano also speaks regurarly at Users Groups conferences (including Java Users Groups, Spring Framework User Group, Javaday, and Linux Users Groups).

He is one of the founders of Java User Group Sardinia (http://www.jugsardegna.org), as well as the founder of "Spring Framework Italian User Group", "Jetspeed Italian user Group" and "Groovy Italian User Group".

He maintains a personal weblog at: http://jroller.com/page/desmax.

Massimiliano lives in Cagliari, Sardinia with his family.

About the Reviewer

Stefano Sanna is senior engineer and Java ME Tech Lead at Beeweeb Technologies (Rome), where his activities are focused on mobile multimedia applications (JME, iPhone, Android). His experience on Java for mobile devices began in 1999 on a Psion handheld computer. He is author of the Italian book "Java Micro Edition", targeted on developing network-oriented applications for mobile phones and published by Hoepli (Nov 2007). He has written more than 50 technical articles on Java ME, mobile technologies, and Linux. He has presented more than 30 seminars on the same topics, including Sun SPOTs and Arduino sensor networks. Stefano supports some Italian communities: JUG Sardegna, Java Mobile Developers Forum, and Java Italian Association. Before joining Beeweeb, he was a software engineer at CRS4 (Sardinia) in the Network Distributed Applications group, where he worked on multimodal applications and mobile cartography. He regularly writes about mobile computing, Java, embedded systems, and good Italian food on his blog: http://www.gerdavax.it.

This book is dedicated to my wife Monica and my children Michele, Mattia and Chiara

Preface

In software engineering, mostly low-level languages were used for many years, which were closer to the computer machine code than to human language. In the 70s, Brian Kernighan and Dennis Ritchie created the language C. It was quite similar to human language, making it easier and faster to write code, while keeping a high level of abstraction. This allowed the realization of concepts and ideas, which was not possible for the previous languages as they were forced to focus on the processor's language. Later, Smalltalk and C++ permitted the shaping of concepts and ideas through objects‚ providing a new way to structure applications and write programs. With the object-oriented languages, any system could be created with increasing complexity in a more manageable way, thanks to the modeling of entities in the form of types and the collaboration between them. In some cases, object-oriented programming introduces or causes inefficiencies, and aspect-oriented programming helps in filling these gaps. The aim of Aspect-Oriented Programming (AOP) is not to replace Object-Oriented Programming (OOP), but to complement it, allowing you to create clearer and better structured programs. Gregor Kiczales, one of the founders of AOP, said (an extract from http://www.cs.ubc.ca/~gregor/papers/kiczales-ECOOP1997-AOP.pdf)"We have found many programming problems for which neither procedural nor object-oriented programming techniques are sufficient to clearly capture some of the important design decisions the program must implement. This forces the implementation of those design decisions to be scattered throughout the code, resulting in tangled code that is excessively difficult to develop and maintain." Neither aspect-oriented programming nor object-oriented programming can make up for a bad design: The first assumption is that a software system is well-designed. There is no solution for a badly designed system, and also none for a badly implemented system. There is only one good strategy: to change it. The difference between a good and a bad design is the capacity to evolve and adapt to new requirements without being twisted. Object-oriented programming, supported by aspect-oriented programming, helps designers and developers in this direction.

What this book covers

Chapter 1 introduces the ideas that led to Aspect-Oriented Programming. An overview of main concepts of AOP is used to describe components and features provided by Spring AOP, while a set of concise yet clear examples lets the reader discover what can actually be done with AOP.

Chapter 2 describes in detail the fundamentals of AOP in Spring, presenting interfaces and classes introduced in early 1.x versions of the framework. This chapter shows how to use AOP programmatically, to let the reader discover the basis of Spring AOP and the components that implement Aspect-Oriented Programming in Spring.

Chapter 3 explains how the weaving of AOP components is done using the proxy pattern and JDK or CGLIB implementations. It describes the purpose of proxies and how to use them effectively. Some practical examples show how to use the proxies programmatically, with annotations and with XML; they explain the ProxyFactoryBean and how to make the programmer's work easier with AutoProxy. The chapter describes also some smart techniques on target sources.

Chapter 4 explains how Spring AOP is supported by AspectJ. Configuration activity is made simpler, more flexible and more powerful, thanks to annotations and the syntax of AspectJ on pointcuts (without which those costructs would not be available). All examples show how to use AspectJ with both annotations and XML. The chapter contains practical recipes for specific cases, such as the injection of dependencies on domain objects, the management of aspects' priority, the use of different life cycles for Aspects and how to use Load Time Weaving. The chapter ends with some strategies on how to choose different AOP approaches to fulfil specific requirements.

Chapter 5 describes the design alternatives that can be implemented using AOP. These alternatives are solutions for common requirements: concurrency, caching, and security. Using AOP, they can be achieved in a very elegant and easy way, being at the same time totally transparent for the system where they are applied.

Chapter 6 introduces Domain-Driven Development as a alternative way to design applications. The prototype example presented in this chapter is a typical Three-Layer application, where DDD is used for design and AOP is used to inject the dependencies on domain objects. iBatis is used for persistence to the database.

Chapter 7 completes the prototype application started in Chapter 6, showing the application layer and the user interface. The latter is implemented with Spring MVC using annotations. Integration and unit tests are used to verify the correctness of the classes; DBUnit is used to test persistence classes, while some Mock classes are used to test the UI. The chapter contains the configurations for the prototype infrastructure, including autentication and authorization with Spring Security and the JUnit 4.5 test suite.

Chapter 8 describes the development tools needed to include Spring AOP and AspectJ in the Eclipse IDE. The reader can find here detailed istructions on how to configure Eclipse with the plug-ins for Spring and for the AspectJ Development Tool, and how to install the PostgreSQL database and the Apache Tomcat servlet engine. All installation procedures are described for the three main operating systems: Ubuntu Linux, Apple Mac OS X, and Microsoft Windows XP.

What you need for this book

The book requires a basic knowledge of Spring and it's configuration. It needs software like Java Development Kit (JDK) 1.5 or higher, Spring 2.5.6 (at the time of writing on this book), Eclipse (3.4.1 or higher version), Eclipse plug-ins, Tomcat Apache (Tomcat 6.x), and PostgreSQL (version 8.3).

Who this book is for

This book is written for software architects, engineers, and developers that want be able to write applications in a more modular and concise way, without learning AspectJ or using languages other than Java and frameworks other than Spring.

Conventions

In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning.

Code words in text are shown as follows: "We can include other contexts through the use of the include directive."

A block of code will be set as follows:

package org.springaop.target; public class ExceptionTarget { public void errorMethod() throws Exception { throw new Exception("Fake exception"); } public void otherErrorMethod() throws IllegalArgumentException { throw new NullPointerException("Other Fake exception"); } }

When we wish to draw your attention to a particular part of a code block, the relevant lines or items will be made bold:

package java.lang.reflect; public interface InvocationHandler { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable; }

Any command-line input and output is written as follows:

java -javaagent:<path_on_your_machine>/spring-framework-X.X/lib/aspectj/aspectjweaver.jar

<package>.<yourclass>.Main

New terms and important words are introduced in a bold-type font. Words that you see on the screen, in menus or dialog boxes for example, appear in our text like this: "clicking the Next button moves you to the next screen".

Note

Warnings or important notes appear in a box like this.

Tip

Tips and tricks appear like this.

Reader feedback

Feedback from our readers is always welcome. Let us know what you think about this book, what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.

To send us general feedback, simply drop an email to <[email protected]>, making sure to mention the book title in the subject of your message.

If there is a book that you need and would like to see us publish, please send us a note in the SUGGEST A TITLE form on www.packtpub.com or email <[email protected]>.

If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors.

Customer support

Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.

Downloading the example code for the book

Visit http://www.packtpub.com/files/code/4022_Code.zip to directly download the example code.

The downloadable files contain instructions on how to use them.

Errata

Although we have taken every care to ensure the accuracy of our contents, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in text or code—we would be grateful if you would report this to us. By doing this you can save other readers from frustration, and help to improve subsequent versions of this book. If you find any errata, report them by visiting http://www.packtpub.com/support, selecting your book, clicking on the let us know link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata added to the list of existing errata. The existing errata can be viewed by selecting your title from http://www.packtpub.com/support.

Piracy

Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works in any form on the Internet, please provide the location address or web site name immediately so we can pursue a remedy.

Please contact us at <[email protected]> with a link to the suspected pirated material.

We appreciate your help in protecting our authors, and our ability to bring you valuable content.

Questions

You can contact us at <[email protected]> if you are having a problem with some aspect of the book, and we will do our best to address it.