记录自己的学习
IOC
1 //正常程序 伪代码 2 Process p = new Process() 3 Thread t = new thread() 4 p.setMainThread(t) 5 p.run() 6 7 //IOC伪代码 8 IOC ioc = new IOC() 9 ioc.add(Process.class) 10 ioc.add(Thread.class) 11 Process p = ioc.get(Process.class) 12 p.run()
AOP
如何理解切面编程
平面是刀切的那个平面
切点是刀切的那个位置
举例:肉夹馍
java中的类比喻成一个馍(切点是方法)
切面是方法的前和后也就是肉夹馍切开的两片
代码也就是肉
面向切面编程理解:
将代码切入到类的一个指定方法,指定位置的一个编程思想。
模块层级关系:
view发出请求——》controller响应请求——》service操作数据——》model
model——》service处理完并返回——》controller得到返回结果,将数据返回给view——》view输出给浏览器
aop将作为一个通用的模块进行使用
------------------------------------------------------------------------------------------------------------------------------------
引入的Spring Boot依赖集成了一个Spring框架的一个开发套件
分析启动类WebApplication
SpringApplication.run是核心ioc的初始化及其它的工作,在ioc初始化工作完成之后将会收到WebApplication.class的信息,
同时因为@SpringBootApplication()的注解ioc容器将开启对demo包下面的以及子包的所有类的扫描,通过扫描ioc容器会发现许多需要用到的类,
并将这些类注入进去。
controller
因为@Controlle注解UserController将被注入到ioc容器中
UserController在初始化之后会有一个依赖通过@Autowrired注解声明的一个依赖,这个依赖将由ioc容器往其中注入,注入的是userService的实现层userServiceImpl,
userServiceImpl层有一个@Service()注解,因为这个注解UserServiceImpl将会注入到ioc容器中,最终ioc容器可以初始化UserServiceImpl的对象,将这个对象注入到Controller中,
这样在ioc容器中就能拿到一个完整的UserController对象(依赖也就自动装配好了),这就是ioc容器的作用。
理解记忆:
ioc——比作容器(通过注入的方式)
@Autowrired注解——比作Controller层到Service层搬运的小兵
@Service注解——比作ServiceImpl层到Service
Controller层中类上面的@Autowrired小兵将由ioc容器往其中注入,注入的是userService的实现层userServiceImpl,
Service层中类上面的@Service()小兵将ServiceImpl将会注入到ioc容器中,最终ioc容器可以初始化UserServiceImpl的对象,
将这个对象注入到Controller中
-------------------------------------------------------------------------------------------------------------------------------------------------------
AOP下面的包
LogAspect类
@Pointcut()为切点注解
因为@Pointcut()注解,log代表一个切点
@Pointcut()中的public * demo.controller.*.*(..)告诉了所有切点的位置,demo中所有类,所有公开的方法作为一个切点,进行一个切面编程
@Before()注解,是定义了一个切面
@Before(“log()”)中@Before()注解是在log切点方法之前
web mvc架构的使用
视图层是将视图转成一个包含真实数据的页面,返回给浏览器
controller层对
------------------------------------------------------------------------------
----------------------------------------------------------------