Tuesday, 5 November 2013

Spring Annotation

Core Spring Annotation


SR
Annotation
Use
Explanation
1
@Autowired
Constructor, Field,
Method

Declares a constructor, field, setter
method, or configuration method
to be autowired by type. Items
annotated with @Autowired do not
have to be public.
2
@Configurable
Type
Used with <context:springconfigured>
to declare types whose
properties should be injected, even
if they are not instantiated by Spring.
Typically used to inject the properties
of domain objects.

3
@Order
Type, Method, Field
Defines ordering, as an alternative
to implementing the org.
springframework.core.Ordered
interface.

4
@Qualifier
Field, Parameter, Type,
Annotation Type
Guides autowiring to be performed by
means other than by type.

5
@Required
Method (setters)
Specifies that a particular property
must be injected or else the
configuration will fail.
6
@Scope
Type
Specifies the scope of a bean, either
singleton, prototype, request, session,
or some custom scope.




Stereotyping Annotations

These annotations are used to stereotype classes with regard to the application tier that they belong to. Classes that are annotated with one of these annotations will automatically be registered in the Spring application context if <context:component-scan> is in the Spring XML configuration. In addition, if a  PersistenceExceptionTranslationPostProcessor is configured in Spring, any bean annotated with @Repository will have SQLExceptions thrown from its methods translated into one of Spring’s unchecked  DataAccessExceptions.


SR
Annotaion
Use
Explanation
1
@Component
Type
Generic stereotype annotation for any Spring-managed
component.

2
@Controller
Type
Stereotypes a component as a Spring MVC controller.

3
@Repository
Type
Stereotypes a component as a repository. Also indicates that SQLExceptions thrown from the
component’s methods should be translated into Spring
DataAccessExceptions.


4
@Service
Type

Stereotypes a component as a service.





Spring MVC Annotations
These annotations were introduced in Spring 2.5 to make it easier to create Spring MVC applications with minimal XML configuration and without extending one of the many implementations of the Controller interface.







SR
Annotaion
Use
Explanation
1
@Controller
Type
Stereotypes a component as a Spring
MVC controller.
2
@InitBinder
Method
Annotates a method that customizes
data binding.
3
@ModelAttribute
Parameter,
Method

When applied to a method, used
to preload the model with the value
returned from the method. When applied to a parameter, binds a model attribute to the parameter .
4
@RequestMapping
Method, Type

Maps a URL pattern and/or HTTP method to a method or controller type.

5
@RequestParam
Parameter
Binds a request parameter to a method  parameter.
6
@SessionAttributes
Type
Specifies that a model attribute should be  stored in the session.

Transaction Annotations
The @Transactional annotation is used along with the <tx:annotation-driven> element to declare transactional  boundaries and rules as class and method metadata in Java.

SR
Annotaion
Use
Explanation
1
@Transactional
Method,Type
Declares transactional boundaries and rules on a bean and/or its methods.




The <tx:annotation-driven> element tells Spring to keep an eye out for beans that are annotated with @Transactional. In addition,you’ll also need a platform transaction manager bean declared in the Spring context. For example, if your application uses Hibernate, you’ll want to include the HibernateTransactionManager:
<bean id=”transactionManager”
class=”org.springframework.orm.hibernate3.
HibernateTransactionManager”>
<property name=”sessionFactory” ref=”sessionFactory”
/> </bean>
With the basic plumbing in place, you’re ready to start annotating the transactional boundaries:
@Transactional(propagation=Propagation.SUPPORTS,
readOnly=true)
public class TreasureRepositoryImpl implements
TreasureRepository {
@Transactional(propagation=Propagation.REQUIRED,
readOnly=false)
public void storeTreasure(Treasure treasure) { …}
}
At the class level, @Transactional is declaring that all methods should support transactions and be read-only. But, at the method-level, @Transactional declares that the storeTreasure() method requires a transaction and is not read-only.
Note that for transactions to be applied to @Transactionalannotated
classes, those classes must be wired as beans in Spring.






JMX Annotations
These annotations, used with the <context:mbean-export> element, declare bean methods and properties as MBe operations and attributes.

