Я хочу использовать @Autowired аннотацию в «Аспект». Я хочу добавить репозиторий в свой аспект, но когда я пытаюсь вызвать метод моего автоукрещенного класса, возникает NullPointException.Использование @Autowired с AspectJ и Springboot
@Aspect
public class AspectSecurity {
@Autowired
private UserRepository userRepository;
@After("execution(public * dash.*.*Controller.*(..))")
public void authentication(JoinPoint jp) throws UnauthorizedException {
System.out.println("SECURITY !");
System.out.println(userRepository.findAll().toString());
}
}
Я уже пытался добавить @Component
выше моего аспекта класса, но у меня такая же ошибка.
Если я не использую класс аспект, а @Controller
, я могу позвонить в свой репозиторий без проблем.
В некоторых документах рассказывается о конфигурации весны с файлами xml, но с загрузкой весны У меня нет этих файлов.
Вот часть моего pom.xml Wich звонка AspectJ плагин:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
<source>1.6</source>
<target>1.6</target>
<Xlint>ignore</Xlint>
<complianceLevel>${compiler.version}</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>false</verbose>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
Вот мой класс Применение:
package dash;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Здесь класс контроллера, который называется аспект:
package dash.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import dash.GenericController;
@Controller
@RequestMapping("/user")
public class UserController extends GenericController {
@Autowired
private UserRepository repository;
@RequestMapping("/findAll")
public @ResponseBody User create(
@RequestParam(value="login", required=true) String login,
@RequestParam(value="password", required=true) String password) {
System.out.println(login);
System.out.println(password);
System.out.println("Users found with findAll():");
System.out.println("-------------------------------");
for (User user : repository.findAll()) {
System.out.println(user);
}
return repository.findOne("root");
}
}
Примечание: я уже пытался добавить @EnableAspectJAutoProxy
выше моего класса приложения
спасибо за вашу помощь
Где вы пытаетесь использовать Аспект? –
Вы пытались добавить '@ Configurable' в класс аспект? – Pace
Аспект используется после метода «create». Логического наименования нет. Это просто ПОС. В соответствии с выражением аспекта '@After (" выполнение (public * dash. *. * Controller. * (..)) ")' аспект вызывается для всех общедоступных методов, имеющих «Controller» в конце имени во всех классы всех пакетов пакета «dash» ^^ – maxiplay