Spring Annotation Tutorial

@Component :       

It is generic  stereotype for any spring managed component. While other stereotypes like @Repository, @Controller, @Service are specialized form of @Component for specific use. Specilized form of stereotypes(e.g. @Controller) should take precedence over @Component as it will have extra benifit of pointcuts, better suited for processing by spring tools. Since Spring 2.5.

@Repository :

Specialized form of @Component. This annotation work as marker for any class which fulfills the role of repository or Data Access  Object(Persistent Layer). Since Spring 2.0

@Controller :

Specialized form of @Component and applied to Presentation Layer.

@Service :

Specialized form of @Component and applied to Service Layer.

@Configuration :

@Configuration annotated class are same like old XML file where we used to define beans. @Configuration is configuring the beans using Java classes. Each @Configuration annotated class is a configuration in its own. @Configuration can be used in conjuction with @Bean to create beans. Java class annotated with @Configuration will have methods to instantiated and configure the dependencies. Such methods will be annotated with @Bean.  @Configuration annotated classes consist principally of @Bean-annotated methods that define instantiation, configuration, and initialization logic for objects that will be managed by the Spring IoC container.

@Configuration
public class SessionFactoryConfiguration {

   @Bean
   public DataSource dataSource() {
     DataSource dataSource = new OracleDataSource();
     dataSource.setURL();
     dataSource.setUser();
     return dataSource;
   }

   @Bean
   public SessionFactory sessionFactory() {
     SessionFactory sessionFactory
                = new SessionFactory();
     sessionFactory.setDataSource(dataSource());
     sessionFactory.setShowSql(true);
     return sessionFactory;
   }

}

@Bean

It is a method level annotation which work with @Configuration as mentioned above. It is same like <bean> element in XML configuration. It can also be used in Component Class(Annotated with @Configuration).

@Configuration
public class AppConfig {

    @Bean
    public ContactService contactService() {
        return new ContactServiceImpl();
    }

Above configuration is same as

<beans>
    <bean name="contactService" class="com.ContactServiceImpl"/>
</beans>

@Scope

Every dean defined in IoC container needs to have a scope, default scope is Singleton. @Scope is used in order to specify the scope of Beans defined with @Bean annotation. StandardScopes class is there to define all 4 type of scope.

@Configuration
public class MyConfiguration {
    @Bean
    @Scope(StandardScopes.PROTOTYPE)
    public ContactService contactService() {

    }
}

@DependsOn

@Primary

@Lazy

@Import

@ImportResource

@Value

private @Value("#{jdbcProperties.url}") String jdbcUrl;

To get this work you need to add property file in application context XML.

<util:properties id="jdbcProperties" location="classpath:jdbc.properties"/>

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.