Presentation is loading. Please wait.

Presentation is loading. Please wait.

Intermediate Spring Matt Wheeler. Notes This is a training NOT a presentation Please ask questions Prerequisites – Introduction to Java Stack – Basic.

Similar presentations


Presentation on theme: "Intermediate Spring Matt Wheeler. Notes This is a training NOT a presentation Please ask questions Prerequisites – Introduction to Java Stack – Basic."— Presentation transcript:

1 Intermediate Spring Matt Wheeler

2 Notes This is a training NOT a presentation Please ask questions Prerequisites – Introduction to Java Stack – Basic Java and XML skills – Installed LdsTech IDE (or other equivalent – good luck there ;)

3 Overview Bean lifecycle Xml Configuration Extensions (namespace handlers) Lifecycle hooks JSR 250 Bean post processors Spring Annotations JSR 330 Annotations (@Inject, @Named)

4 Review Last time we went over – Bean definitions – Dependency Injection (DI) and Inversion of Control (IoC) – Application context – Bean scopes

5 Review ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); SomeBean someBean = context.getBean(SomeBean.class); someBean.callMethod(); Bean definition (beans.xml) Application Context

6 Spring Bean Lifecycle 1. Create bean definitions (from xml or annotations, or, …) 2. Instantiate beans using the definitions 3. Set bean dependencies (values and bean references) on the newly instantiated beans 4. Initialization 5. Deliver bean to requester for use 6. On container shutdown call destruction callback method

7 Xml Configuration Extension Also called namespace handlers Shorten bean definition configuration Provide easily reusable definitions Self documenting More readable

8 Spring Xml Configuration Extensions SchemaDescription / Documentation utilCreate non-anonymous collection types that can be referenced by id http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/xsd-config.html#xsd-config-body-schemas-util jeeElements such as jndi support / ejb shortcuts http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/xsd-config.html#xsd-config-body-schemas-jee langExpose beans written in another language like JRuby or Groovy http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/xsd-config.html#xsd-config-body-schemas-lang jmsDeal with configuring JMS-related beans http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/xsd-config.html# xsd-config-body-schemas-jms txTransaction support http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/xsd-config.html# xsd-config-body-schemas-tx

9 Xml Configuration Extensions (cont.) SchemaDescirption / Documentation aopHelpers for Spring’s aspect oriented programming mechanisms http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/xsd-config.html# xsd-config-body-schemas-aop contextConfiguration relation to the application context plumbing http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/xsd-config.html# xsd-config-body-schemas-context toolsConfiguration for adding tooling specific meta-data http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/xsd-config.html# xsd-config-body-schemas-tool securityProvides elements for web security configuration http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns- config.html mvcProvides interceptors, view-conroller, ….. http://static.springsource.org/spring/docs/3.0.x/spring-framework- reference/html/mvc.html#mvc-config

10 Example You have options Or

11 Wait that’s not all And this

12 Another Example Let us utilize a namespace handler <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> abc def ghi jkl abc def ghi jkl

13 Xml Configuration Extension architecture Pieces of namespace handlers Create an xml schema that describes allowable elements Write a namespace handler Code a BeanDefinitionParser – Parses the defined xml and adds any necessary beans into the configuration

14 For Example Bottom line – Namespace handlers are backed by code The code supplements bean configuration and is a lot more than meets the eye Add a parser example here

15 DEMO

16 Lab 1: Xml Configuration Extensions https://tech.lds.org/wiki/Intermediate_Spring#Lab _1_Xml_Configuration_Extensions

17 JSR 250 Annotations

