Bean name will be generated by bean id. Context.getBean(name) hence works by id.
Writing custom annotation – write custom annotation and register pre-processor to add custom logic to it.
BeanPostProcessor- deals with objects – postInit & preInit
Interceptor- aspect with single advice[will be called when bean is created]
isSingleton method inside factory will be called only once if isSingletonMethod() set to true –Doesn’t make sense if factory itself is prototype
Inheritance – bean can be marked as
abstract=true - instance wont be created
Parent – parent=”” – for overriding
PropertyEditors- how properties are converted in xmls which always are mentioned as string ex – toDate,Integer etc –Spring has many of its own
We can register our own propertyeditors - For any type –call our propertyEditor – this is not like set of interceptors instead editor is picked from a map.
Following conventions - put customEditor in same package as code , and name should be <type>+Editor - no need to explicitly register the editor.
Import configuration file - <import resource=”ddsdsd.xml” />
P namespace – allows properties to be set as attributes in bean definition.
Util namespace – loading properties – diff from propertyplaceholder – util :properties , set,list,Map,reading constants
AOP
------
2 technologies
Spring Aop – Runtime –Using Dynamic Proxy
AspectJ- Compile Time OR Load Time –byte code injection
Performance – aspectj build time is best but complex.
For AspectJ : http://www.infoq.com/articles/Orchestration-Oleg-Zhurakousky;jsessionid=E64F684641DCF76CEC10633EFF108059
Spring Aop – uses (hides this complexity)
a. uses JDK dynamic proxy when interface is mentioned
Ref: http://java.sun.com/j2se/1.4.2/docs/guide/reflection/proxy.html
Method invocations on an instance of a dynamic proxy class are dispatched to a single method in the instance's invocation handler, and they are encoded with a java.lang.reflect.Method object identifying the method that was invoked and an array of type Object containing the arguments.
b. uses CGlib when no interface is mentioned
CGLIb can be forced in both cases using Proxy-target-class=false in definition.
Creating proxy using APIs - org.springframework.aop.framework.ProxyFactory;
Can add advice to the proxy – which recognizes either annotations or anything else
Adding aspectj weaving adds a context weaving classloader
Hierarchy --- BootClassLoader,Aop Context weaving Classloader,Extension loader,Application loader
The above happens for only Aspectj Based viewing
Hence all classes other than in boot path can be intercepted.
Delegation Of Classloader – first goes to parent if class def is not found and then comes down
When using jdk dynamic proxy –cast to interfaces
CGlib works by extending the class definition and then creating instance of that , old object is GC’ed.
Hence with final classes it throws error
Constructor gets called twice.- because extended.
Internal methods don’t get called.
JdkDynamic uses the same instance
JointPoint- execution context
PointCut - Expression
Advice-method
Aspect- class
Advice -@Before,@Afterreturning,@AfterThrowing,@After,@Around
Spring JDBC
---------------
No checked exception – all run time exceptions –rarely Db exceptions are recoverable
Callback pattern – give ur reference to some to call u at right times
Does from Getting connections, Participating in Transaction, Execution of statement, Processing ResultSet, Handling Exceptions, Closing connection.
Need to provide a datasource along with transactionManager. – Datasource manages the connection pooling
We can use Apache DBCP or C3po for pooling.
JdBCTemplate methos like queryForMap,queryForList
RowMapper – Each Row maps to a Doman Object
RowCallBackHandler – No return value
ResultSetExtractor - Multiple rows map to a single object.
Spring handles all exceptions irrespective of the vendor. It keeps a internal mapping of all error codes specific to the vendor, and gives very descriptive errors.
Saturday, November 7, 2009
Spring Training -Day 2
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment