Spring 中 AOP 的应用场景、 Aop 原理、好处?
答:Aop是Spring两大核心之一,叫做面向切面编程,它是oop的延续
- 它主要用于解决方法之间的依赖,如声明式事务管理,它的实现原理是动态代 理, 分为jdk的动态代理和cglib动态代理,
Jdk动态代理只针对于接口操作,目标类必须实现一个接口,他两是兄弟关系
Cglib既可以代理有接口的类,也可以代理无接口的类。目标类不能用final修饰,代理是目标类的子类
2.作用:在程序运行期间,不修改源码对已有方法进行增强。
可以减少重复代码,提高开发效率以及维护方便!
AOP相关术语:
Joinpoint( 连接点):目标对象的所有方法
Pointcut( 切入点):连接点中需要增强的方法
Advice( 通知/ 增强):增强的代码,类型:前置通知,后置通知,异常通知,最终通知,环绕通知。
Weaving( 织入):是指把增强应用到目标对象来创建新的代理对象的过程。
Aspect( 切面):是切入点和通知(引介)的结合。
注意:spring框架默认情况下,会对有接口的类使用proxy代理。没有接口的类使用cglib代理(面试)
Spring 中 IOC 的作用与原理?对象创建的过程。
答:
作用与原理:IOC是Spring两大核心之一,叫做控制反转,它的作用是解决类与类之间的依赖,它还有个功能叫作依赖注入,将对象的创建交给Spring的容器管理,它的原理是利用反射创建对象
创建的过程:Spring的容器创建对象有三种方式,分别是默认无参构造函数创建,静态工厂的静态方法创建,实例工厂的方法创建.
解析配置文件中配置的Bean信息,根据class属性中指定的全限定类名创建该类的对象存入spring容器中,该容器的本质是一个map集合,bean标签中的id作为key,class作为value,将来可以使用beanFatory等对象从map中根据key取出对象!
介绍 spring 框架。
答:spring是一款轻量级的javaEE开源框架,控制反转和面向切面编程是它的两大内核,主要作用是降低程序之间的耦合,它提供了展示层的框架springMVC以及持久层的框架springMybatis等,它还可以整合其它框架进行开发
小结:
1.注解方式的通知有顺序要求,使用注解配置代理对象建议使用环绕通知(该通知是手动整合上面四种通知)
2.aop是一种切面编程思想,当我们需要目标类的对象时,spring实际返回给我们的是代理对象,代理对象执行involve方法,实际上仍然是使用目标类的对象执行方法!
3.可以使用proxy-target-class属性指定为true表示使用cglib动态代理!
4.aop原理:
以前的事务都是在dao层自动提交,多次对数据库的操作就会生成多个连接对象,也就是多个独立的事务对象,导致转账功能的异常.
解决思路:
需要将转账的功能使用同一个事务进行管理(同一个连接对象),将事务的提交转移到业务层进行手动提交(有个属性),保证一个线程对应一个连接对象,当使用完毕后归还连接对象,并将连接对象和线程进行解绑!
保证一个线程对应一个连接对象的做法:
使用ThreadLocal(一个线程对应一个该对象)获取连接,如果获取不到则从数据源中获取一个连接对象,并存入ThreadLocal对象,如果已经有的直接取出该连接对象(连接对象与线程绑定),从而保证,一个线程只有一个连接对象.先拿出连接对象再操作事务!
11.单元测试中的方法不能有返回值,也不能有参数!否则初始化错误!
12.别人写的类使用xml配置,自己写的类使用注解配置,建议以后两种结合使用
- Spring 常见创建对象的注解?
创建bean对象(前提是提供包扫描):
@Component :用于非三层架构中的类的对象创建
@Controller:用于web层对象的创建
@Service:用于业务层对象的创建
@Repository:用于dao层对象的创建
@Transactional:注解方式配置事务
依赖注入(本地):
@Autowired:按照类型注入对象
@Qualifier:一般与Autowired一起使用,指定匹配的id注入对象
@Resource:直接按照给定的name值去容器中匹配ID
@Value:用于注入基本类型和String类型的数据
1.SpEL:#{ 表达式}
2.EL表达式:${ 表达式}
- 写在Mybatis的配置文件中,那么就是字符串拼接
- 写在JSP中,从四大域中取值(pageContext,Request,Session,Application)
3.Jquery$(选择器):$()
4.Mybatis中OGNL表达式:#{}
- Spring 中用到的设计模式。
答:Spring容器创建bean对象时用到工厂模式
指定scope属性时用到单例设置模式
Spring 的优点、缺点
优点:
- 提供了IOC和DI,降低了类与类之间的耦合,将对象交由 spring容 器管理,使用autowrite注入
- aop采用动态代理实现,降低了方法之间的耦合
- 可以整合其它框架
缺点(springBoot解决):
- 配置文件繁琐
- 坐标配置繁琐
Spring Bean 的作用域之间有什么区别?
答:scope属性,用于指定bean的作用范围
singleton:单例的(默认值)
prototype:多例的
request:作用于web应用的请求范围
session:作用于web应用的会话范围
global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session
Bean对象的生命周期:
单例对象