質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

1593閲覧

SpringでsissionスコープのコンストラクDIを行う方法

keinon

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2018/03/19 00:54

前提・実現したいこと

SpringのDIでコンストラクタでのAutowiredを行いたいのですが、
scopeをsessionにした場合に失敗します。

発生している問題・エラーメッセージ

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userInfo' defined in BeanDefinition defined in class path resource [config/spring/fw-setting.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [jp.co.hogehoge.common.model.UserInfo] for bean with name 'scopedTarget.userInfo' defined in class path resource [config/spring/fw-setting.xml]; nested exception is java.lang.ClassNotFoundException: jp.co.hogehoge.common.model.UserInfo at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:736) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [jp.co.hogehoge.common.model.UserInfo] for bean with name 'scopedTarget.userInfo' defined in class path resource [config/spring/fw-setting.xml]; nested exception is java.lang.ClassNotFoundException: jp.co.hogehoge.common.model.UserInfo at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1328) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:622) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:591) at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:602) at org.springframework.aop.scope.ScopedProxyFactoryBean.setBeanFactory(ScopedProxyFactoryBean.java:94) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1593) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1561) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ... 20 more Caused by: java.lang.ClassNotFoundException: jp.co.hogehoge.common.model.UserInfo at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167) at org.springframework.util.ClassUtils.forName(ClassUtils.java:249) at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:395) at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1349) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1320) ... 27 more

該当のソースコード

java

1package jp.co.hogehoge.controller; 2 3@Controller 4public class Sd2testController { 5 6 @Autowired 7 private testService service; 8 9 private UserInfo user; 10 11 @Autowired 12 private ToiawaseHelper toiawaseHelper; 13 14 @Autowired 15 public Sd2testController(UserInfo user) { 16 this.user = user; 17 } 18 19 @RequestMapping(value = "/test/menu{menuNo:[1357]}", method = RequestMethod.GET) 20 public String showIn00(@PathVariable String menuNo, Model model) { 21 this.service.exec(); 22 23 return "/sd2/test"; 24 } 25 26}

試したこと

以下の場合は正常に作動します。
1.Controllerのフィールド変数に@Autowiredをつけた場合
2.UserInfoをSingletonにした場合

補足情報(FW/ツールのバージョンなど)

java8
Spring 4.1.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました・・・。

記述には省いてしまったのですが、コンストラクタ内に以下の処理を入れていたのが原因でした。

java

1 @Autowired 2 public Sd2testController(UserInfo user) { 3 this.user = user; 4 this.user.setId("A001"); 5 }

おそらく、Sd2testControllerのオブジェクトを生成する際に、必然的にコンストラクタを実行するが、
その時点では当然sessionなどないので、セッターを実行できないのが原因のようです。

検証の為に一時的に記載した部分が原因で長らく苦しんでしまいました・・・。

投稿2018/03/19 12:13

keinon

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/19 12:33 編集

controllerはSingletonのはずだが
keinon

2018/03/19 12:54

はい、Singletonです。 なので、サーバー起動時にエラーが発生していました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問