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

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

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

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

Spring

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

Q&A

解決済

1回答

1450閲覧

SpringAOP xmlの警告が取れない

goligoli

総合スコア6

Java

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

Spring

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

0グッド

0クリップ

投稿2019/10/17 00:46

編集2019/10/17 00:53

前提・実現したいこと

AOPで全てのControllerのメソッド実行前に共通処理を組み込みたい。

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

xmlを確認すると「ポイントカットが誤っています: error at ::0 formal unbound in pointcut」と警告が出されていて、実行できません。
↓エラーのスタックトレースです。

WARN : org.springframework.web.context.support.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcContentNegotiationManager': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut ERROR: org.springframework.web.servlet.DispatcherServlet - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcContentNegotiationManager': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:742) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682) at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553) at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494) at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:171) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1188) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1132) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:811) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)

該当のソースコード

組み込みたいメソッド

Java

1package com.mvc.test.service; 2 3import java.io.IOException; 4 5import javax.security.sasl.AuthenticationException; 6import javax.servlet.http.HttpServletRequest; 7import javax.servlet.http.HttpServletResponse; 8import javax.servlet.http.HttpSession; 9 10import org.aspectj.lang.JoinPoint; 11import org.aspectj.lang.annotation.Aspect; 12import org.aspectj.lang.annotation.Before; 13import org.springframework.beans.factory.annotation.Autowired; 14import org.springframework.stereotype.Service; 15 16import com.mvc.test.entity.BaseEntity; 17import com.mvc.test.repository.BaseRepository; 18 19@Aspect 20@Service 21public class AuthLogic { 22 23 @Autowired 24 private BaseRepository repositoryBase; 25 26 @Before("execution(* *..*Controller.*(..))") 27 public void auth( 28 JoinPoint joinpoitnt, 29 HttpSession session, 30 HttpServletRequest request , 31 HttpServletResponse response) { 32 33 //処理内容 34 35 } 36 37

servlet-context.xml

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<beans:beans 3 xmlns="http://www.springframework.org/schema/mvc" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:beans="http://www.springframework.org/schema/beans" 7 xmlns:context="http://www.springframework.org/schema/context" 8 xsi:schemaLocation="http://www.springframework.org/schema/mvc 9 https://www.springframework.org/schema/mvc/spring-mvc.xsd 10 http://www.springframework.org/schema/beans 11 https://www.springframework.org/schema/beans/spring-beans.xsd 12 http://www.springframework.org/schema/context 13 https://www.springframework.org/schema/context/spring-context.xsd 14 http://www.springframework.org/schema/aop 15 http://www.springframework.org/schema/aop/spring-aop.xsd"> 16 17 <!-- DispatcherServlet Context: defines this servlet's request-processing 18 infrastructure --> 19 20 <!-- Enables the Spring MVC @Controller programming model --> 21 <annotation-driven /> 22 <aop:aspectj-autoproxy /> 23 <aop:config proxy-target-class="true" /> 24 25 <!-- Handles HTTP GET requests for /resources/** by efficiently serving 26 up static resources in the ${webappRoot}/resources directory --> 27 <resources mapping="/resources/**" location="/resources/" /> 28 29 <!-- Resolves views selected for rendering by @Controllers to .jsp resources 30 in the /WEB-INF/views directory --> 31 <beans:bean 32 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 33 <beans:property name="prefix" value="/WEB-INF/views/" /> 34 <beans:property name="suffix" value=".jsp" /> 35 </beans:bean> 36 37 <!-- fileuploadResolver --> 38 <beans:bean id="multipartResolver" 39 class="org.springframework.web.multipart.support.StandardServletMultipartResolver"> 40 </beans:bean> 41 42 <!-- <beans:bean class="com.mvc.test.err.AccountResolver" /> --> 43 44 <context:component-scan 45 base-package="com.mvc.test" /> 46 47</beans:beans>

root-context.xml

xml

1<?xml version="1.0" encoding="UTF-8"?> 2 3<beans 4 xmlns="http://www.springframework.org/schema/beans" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xmlns:context="http://www.springframework.org/schema/context" 7 xmlns:jpa="http://www.springframework.org/schema/data/jpa" 8 xmlns:tx="http://www.springframework.org/schema/tx" 9 xmlns:jdbc="http://www.springframework.org/schema/jdbc" 10 xsi:schemaLocation="http://www.springframework.org/schema/beans 11 http://www.springframework.org/schema/beans/spring-beans.xsd 12 http://www.springframework.org/schema/data/jpa 13 http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 14 http://www.springframework.org/schema/tx 15 http://www.springframework.org/schema/tx/spring-tx.xsd 16 http://www.springframework.org/schema/jdbc 17 http://www.springframework.org/schema/jdbc/spring-jdbc.xsd 18 http://www.springframework.org/schema/context 19 http://www.springframework.org/schema/context/spring-context.xsd"> 20 21 <context:property-placeholder location="classpath:jdbc.properties" /> 22 <context:annotation-config /> 23 24 <jpa:repositories base-package="com.mvc.test.repository" /> 25 26 <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 27 28 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 29 <property name="driverClassName" value="${jdbc.driverClassName}" /> 30 <property name="url" value="${jdbc.url}" /> 31 <property name="username" value="${jdbc.username}" /> 32 <property name="password" value="${jdbc.password}" /> 33 </bean> 34 35 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 36 <property name="dataSource" ref="dataSource" /> 37 <property name="jpaVendorAdapter"> 38 <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 39 <property name="showSql" value="false" /> 40 <property name="database" value="POSTGRESQL" /> 41 </bean> 42 </property> 43 </bean> 44 45 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 46 <property name="entityManagerFactory" ref="entityManagerFactory" /> 47 <property name="dataSource" ref="dataSource" /> 48 </bean> 49 50</beans>

試したこと

参考サイトを見て@Serviceを@Componentに変更したり、ポイントカットを見直して変えてみましたが、何も変わりませんでした。

参考サイト
http://www.mitchy-world.jp/java/spring/3_1_6.htm

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

開発はeclipse Oxygen、Springは4.3.21.RELEASEを使っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

メソッドの引数が正しくないので、AspectJがポイントカットできません。

public void aop(JoinPoint joinpoint, HttpSession session, HttpServletRequest request , HttpServletResponse response) {

と宣言していますが、対象のControllerないしはアスペクトの設定に sessionやrequestがないため動作しません。

Spring webとAOPが使えるのでしたら、例えば以下のように、Aspectを定義しているクラスのスコープをSessionに変更し、SpringからHttpSessionを取得(Autowiredなど)すれば動作はします。

java

1import javax.servlet.http.HttpSession; 2 3import org.aspectj.lang.JoinPoint; 4import org.aspectj.lang.annotation.Before; 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.context.annotation.Scope; 7import org.springframework.stereotype.Component; 8import org.springframework.web.context.WebApplicationContext; 9 10@Component 11@Aspect 12@Scope(WebApplicationContext.SCOPE_SESSION) 13public class ControllerInterceptor { 14 15 @Autowired 16 HttpSession session; 17 18 @Before("execution(* com.github.apz.controller.*Controller.*(..))") 19 public void aop(JoinPoint joinpoint) { 20 String sessionId = session.getId()); 21 22 } 23} 24

投稿2019/10/17 09:07

A-pZ

総合スコア12011

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

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

goligoli

2019/10/23 05:57

返信遅くなり申し訳ありません! 指示いただいたとおりに変更したら、無事動作しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問