Spring独学 1


Spring関連書籍を見ながらAOP関連のコードを動かしていたところ、以下のエラーが発生。

鍵となるのは赤字部分。「CGLIB2」って何?

2007/10/25 4:02:07 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
情報: Loading XML bean definitions from file [C:\eclipse3.3\workspace\ore\aopbeans.xml]
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'proxy': FactoryBean threw exception on object creation; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
Caused by: org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
at org.springframework.aop.framework.DefaultAopProxyFactory.createAopProxy(DefaultAopProxyFactory.java:65)
at org.springframework.aop.framework.ProxyCreatorSupport.createAopProxy(ProxyCreatorSupport.java:106)
at org.springframework.aop.framework.ProxyFactoryBean.getSingletonInstance

これらしい。Springのライブラリの他にも、どうやら必要だったようだ。

安定版のcglib-2.1_3.jarを入手、Eclipseプロジェクト内のライブラリとして追加で解決。


…と思ったら、またエラー。


2007/10/25 4:18:20 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
情報: Loading XML bean definitions from file [C:\eclipse3.3\workspace\ore\aopbeans.xml]
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'proxy': FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/Type
at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:180)
at net.sf.cglib.core.KeyFactory.(KeyFactory.java:66)
at net.sf.cglib.proxy.Enhancer.(Enhancer.java:69)
at org.springframework.aop.framework.Cglib2AopProxy.createEnhancer(Cglib2AopProxy.java:224)
at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:151)
at org.springframework.aop.framework.ProxyFactoryBean.getProxy(ProxyFactoryBean.java:342)
at org.springframework.aop.framework.ProxyFactoryBean.getSingletonInstance(ProxyFactoryBean.java:297)
at org.springframework.aop.framework.ProxyFactoryBean.getObject(ProxyFactoryBean.java:227)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectFromFactoryBean(AbstractBeanFactory.java:1236)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1207)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:262)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)


赤字のメッセージでググってみたところ、以下のページに辿り着く。

spring bean initialization problem after including CGLIB - Spring Framework Support Forums


CGLIBが更に参照しているasm.jarをクラスパスに通すか、依存しないバージョンのCGLIBを使え、とある。
なので、前述のCGLIBのページからcglib-nodep-2.1_3.jarを入手、さっきのJarと入れ替える形でクラスパスに設定、ようやくちゃんと動いた。



Springを一から触ってみようと、書籍を50ページ近く進めてたらもうこんな時間だ…(*_*;)
ちなみに書籍はこれ。他数冊所持しているのだが、ソースコードが部分的だったりして「動くもの」を作るには情報が不充分。始めるにあたってはサンプル豊富なこの形式のがとっつきやすい。

SpringによるWebアプリケーションスーパーサンプル

SpringによるWebアプリケーションスーパーサンプル


次はDBが絡んだサンプルコードのようだ。書籍ではMySQLを扱ってるけど、使いたいのはPostgreSQLなんだよな…。
DB設定、サクっと済めば良いのだが…。