1.AOP
[1]面向切面编程,在不改变源码的前提下,实现新的功能
[2]实现AOP的技术,主要分为两大类: 采用动态代理技术(在运行期,目标类加载后,为接口动态生成代理类,将切面织入到代理类中)和采用静态代理的方式(在编译期,切面直接以字节码的形式编译到目标字节码文件中)
[3]通知类型
前置通知(Before advice):在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。
后置通知(After returning advice):在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
异常通知(After throwing advice):在方法抛出异常退出时执行的通知。
最终通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
环绕通知(Around Advice):包围一个连接点的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。
[4]使用场景
一般场景下,AOP被广泛应用在权限认证、日志、事务处理、增强处理、安全监控等等。
2.IOC
[1]控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理,降低代码的耦合度(将创建管理对象的工作交给容器来做)
[2]ioc容器的底层实现其实是工厂模式,通过工厂模式和反射机制,根据xml中给出的类名生成相应的对象。
[3]bean的生命周期
1-通过构造器创建bean实例(无参构造)
2-为bean属性设置值和对其他bean的引用(调用set方法)
3-调用bean的初始化的方法(需要进行配置初始化的方法)
4-bean就可以使用了(对象获取到了)
5-当容器关闭的时候,调用bean 的销毁的方法(需要配置销毁的方法)
[4]Autowired注解与Resource注解的区别
共同点:@Resource注解和@Autowired注解都可以用作bean的注入.
在接口只有一个实现类的时候,两个注解可以互相替换,效果相同.
不同点:@Resource注解是Java自身的注解,@Autowired注解是Spring的注解.
@Resource注解有两个重要的属性,分别是name和type,如果name属性有值,则使用byName的自动注入策略,将值作为需要注入bean的名字,如果type有值,则使用byType自动注入策略,将值作为需要注入bean的类型.如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。即@Resource注解默认按照名称进行匹配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,按照名称查找,当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Autowired注解是spring的注解,此注解只根据type进行注入,不会去匹配name.但是如果只根据type无法辨别注入对象时,就需要配合使用@Qualifier注解或者@Primary注解使用
[5]@Component
当成当前被注解的对象 移交给spring进行托管,注入ioc容器中,相当于配置了<bean>。
3.@Override的方法,必然是一个覆盖了父类的方法
4.多线程【安全验证 - 知乎】
[1]线程状态转换
新建—就绪—运行—阻塞—死亡