SR
Annotaion
Use
Explanation
1
@ManagedAttribute
Method
Used on a setter or getter method
to indicate that the bean’s property
should be exposed as a MBean
attribute.
2
@ManagedNotification
Type
Indicates a JMX notification emitted
by a bean.
3
@ManagedNotifications
Type

Indicates the JMX notifications
emitted by a bean.
4
@ManagedOperation
Method

Specifies that a method should be
exposed as a MBean operation.
5
@ManagedOperationParameter
Method
Used to provide a description for an
operation parameter.
6
@ManagedOperationParameters
Method
Provides descriptions for one or
more operation parameters.
7
@ManagedResource
Type
Specifies that all instances of a class
should be exposed a MBeans.

Exposing a Spring Bean as a MBean To get started with Spring-annotated MBeans, you’ll need to include <context:mbean-export> in the Spring XML configuration:
<context:mbean-export/>
Then, you can annotate any of your Spring-managed beans to be exported as MBeans:
@ManagedResource(objectName="pirates:name=PirateService")
public interface PirateService {
@ManagedOperation(
description="Get the pirate list")
public List<Pirate> getPirateList();
}
Here, the PirateService has been annotated to be exported as a
MBean and its getPirateList() method is a managed operation.




Aspectj Annotations


SR
Annotaion
Use
Explanation
1
@Aspect
Type
Declares a class to be an aspect.
2
@After
Method
Declares a method to be called after a
pointcut completes.

3
@AfterReturning
Method
Declares a method to be called after a
pointcut returns successfully.
4
@AfterThrowing
Method
Declares a method to be called after a
pointcut throws an exception.
5
@Around
Method
Declares a method that will wrap the
pointcut.
6
@Before
Method
Declares a method to be called before
proceeding to the pointcut.

7
@DeclareParents
Static Field
Declares that matching types should be given new parents—that is, it introduces new functionality into matching types.
8
@Pointcut
Method
Declares an empty method as a pointcut  placeholder method.

What’s important to note, however, is that while you can use AspectJ annotations to define Spring aspects, those aspects will be defined in the context of Spring AOP and will not be handled by the AspectJ runtime. This is significant because Spring AOP is limited to proxying method invocations and does not provide for the more exotic pointcuts (constructor interception, fieldinterception, etc.) offered by AspectJ.
Annotating Aspects
To use AspectJ annotations to create Spring aspects, you’ll first need to provide a bit of Spring XML plumbing:
<beans xmlns="http://www.springframework.org/schema/
beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/
schema/beans
http://www.springframework.org/schema/beans/
spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/springaop-
2.5.xsd">
<aop:aspectj-autoproxy/>
</beans>
The <aop:aspectj-autoproxy> element tells Spring to watch for
beans annotated with AspectJ annotations and, if it finds any, to
use them to create aspects. Then you can annotate bean classes
to be aspects:
@Aspect
public class ChantySinger {
@Pointcut(“execution(* Pirate.plunder(..))”)
public void plunderPC() {}
@Before(“plunderPC()”)
public void singYoHo() {
}
@AfterReturning(“plunderPC()”)
public void singAPiratesLifeForMe() {
}
}
This simple annotation-based aspect has a pointcut that is triggered by the execution of a plunder() method on the Pirate class. Before the Pirate.plunder() method is executed, the singYoHo() method is called. Then, after the Pirate.plunder() method returns successfully, the singAPiratesLifeForMe()



JSR -250 Annotation

SR
Annotation
Use
Explanation
1
@PostConstruct
Method
Indicates a method to be invoked after a bean has been created and dependency injection is complete. Used to perform any initialization work necessary.

2
@PreDestroy
Method
Indicates a method to be invoked just
before a bean is removed from the Spring context. Used to perform any cleanup work necessary.
3
@Resource
@Resource
Indicates that a method or field should be injected with a named resource (by default, another bean).

