Весна @AspectJ: Совет, не примененный

I'm trying to weave in code before the call of start();

Это - TestClass, который я хочу к совету:

package com.test;

public class TestClass {

    public static void main(String[] args) {

        new TestClass().start();
    }
    private void start() {

        System.out.println("Test started");
    }
}

Это - аспект включая совет:

package com.test;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogAspect {

    @Before("call(void com.test.TestClass.start())")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("logBefore() is running");
    }

}

Это - мой spring.xml:

    




Я также попытался назвать бобы явно в xml как это:




Это - моя установка проекта (я использую Весеннюю версию 3.1.0 Комплекта инструментов):

Project setup

Результат состоит в том, что TestClass.start называют очень хорошо, но совет не применяется.

Что я должен изменить так, совет применяется?

Спасибо.

Edit: I finally got it to work:

После редактирования моего кода согласно вашим предложениям я взглянул на это обучающая программа. Это принудило меня позволять своему TestClass орудие интерфейс . И это решило проблему.

Вот моя заключительная установка:

final setup

TestClass включая его интерфейс:

package com.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

interface TestClass {
    void start();
}

public class TestClassImpl implements TestClass {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
                "Spring-Config.xml");

        TestClass t1 = (TestClass) appContext.getBean("myTest");
        t1.start();
    }

    @Override
    public void start() {
        System.out.println("test");
    }
}

Аспект:

package com.test;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class LogAspect {
    @Before("execution(void com.test.TestClass.start(..))")
    public void logBefore(JoinPoint joinPoint) {

        System.out.println("logging before "
                + joinPoint.getSignature().getName());
    }
}

И весна-Config.xml



        
    
    


Спасибо за вашу помощь.

3
nl ja de
@Reimeus: вы могли, пожалуйста, послать мне свой проект Знатока в мой адрес электронной почты? Я хочу понять это.
добавлено автор Matthias Braun, источник
Я действительно получал вашу кодовую работу, хотя я действительно использовал Знатока, чтобы сделать фактическое переплетение.
добавлено автор Reimeus, источник
Все, в чем вы нуждаетесь, является АНГЛИЧАНИНОМ, вот a хороший пример
добавлено автор Reimeus, источник

1 ответы

требование AspectJ pointcut applys, когда метод вызванных от другого класса. Как вы называете это непосредственно сами, необходимо использовать выполнение pointcut, так изменение:

@Before("call(void com.test.TestClass.start())")

к

@Before("execution(void com.test.TestClass.start())")

Также позвольте , Весна создает боб вместо того, чтобы создать тот непосредственно сами.


Aside: Note, you can keep your Spring xml files separate from your source files in src/resources and they will be picked up by ClassPathXmlApplicationContext.

1
добавлено
Также иллюстрируйте примерами Тест , класс через Весенний прикладной контекст, не, звоня новый .
добавлено автор Abhinav Sarkar, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Spring Framework and more
Spring Framework and more
839 участник(ов)

чат о spring framework и связанных с ним технологиях. We're discussing: job, tech questions, beer meet up/networking: tech review ,LinkedIn skills, SOF q/a raise up& etc. languages: russian,java,eng.

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async