Documente Academic
Documente Profesional
Documente Cultură
5
Spring without XML
About Speaker
!Speaker @ JavaOne, NFJS, Devcon, Borcon !Sun Certified Java 2 Architect. !Instructor for VisiBroker for Java, OOAD, Rational Rose,
Agenda
!Industry Forces !Whats New Spring 2.0 Spring 2.5 !Spring Annotations !Reducing Spring XML !Spring Without XML!
Industry Forces
!Annotations
EJB 3.X
Spring Frustrations
!Autowiring
Qualifiers
Spring 2.0
!New Bean Scopes httpSession !Easier XML Configuration
JSR 250 - @PostConstruct, @Resource JAX-WS 2.0s - @WebServiceRef EJB 3.0 - @EJB MVC annotations - @RequestParam, @RequestMapping Test Enhancements - Junit 4.4 and TestNG Stereotypes - @Component, @Controller Spring enhancements - @Autowired, AOP - @Configurable
<context:mbean-export />
JDK 1.3 Support Hibernate 2.1 and 3.0 Support (Must be Hibernate 3.1+) IBATIS SQL Maps 1.3 Apache OJB JDO 1.0 Support
Spring Annotations
Spring Annotations
!Spring 2.x Data Access
Annotations !Spring 2.x Aspects !Spring 2.5 Context Annotations !Spring 2.5 Stereotypes !Spring 2.5 Factory Annotations !JSR-250 javax.annotations
!Spring 2.5 MVC Annotations
Indicates that a class functions as a repository or a data access object (DAO) Exceptions are transparently translated Springs DataAccessException Hierarchy
<aop:aspectj-autoproxy />
@Pointcut(bean(nameofBean*))
!Allows for stack selection
accountController -> accountService -> accountDAO @Pointcut(bean(account*)) matches vertical stack @Pointcut(bean(*DAO)) matches horizontal (all DAOs)
Indicates the scope to use for annotated class instances Default == singleton Options:
Web Options:
Indicates that a class is a component Class is a candidate for auto-detection Custom component extensions
!@Controller
Specialized Component Typically used with RequestMapping annotation Discussed in section on web mvc
!@Repository
Config:
AutowiredAnnotationBeanPostProcessor !@Configurable
Marks class as being eligible for Spring-driven configuration Used with AspectJ !@Qualifier Qualifies a bean for autowiring May be customized !@Required Marks a method as being injection required
Configuring Autowired
<bean class=AutowiredAnnotationBeanPostProcessor / >
!Or
<context:annotation-config/>
DEMO
@Resource
@PostConstruct
Method invocated after construction No XML Multiple methods possible Method invocated when application context hosting object is closed
@PreDestroy
@Resource Options
@Resource(name=dataSourceName) Public void setDataSource(DataSource source) { @Resource private DataSource dataSource; // name = dataSource <bean class=org.springframework.context.annotations.Common AttributeBeanPostProcessor> <property name=alwaysUseJndiLookup value=true /> Or <jee:jndi-lookup id=dataSource jdni-name=java:comp/env/jdbc/peopleDS />
@Resource Notes
!No Spring managed resource for the default name
DEMO
ModelAndView Object Model Object Map for exposing model View Object String which is a view name Void if method wrote the response content directly
Spring 2.5
Spring with LESS XML
AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor
!Example:
<context:component-scan base-package="org.example"> <context:include-filter type="regex" expression=".*Stub.*Repository"/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan>
Spring 2.5
Spring with NO XML
Auto Discovery
Java metadata
!Separate from the metadata parsing
Java Configuration
!http://www.springframework.org/javaconfig
@Configuration public class NoXMLConfig { @Bean public GreetingService greetingService() { GreetingServiceImpl service = new GreetingServiceImpl(); service.setMessageRepository(messageRepository()); return service; } @Bean public MessageRepository messageRepository() { StubMessageRepository repository = new StubMessageRepository(); repository.initialize(); return repository; } }
Java Auto-Discovery
GenericApplicationContext context = new GenericApplicationContext(); ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(context); scanner.scan(com.cmentor"); context.refresh();
Summary
! Spring 2.5 Annotations ! Spring MVC ! Spring 2.x Reduces XML ! Spring 2.5 Provides Auto-discovery ! Reality Check:
Most configurations will have XML and will provide a combination of annotations and XML
Questions
Ken.sipe@perficient.com