Wiring Bean Properties with @Resource Using @Resource, you can wire a bean property by name:
public class Pirate {
@Resource
private TreasureMap treasureMap;
}
In this case, Spring will attempt to wire the “treasureMap” property with a reference to a bean whose ID is “treasureMap”. If you’d rather explicitly choose another bean to wire into the property, specify it to the name attribute:
public class Pirate {
@Resource(name=”mapToSkullIsland”)
private TreasureMap treasureMap;
}
Initialization and Destruction Methods Using JSR-250’s @PostConstruct and @PreDestroy methods,
you can declare methods that hook into a bean’s lifecycle. For  example, consider the following methods added to the Pirate
class:
public class Pirate {
@PostConstruct
public void wakeUp() {
System.out.println(“Yo ho!”);
}
@PreDestroy
public void goAway() {
System.out.println(“Yar!”);
}
}
As annotated, the wakeUp() method will be invoked just after Spring instantiates the bean and goAway() will be invoked just before the bean is removed from the Spring container.


Testing Annotations

These annotations are useful for creating unit tests in the JUnit 4 style that depend on Spring beans and/or require a transactional context.


SR
Annotation
Use
Explanation
1
@AfterTransaction
Method
IUsed to identify a method to be invoked after a transaction has
completed.
2
@BeforeTransaction
Method
Used to identify a method to be
invoked before a transaction starts.
3
@ContextConfiguration
Type
Configures a Spring application
context for a test.
4
@DirtiesContext
Method
Indicates that a method dirties the Spring container and thus it must
be rebuilt after the test completes.
5
@IfProfileValue
Type,
Method
Indicates that the test class or method is enabled for a specific profile configuration.
6
@NotTransactional
Method
Indicates that a test method must
not execute in a transactional
context.
7
@ProfileValueSourceConfiguration
Type
Identifies an implementation of a
profile value source. The absence
of this annotation will cause profile
values to be loaded from system
properties.
8
@Repeat
Method
Indicates that the test method must
be repeated a specific number of
times.
9
@Rollback
Method
Specifies whether or not the transaction for the annotated
method should be rolled back
or not.
10
@TestExecutionListeners
Type
Identifies zero or more test execution listeners for a test class.
11
@Timed
Method
Specifies a time limit for the test
method. If the test does not complete before the time has expired, the test will fail.
12
@TransactionConfiguration
Type
Configures test classes for transactions, specifying the
transaction manager and/or the
default rollback rule for all test
methods in a test class.


Writing a Spring-Aware Test
The key to writing a Spring-aware test is to annotate the test class with @RunWith, specifying SpringJUnit4ClassRunner as the class runner behind the test:
@RunWith(SpringJUnit4ClassRunner.class)
public class PirateTest {
}
In this case, the Spring test runner will try to load a Spring application context from a file named PirateTest-context.xml. If you’d rather specify one or more XML files to load the application context from, you can do that with @ContextConfiguration:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "pirates.xml" })
public class PirateTest {
}
With test configured to load a Spring application context, you now may request that Spring autowire properties of the test class with beans from the Spring context:

Writing a Spring-Aware Test, continued
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "pirates.xml" })
public class PirateTest {
@Autowired
private Pirate pirate;
@Autowired
private TreasureMap treasureMap;
@Test
public void annotatedPropertyShouldBeAutowired() {
assertNotNull(pirate.getTreasureMap());
assertEquals(treasureMap, pirate.getTreasureMap());
}
}
In this case, the pirate and treasureMap properties will be wired with the beans whose ID are “pirate” and  “treasureMap”, respectively. Accessing the Spring Context in a Test If you need the Spring application context itself in a test, you can autowire it into the test the same as if it were a bean in the context:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "pirates.xml" })
public class PirateTest {
@Autowired
private Pirate pirate;
@Autowired
private ApplicationContext applicationContext;
@Test
public void annotatedPropertyShouldBeAutowired() {
assertNotNull(pirate.getTreasureMap());
assertEquals(applicationContext.
getBean("treasureMap"), pirate
.getTreasureMap());
}
}

No comments:

Post a Comment

Very Impotent Links for Java and Portal development development

Jar Download for Spring  Maven Or Gradel Dependency for Spring