Мне не удалось вызвать запуск потока () через Spring aop, т. Е. Приложение не вызывало код Aspect. Есть предложения?
Spring 4.0 / Java 1.7
spring-context.xml
<bean id="pocServiceAspect" class="kbsql.com.poc.POCServiceAspect" />
<aop:config>
<aop:aspect id="pocServiceAspectId" ref="pocServiceAspect">
<aop:pointcut id="pointCutAround"
expression="execution(* kbsql.com.poc.WorkThread.threadRun(..) )" />
<aop:around method="aroundServiceExtractData"
pointcut-ref="pointCutAround" />
</aop:aspect>
</aop:config>
Ниже приведен код Java для выполнения:
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
//To get the data using query.
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-context-poc.xml");
Class<?> myclass=WorkThread.class;
List<AbsThread> list= new ArrayList<AbsThread>();
for(int i=0;i<5 ;i++) {
AbsThread t=(AbsThread)context.getBean(myclass.getSimpleName());
list.add(t);
}
for(int i=0;i<list.size();i++) {
AbsThread abst=(AbsThread)list.get(i);
Thread t = new Thread(abst);
t.start();
}
}
//
}
Ниже приведен класс абстрактных потоков:
public abstract class AbsThread implements Runnable{
@Autowired protected ApplicationContext context;
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void run() {
try{
System.out.println(" Abstract Thread starts ");
threadRun();
System.out.println(" Abstract Thread ends ");
}catch(Exception ex){
System.out.println("Exception "+ex);
}finally{
}
}
protected abstract void threadRun() throws Exception;
}
Ниже приведена реализация потока:
@Component("WorkThread")
public class WorkThread extends AbsThread{
@Override
protected void threadRun() throws Exception {
// TODO Auto-generated method stub
System.out.println("Thread Starts Id : "+Thread.currentThread().getId());
System.out.println("Logic invoked Sucessfully");
System.out.println("Thread Ends Id : "+Thread.currentThread().getId());
}
}
Код аспекта, указанный ниже
public class POCServiceAspect {
public void aroundServiceExtractData(ProceedingJoinPoint joinPoint) throws Throwable {
try{
System.out.println("Aspect Starts");
Date startTime = new Date();
joinPoint.proceed();
System.out.println("Aspect ends");
}catch(Exception ex){
throw ex;
}
}
Почему аспект не вызывается, когда я запускаю поток?