18 Hooking into the Lifecycle Define init-method in bean definition The associated bean The init method is called after the bean had been initialized an all properties set public class SomeBean { public void init() { //some initialization code }

19 Spring Bean Lifecycle Review 1. Create bean definitions (from xml or annotations, or, …) 2. Instantiate beans using the definitions 3. Set bean dependencies (values and bean references) on the newly instantiated beans 4. Initialization 5. Deliver bean to requester for use 6. On container shutdown call destruction callback method

20 Jar Dependency JSR 250 Annotation Dependency (only required in Java 1.5) javax.annotation jsr250-api 1.0

21 Annotate the Class JSR 250 annotations provides @PostConstruct annotation for bean initialization There is likewise an @PreDestroy counterpart – Called just before the bean is destroyed – Allows for cleanup of resources public class SomeBean { @PostConstruct public void init() { // do some initialization work }

22 Configure Annotation Handling Specify annotation handlers (bean post processors) <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:context=http://www.springframework.org/schema/context xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

23 Lab 2: JSR 250 Annotations https://tech.lds.org/wiki/Intermediate_Spring#Lab _2_JSR_250_Annotations

24 Spring Annotations We have seen how to use annotations to call an init method during initialization Wouldn’t it be nice if didn’t need to define even the beans themselves in xml at all? – We will need something to scan the classes for annotations and register bean definitions

25 Welcome component-scan component-scan element in context schema – Scans classpath searching for matching beans Registers bean definitions matching classes – Can specify an include filter and/or exclude filter You can also assign a filter type for a targeted search – http://static.springsource.org/spring/docs/3.0.x/spring- framework-reference/html/beans.html#beans-scanning-filters – annotation – assignable – aspectj – regex – cutsom

26 Bean Lifecycle and Component Scan 1. Create bean definitions (from xml or annotations, or, …) 2. Instantiate beans using the definitions 3. Set bean dependencies (values and bean references) on the newly instantiated beans 4. Initialization 5. Deliver bean to requester for use 6. On container shutdown call destruction callback method

27 For Example This configuration will (for the given packages): – Register bean definitions for all classes with “abc” in their names – Not register beans for any classes that extend / implement Animal <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

28 Naming What id will be given for beans that are registered By default it is the class name with the first letter lower cased – For example, the following will result in a bean definition with id=“rabbit” @Component public class Rabbit { }

29 Naming What id will be given for beans that are registered? By default it is the class name with the first letter lower cased – For example, a class named Rabbit would result in a bean definition with id=“rabbit”

30 Annotation Scanning What do we do if: – The default naming is not acceptable – Difficult to come up with a pattern that matches only the beans that we want registered with Spring Annotation scanning

31 Spring Annotations Spring provides stereotype annotations to help identify a bean’s role the application architecture – @Service – denotes application services – @Controller – denotes a view layer components – @Component – the most general stereotype annotation – denotes any class to be managed by Spring – @Repositoy – most often used to demarcate DAOs – You can also create your own custom stereotype annotations

32 For Example In a given application context you may want to have the scanner – Register beans annotated with your custom annotation – But not register definitions for beans annotated with @Service <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

33 Naming So how does annotation scanning help naming? – The following will still register a bean with id=“rabbit” – But, this will register a bean with id=“crazyRabbit” @Component public class Rabbit { } @Component("crazyRabbit") public class Rabbit { }

34 The Main Point All this to tell you that now you can create a bean automatically without defining it in xml That is to say, the following are basically equivalent in function @Component("something") public class SomeBean { }

35 Scope But what about scope – i.e. what is the equivalent annotation for specifying a scope of prototype – @Scope("prototype")

36 @Scope Be sure to use org.springframework.context.annotation.Scope – Not javax.inject.Scope Possible values: – @Scope or @Scope("singleton") – @Scope("prototype") – @Scope("request") – @Scope("session") – @Scope("globalSession")

37 Putting it all together Xml definition Equivalent annotation definition @Component @Scope("prototype") public class Turkey { }

38 Lab 3: Spring Annotations

39 Credit where credit is due http://springsource.org Spring Recipies 2 nd Edition (Gary Mak, Josh Long and Daniel Rubio)


Download ppt "Intermediate Spring Matt Wheeler. Notes This is a training NOT a presentation Please ask questions Prerequisites – Introduction to Java Stack – Basic."

Similar presentations


Ads by Google