Пользовательский поток run () не вызывается через Spring AOP - PullRequest
0 голосов
/ 24 сентября 2018

Мне не удалось вызвать запуск потока () через 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;
            }   
        }

Почему аспект не вызывается, когда я запускаю поток?

...