如果继承service.Base的接口,有自己的方法
public interface Base<T> {
public void save(T t);
public void update(T t);
public void delete(Long id);
}
public class BaseImpl<T> implements Base<T> {
@Override
public void save(T t) {
System.out.println("save()");
}
@Override
public void update(T t) {
System.out.println("update()");
}
@Override
public void delete(Long id) {
System.out.println("delete()");
}
}
public interface ObjectAService extends Base<ObjectA> {
public void supportMethod(ObjectA oba);
}
@Service("obaService")
public class ObjectAServiceImpl extends BaseImpl<ObjectA> implements ObjectAService {
@Override
public void supportMethod(ObjectA oba) {
System.out.println("ObjectAService supportMethod()");
}
}
将BaseAspect中的类注解放到子类中
public class BaseAspect<T> {
@Before("execution(* service.base.BaseImpl.save(..)) && args(t)")
public void save(T t) {
System.out.println("save(), " + t.getClass().toString());
}
@Before("execution(* service.base.BaseImpl.update(..)) && args(t)")
public void update(T t) {
System.out.println("update(), " + t.getClass().toString());
}
@Before("execution(* service.base.BaseImpl.delete(..)) && args(id)")
public void delete(Long id) {
System.out.println("delete(), " + id);
}
}
@Aspect
@Component
public class ObjectAAspect extends BaseAspect<ObjectA> {
@Before("execution(* service.ObjectAService.supportMethod(..)) && args(objectA)")
public void supportMethod(ObjectA objectA) {
System.out.println("aspect supportMethod " + objectA.getClass().getName());
}
}
测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { config.ConcertConfig.class })
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ObjectAServiceImplTest {
@Autowired
private ObjectAService obaService;
@Autowired
private ObjectBService obbService;
@Test
public void testSupportMethod() throws Exception {
obaService.save(new ObjectA());
obaService.supportMethod(new ObjectA());
}
}
测试结果
save(), class entity.ObjectA
save()
aspect supportMethod entity.ObjectA
ObjectAService supportMethod()
Process finished with exit code 0