spring aop 引入
作用:为现有的类添加新的方法
***********************
相关注解
@DeclareParents
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD}) //标注在字段上(字段为子接口)
public @interface DeclareParents {
String value(); //父类
Class defaultImpl() default DeclareParents.class; //引入的子接口实现类
}
***********************
示例:HelloService实现类添加方法
*******************
service 层
HelloService
public interface HelloService {
void hello();
}
AddService:helloService添加的功能接口
public interface AddService {
void add();
}
*******************
serviceImpl 层
HelloServiceImpl
@Service
public class HelloServiceImpl implements HelloService {
@Override
public void hello() {
System.out.println("hello 方法被调用");
}
}
AddServiceImpl
@Service
public class AddServiceImpl implements AddService {
@Override
public void add() {
System.out.println("添加了新的方法");
}
}
*******************
aspect 层
AddAspect
@Aspect
@Component
public class AddAspect {
@DeclareParents(value = "com.example.demo.serviceImpl.HelloServiceImpl",
defaultImpl = AddServiceImpl.class)
private AddService addService;
}
*******************
controller 层
HelloController
@RestController
public class HelloController {
@Autowired
private HelloService helloService;
@RequestMapping("/get")
public String hell4(){
AddService addService=(AddService)helloService;
addService.add();
return "success";
}
}
***********************
使用测试
localhost:8080/get
添加了新的方法