首页 > 技术文章 > Spring IoC 容器和 AOP

haiyangwu 2019-03-04 16:58 原文

一、IOC(Inversion of Control)容器:就是具有依赖注入(Dependncy Injection)功能的容器,是可以创建对象的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。在Spring中BeanFactory是IOC容器的实际代表者。

1 /*
2
3    @Controller         声明此类一个MVC类,通过与 @RequestMapping 一起使用
4    @Service            声明此类一个业务处理类,通过与 @Transactional 一起使用
5    @Repository         声明此类一个数据库访问类
6    @Component          声明此类一个spring管理的类
7    @Configuration      声明此类是一个配置类
8 
9 */

 

二、AOP(Aspect Oriented Programming) 面向切面编程,通过预编译方式或者运行时刻对目标对象动态地添加功能。

1 /*
2    @Aspect     声明这是一个切面类
3    @Pointcut   切入点
4    Advice:具体的操作,通过注解 @before   @around  @after  @finally 来调用代码
5 */

   1、代码演示:

@Component
@Aspect
public class UserAop {

    /**
     * execution() 表达式主体
     * 第一个 * 表示返回值得类型
     * com.springbootweb.controller 表示AOP所切服务的包名
     * 包名后面的 ..表示当前包及子包
     * 第二个 * 表示类名
     * .*(..) 表示任何方法名,任何参数类型
     */
    @Pointcut(value = "execution( * com.springbootweb.controller..*.*(..))")
    public void userPointcut(){
    }

    @Before("userPointcut()")
    public void userLog(){
      HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
      System.out.println("url:" + request.getRequestURI());
    }
}

 

  

推荐阅读