Spring Java Tutorial

File: context.xml


       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        
    
    
    
                             pointcut="SystemPointcuts.testBeanExecution()"/>
    

    
    
        
             
        

    

File: Main.java

import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.support.AbstractPlatformTransactionManager;
import org.springframework.transaction.support.DefaultTransactionStatus;
import bean.SimpleBean;
import bean.TestBean2;
public class Main {
  public static void main(String[] args) {
    ApplicationContext ac = new ClassPathXmlApplicationContext("context.xml");
    TestBean2 testBean = (TestBean2) ac.getBean("test");
    SimpleBean simpleBean = (SimpleBean) ac.getBean("simple");
    testBean.work();
    testBean.stop();
    simpleBean.sayHello();
    simpleBean.x("a", "b");
  }
}
final class SystemPointcuts {
  private SystemPointcuts() {
  }
  @Pointcut("execution(* bean..*.*(..)) &&" +
          "!execution(* bean..*.set*(..)) &&" +
          "!execution(* bean..*.get*())")
  public void serviceExecution() { }
  @Pointcut("within(bean.TestBean2)")
  public void within1() { }
  @Pointcut("execution(* bean.TestBean2.*(..))")
  public void testBeanExecution() { }
  @Pointcut("execution(* bean.TestBean2.*(..))")
  private void testBeanExec() { }
  @Pointcut("execution(* bean..*.*(..))")
  public void inProsringPackage() { }
  @Pointcut("within(bean..*)")
  private void withinProSpringPackage() { }
  @Pointcut("execution(* bean.TestBean2.*(..)) &&" +
          "within(bean..*)")
  public void same1() { }
  @Pointcut("execution(* bean.TestBean2.*(..)) &&" +
          "withinProSpringPackage()")
  public void same2() { }
  @Pointcut("testBeanExec() && withinProSpringPackage()")
  public void same3() { }
  @Pointcut("within(bean.TestBean2)")
  public void fromTestBeanExecution() { }
  @Pointcut("this(bean.SimpleBean)")
  public void onlyFromSimpleBean() { }
  @Pointcut("target(bean.SimpleBean)")
  public void onlyToSimpleBean() { }
  @Pointcut("args(String, String)")
  public void onlyTwoStringArguments() { }
//  @Pointcut("bean(test)")
  public void beanName() { }
}
class NoopTransactionManager extends AbstractPlatformTransactionManager {
  protected Object doGetTransaction() throws TransactionException {
      return new Object();
  }
  protected void doBegin(Object object, TransactionDefinition transactionDefinition) throws TransactionException {
      System.out.println("Begin");
  }
  protected void doCommit(DefaultTransactionStatus defaultTransactionStatus) throws TransactionException {
      System.out.println("Commit");
  }
  protected void doRollback(DefaultTransactionStatus defaultTransactionStatus) throws TransactionException {
      System.out.println("Rollback");
  }
}
File: SimpleBean.java

package bean;
public class SimpleBean {
  public void sayHello() {
    System.out.println("Hello");
  }
  public void x(CharSequence a, String b) {
  }
}
File: TestBean2.java

package bean;
public class TestBean2 {
  private SimpleBean simpleBean;
  public void work() {
    this.simpleBean.sayHello();
    System.out.println("work");
  }
  public void stop() {
    this.simpleBean.sayHello();
    System.out.println("stop");
  }
  public void setSimpleBean(SimpleBean simpleBean) {
    this.simpleBean = simpleBean;
  }
}